●isinstance()

- 객체가 어떤 클래스로부터 만들어 졌는지 확인한다.

- 기본형태

isinstance(객체, 클래스)

 

ex)

 

 

 

 

 

●클래스 함수 만들기

- 기본형태

class 클래스명
  @classmethod
  def 클래스 함수(cls, 매개변수)
     ~~
     
     
     
클래스명.클래스 함수(매개변수)

ex)

 

 

 

 

 

●상속

- 기본형태

class 부모클래스:
   ~~~
   
   
class 자식클래스(부모클래스):
   def __init__(self):
      def 부모클래스.__init__(self)
      ~~

 

 

Posted by -현's-

댓글을 달아 주세요


●Adapter 재정의

- Adapter의 자식 개체중 ArrayAdapter는 단순한 텍스트만 보여주고자 할때 사용한다. 개발자가 정의한 복잡한 아이템 위젯은 지금가지 존재하지 않았던 새로운 위젯과 마찬가지이므로, ArrayAdapter가 보여줄 수 없다. 그래서 개발자가 직접 Adapter클래스를 상속받아 재정의해서 사용해야한다.







●예제


- FruitActivity.java

package com.example.day0321;


import java.util.ArrayList;


import android.app.Activity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.ListView;


public class FruitActivity extends Activity{

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);


setContentView(R.layout.fruit_main);

ListView lv = (ListView)findViewById(R.id.lv);

             //개발자가 재정의한 Adapter이다.

MyAdapter adapter = new MyAdapter(this);

lv.setAdapter(adapter);

}

}





- MyAdapter.java

package com.example.day0321;


import java.util.ArrayList;


import android.content.Context;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.webkit.WebView.FindListener;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.RelativeLayout;

import android.widget.TextView;


public class MyAdapter extends BaseAdapter{

Context context;

ArrayList lst = new ArrayList();

LayoutInflater inflater;

//생성자를 만든다.

public MyAdapter(Context context) {

lst.add("수박");

lst.add("귤");

lst.add("포도");

lst.add("키위");

lst.add("바나나");

lst.add("사과");

lst.add("딸기");

lst.add("토마토");

lst.add("레몬");

lst.add("망고");

lst.add("파인애플");

lst.add("방울토마토");

lst.add("메론");

//getSystemService은 Activity클래스의 메서드이다.

inflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);


}

//아래의 재정의된 모든 메서드를 호출하는 주체는 ListView이다.

//즉 ListView는 아래의 메서드를 통해 데이터 정보를 반영한다.

//리스트뷰에게 리스트의 개수를 몇개로 구성해야하는지를 알게해준다.(호출자:ListView)

public int getCount() {

return lst.size();

}

//리스트뷰에게 지정한 postion 변수에 해당하는 순서의 데이터를 추출할 수 있도록 해준다.

public Object getItem(int position) {

return null;

}

public long getItemId(int position) {

return 0;

}

//리스트뷰는 getView 메서드를 getCount()반환값 만큼 호출하여, 각 item을 구성하게 된다.

//이 예제의 경우 데이터가 13건이기 때문에 인플레이션 13번 일으켜 그 결과를 return해준다.

public View getView(int position, View convertView, ViewGroup parent) {

//getView메서드의 특징

//스마트폰에 아이템이 화면에 보여지는 시점에 화면구성을 위해 호출된다.

//따라서 내가 보여줄 데이터가 100건이라도 화면에 보여질 리스트의 개수가 13건이면

//getView호출은 12번을 먼저 호출한 후, 화면에 가려졌다가 다시 보이게 되는 아이템이 발생하면

//다시 getView가 발생한다.

//따라서 한 아이템당 한번만 인플레이션이 이루어지도록 조건문을 넣어줘야 한다.

View view=null;

if(convertView==null){

view = inflater.inflate(R.layout.fruit_item, parent, false);

}else{

view = convertView;

}

RelativeLayout layout = (RelativeLayout)view;

//레이아웃 객체는 자신이 포함하고 있는 위젯들을 id로 검색할수 있다.

TextView txt_title = (TextView)layout.findViewById(R.id.txt_title);

TextView txt_content = (TextView)layout.findViewById(R.id.txt_content);

txt_title.setText((String)lst.get(position));

txt_content.setText((String)lst.get(position)+"입니다.");

Log.i(this.getClass().getName(), "View의 주소값:"+view);

return layout;

}

}




- fruit_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <ListView 

        android:id="@+id/lv"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"/>


</LinearLayout>

 



