본문 바로가기
Java

[Advanced JAVA] Java Object

by 루에 2014. 12. 24.
반응형

interface

class 정의 시 "~면 외부에 알려준다"와 같은 경우 interface를 정의하여 사용


interface의 사용 예

// interface 정의

public interface CounterListener{

public void onNotifyCount(int count);

}


public class Counter{

private int Count = 0;

CountListener mListener;

// 리스너가 입력되면 세팅

public void setCounterListener(CounterListener listener){

mListener = listener;

}

public void increase(){

mCount++;

if(mCount % 10 == 0){

// notify out side

if(mListener != null){

mListener.onNotifyCount(mCount);

}

}

}

}



inner class

  • 클래스 선언 내부에 다른 클래스를 선언하는 것
  • 클래스를 그룹화해서, 하나의 클래스에 둘 수 있기 때문에 유용하다
  • 다른 클래스에 의해 공유되지 않는 구현부를 가질 수 있다
  • 안드로이드에서는 자료 맵핑 및 이벤트 핸들링 매커니즘에 많이 사용된다
  • 안드로이드 inner에는 익명, 정적, 내부, 지역 클래스가 존재한다
  • outer class 객체가 생성되야만 inner  class 객체를 생성할 수 있다
  • 클래스를 static으로 생성하면 안된다(외부에 class를 정의한 것과 같게 됨)
  • inner class에서 outer class를 참조할 때는 outerClass.this 로 사용
Anonymous Class(익명 클래스)
이름 없이 class를 정의하여 객체를 생성한 class
안드로이드에서 많이 쓰인다
extends하고 싶은데 한 번 만 쓴다거나 할 때 사용

public class MainClass{
public void onCreate(){
Counter counter = new Counter();

// Anonymous class implements CountListener 한 뒤 객체 생성 후 new Anonymous class한 것과 같은 의미
counter.setCounterListener(new CounterListener(){
@Override
public void onNotifyCount(int count){
System.out.println("count : " + count);
}
});
}
}

The instanceof Operator
객체의 타입을 알아보는 명령어

public class Employee extends Object
public class Manager extends Employee
public class Engineer extends Employee

// e가 Manager인지 Engineer인지 알아본다
public void doSomething(Employee e){
if(e instanceof Manager){
//Manager
}else if(e instanceof Engineer){
// Engineer
}else{}
}


Casting Object

    • 객체의 타입을 알아보기 위해서는 instanceof를 사용
    • 객체를 캐스팅함으로써 그 객체의 모든 멤버에 접근할 수 있다
    • 알맞은 캐스팅을 위해서는 아래의 규칙을 따른다

상위 형태로의 캐스팅은 자동으로 이루어진다

하위 형태로의 형 변환은 컴파일러 체크가 먼저 이루어지고 실행 시에도 체크가 이루어진다



The Ovject Class

모든 클래스의 최상위 클래스

extends를 쓰지 않아도 묵시적으로 extends Object 한 것과 같은 의미



The == Operator and equals Method

'==' 연산자는 같은 '객체'인지 판단

equals()는 내용이 같은지 판단



toString Method

자바의 모든 객체는 String 연산이 가능하다

객체를 String으로 바꾼다

String을 연결할 때 사용한다


Wrapper Classes

primitive 타입을 오브젝트처럼 다룰 수 있다

두 타입은 서로 다른 class지만 값은 같고 필요할 경우 변환해서 사용할 수 있다


 Primitive Type

Wrapper Classes 

boolean 

Boolean 

byte 

Byte 

char 

Character 

short 

Short 

int 

Integer 

long 

Long 

float 

Float 

double 

Double 



Java VM

Object Runtime 구조

Java Stack Frame

변수 등이 위치하며 HEAP의 객체와 연결

HEAP

new 등의 객체들이 위치. class와 연결

CLASS AREA

class 객체들이 위치


JVM 명세의 이해

명령어들의 집합과 각 명령어의 의미 정의 : 바이트 코드

byte code는 플랫폼 독립적으로 동작

보안에 문제가 없는지 확인하는 알고리즘 : Verification Algorithm


Byte Code

Stack 기반의 명령어 + 객체지향 명령어로 구성


반응형

댓글