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 로 사용
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 기반의 명령어 + 객체지향 명령어로 구성
댓글