- fruit_item.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

    

    <ImageView 

        android:id="@+id/img_fruit"

        android:layout_width="50dp"

        android:layout_height="50dp"

        android:layout_alignParentLeft="true"

        android:src="@drawable/ic_launcher"/>

    

    <TextView 

        android:id="@+id/txt_title"

        android:layout_width="150dp"

        android:layout_height="wrap_content"

        android:text="수박"

        android:textSize="20dp"

        android:layout_centerHorizontal="true"/>

    

    <TextView 

        android:id="@+id/txt_content"

        android:layout_width="150dp"

        android:layout_height="wrap_content"

        android:text="수박입니다."

        android:textSize="20dp"

        android:layout_below="@id/txt_title"

        android:layout_centerHorizontal="true"/>

    

    <Button 

        android:id="@+id/btn_buy"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="선택"

        android:layout_alignParentRight="true"/>

        

</RelativeLayout>

 




















Posted by -현's-

댓글을 달아 주세요



●상속

- 다른 클래스의 멤버를 해당 클래스의 멤버로 포함시키는 것이다.


- 상속되는 클래스를 부모클래스,super클래스,base클래스라고 하고 상속받는 클래스를 자식클래스,sub클래스,derived클래스라고 한다.


- sub클래스 객체를 생성하면 super클래스의 생성자도 같이 생성된다.


ex)






- super클래스의 멤버초기화는 멤버변수가 public이면 직접 접근 가능하지만 private로 선언되었으면 아래처럼 멤버 이니셜라이저로 초기화 한다.











●protected 멤버

- protected 멤버는 private멤버와 같다. 다만 상속관계에서는 public와 같다.


ex)









●상속을 사용하는 이유

- 각각의 클래스에 중복되는 부분이 많을 경우, 공통되는 부분을 super클래스로 추상화하고, 이를 상속하면 클래스를 정의하는데 수월해진다.











'프로그래밍 > c++' 카테고리의 다른 글

c++ 상속(Inheritance)  (0) 2013.06.23
c++ static  (0) 2013.06.21
c++ const  (0) 2013.06.20
c++ 복사생성자  (0) 2013.06.19
c++ 클래스(class) 3  (0) 2013.06.19
c++ 클래스(class) 2  (0) 2013.06.17
Posted by -현's-

댓글을 달아 주세요


●new 연산자 - 오브젝트를 동적으로 생성할 때 사용
ex)
A *a;
a=new A;

A *a=new A;



●delete 연산자 - new연산자로 확보한 메모리는 delete연산자로 해체해야한다.
ex)
A *a=new A;
delete a;




●new, delete를 이용해서 int형 등의 메모리 확보, 해체
ex)
int *a=new int;
delete a;

//malloc,free를 쓸경우
int *a=(itn *)malloc(sizeof(int));
free(a);

●malloc()함수보다 new연산자를 사용하는 것이 간단하기 때문에 권장




●new연산자를 이용한 배열용 메모리 확보, 해체
ex)
a=new[10];       //[]안에 숫자 적어야 함
delete []a;        //delete뒤에 '[]'기술해야 함




●참조
- 변수에 별명을 붙이는것. c언어의 포인터와 달리 사용할때 '*' 안 써도 된다. 한쪽을 변경하면 다른 한쪽도 동일하게 변경된다. '&'사용.
ex)
int a;
int &b=a;    //b가 별명이다.
b=10;
cout<<b<<endl;    //b는10 이다
cout<<a<<endl;    //a는10 이다



●함수의 인수로 참조를 사용하기 - 가인수를 참조하면 함수내부에서 실인수를 변경할 수 있다.
ex)
double A(double &a, double &b){
return a+b;
}
double x=1.1 , y=2.2;
double ans=A(x, y);



●인수를 const 형식의 참조로 만들
- 실인수의 값이 변경되면 곤란한 경우 가인수에 onst를 붙인다. 구조체 같은 큰 데이터를 함수에 전달할 때 const형식으로 하면 효과적이다.
ex)
void A(const double &a)
{
~~~
}



●상속 - 이미 존재하는 클래스를 바탕으로 새로운 크랠스를 만드는 것.
클래스명 뒤에 ' :접근제한자 부모클래스명 '을 기술
ex)
class Food{
~~
};
class Fruit :public Food {
~~
};



●자식 클래스의 오브젝트는 부모클래스의 오브젝트에 대입 가능
   부모 클래스의 오브젝트는 자식클래스의 오브젝트에 대입 불가능



●자식 클래스에서 부모 클래스의 멤버함수를 재정의
- 함수명, 인수, 반환값은 동일해야함. 재정의 한쪽의 함수가 호출됨
ex)
class Food{
   public:
      void setP(int a){
      price=a;
      }
   private:
      int price;
};
class Fruit :public Food{
   public:
      void setP(int a){
      Food::setP(a-20);            //자식클래스에서 부모클래스에 있는 같은 이름의 함수를 호출하기 위해서는
      }                                   //스코프연산자(::)를 사용
};



●가상 함수를 재정의 한 것을 오버라이딩이라 한다.




●순수 가상 함수
- 기본 클래스에서 내용을 정의하지 않은 가상함수. 순수가상함수를 포함하는 클래스의 오브젝트는 생성X. 함수 선언 제일 앞에 'virtual'을 쓰고 제일 뒤에 '=0'을 붙인다.
ex)
class Food{
   public:
      virtual void setP(int a)=0;
};

'프로그래밍 > c++' 카테고리의 다른 글

c++ visual c++로 프로젝트 시작하기  (0) 2013.06.11
c++ 폴더안에 있는 헤더파일 include  (0) 2013.05.26
c++ 기본 문법 정리4  (0) 2012.02.17
c++ 기본 문법 정리3  (0) 2012.02.17
c++ 기본 문법 정리2  (0) 2012.02.16
c++ 기본 문법 정리1  (0) 2012.02.16
Posted by -현's-

댓글을 달아 주세요


●상속 - 다른 클래스의 멤버를 계승하는것, 'extends' 를 사용한다
ex)
class A{
   int a
}
class B extends A{
   ~~
}



●private 접근 제한자가 붙은 멤버는 다른 오브젝트에서 이용할수 없고 서브클래스로 상속할수 없다.




●super - 서브클래스안에서 super라는 말을 사용하면 슈퍼클래스의 필드와 메서드를 참조할 수 있다.
ex)
class A extents B{
     void aaa(){
     super.bbb();
   }
}



●추상 메서드 - 처리 내용은 기술하지 않고, 호출하는 방법만을 정의한 메서드

●추상 클래스 - 추상 메서드를 가진 클래스

●인터페이스(interface) - 추상메서드와 정의만이 멤버가 될수 잇는 것으로 클래스와는 다르다

●추상메서드와 추상클래스의 정의 - abstract라는 수식자를 사용
ex)
abstract class A{
      String a;
      abstract void aaa();
}



●인터페이스 정의와 구현
ex)
interface A{
   public abstract void say();
}
class B implements A{               //인터페이스를 구현하려면 'implements'를 사용한다
   public void say(){
              ~~
   }
}




●인터페이스의 상속 - 인터페이스는 다른 인터페이스를 상속할 수 있고 'extends'를 쓴다
ex)
interface A{
    int a;
    void f();
}
interface B extends A{
    int g;
    void h();
}


●Object 클래스
- 모든 클래스의 슈퍼클래스이다. Object클래스의 메서드는 어떤 클래스에서도 이용할 수 있다




●예외 처리 방법
try{
  예외가 일어날 것 같은 처리
} catch(예외 클래스명  변수명){
  예외발생시 수행할 처리
} finally{                    //예외가 일어나든 안 일어나든 finally문은 항상 실행. finally문은 생략할수 잇다
  처리
}



●throws
- 예외가 일어날 것 같은 메서드는 'throws'를 사용하여 메서드에서 일어날 수 있는 예외 클래스를 지정. 메소드를 호출한 곳에 이 예외를 받아 줄 catch문이 없으면 컴파일 에러 발생
ex)
try{
   a(b);
   int b=1;
} catch(Exception e){
        ~~~
}
void a(int b) throws Exception{
          ~~
}


●패키지 선언
package 패키지명;    //파일 첫머리에 쓴다


●패키지 사용
import  패키지명.클래스명;



●접근 제한자
 접근제한자 오브젝트 안에서의 이용  서브 클래스로 상속 오브젝트외부
(동일한 패키지 내) 
오브젝트외부
(다른 패키지) 
 public
-어떤 때라도 상속과 이용이 가능
 이용가능 패키지 내 모두 이용가능   이용가능  이용가능
 protected
-동일한 패키지 내에서만 이용이 가능하고 상속은 패키지 상관없이 가능
 이용가능 패키지 내 모두 이용가능   이용가능  이용불가
 없음
-동일한 패키지 내에서만 상속과 이용가능
 이용가능 패키지 내 이용가능  이용가능  이용불가
 private
-오브젝트 내에서만 이용가능
 이용가능 패키지 내 모두 이용불가   이용불가  이용불가












'프로그래밍 > java' 카테고리의 다른 글

자바 난수 발생하기  (0) 2012.06.20
자바(java) 프로그래밍  (0) 2012.01.30
자바(java) 문법 간단 정리4  (0) 2012.01.30
자바(java) 문법 간단 정리3  (0) 2012.01.30
자바(java) 문법 간단 정리2  (0) 2012.01.30
자바(java) 문법 간단 정리1  (0) 2012.01.30
Posted by -현's-

댓글을 달아 주세요