2014년 8월 4일 월요일

[자바바인딩, 동적바인딩, late binding, 자바다형성기초교육]자바정적/동적 바인딩(JAVA static/early biding, dynamic/late biding),오라클자바커뮤니티자바교육학원

[자바바인딩, 동적바인딩, late binding, 자바다형성기초교육]자바정적/동적 바인딩(JAVA static/early biding, dynamic/late biding),오라클자바커뮤니티자바교육학원

메소드에 대한 호출을 메소드 바디와 연결하는 것을 바인딩이라고 하는데 자바에서는 크게 2종류가 있다.

- 정적바인딩(static binding, early binding)
- 동적바인딩(dynamic binding, late binding)

1. 정적 바인딩(static/early biding)

- Object의 타입이 컴파일러에 의해 컴파일타임에 결정되는 것을 말하며 private, final, static 메소드의 경우 모두 정적 바인딩 이다.

class Dog {
private void jitda(){
System.out.println("멍멍~~");
}
public static void main(String[] args) {
Dog d = new Dog();
d.jitda();
}
}

[결과]
멍멍~~


2. 동적 바인딩(dynamic/late binding)

Object의 타입이 런타임중에 결정된다.
아래 예제에서 컴파일러는 Dog의 인스턴스가 Pudle의 인스턴스도 되기에 타입을 알수없으며 단지 컴파일 타입오류 체크를 
위해 Dog을 Base Type으로 사용하여 컴파일을 진행한다. 컴파일시점에는 호출된 메소드만 기술하고 넘어가게 되고 실행중에 
메모리힙에 생성된 Pudle의 jitda() 메소드가 호출되는 것이다.

package onj;

class Dog {
void jitda(){
System.out.println("멍멍~~");
}
}

class Pudle extends Dog {
void jitda(){
System.out.println("푸들~~");
}
}

public class DogTest {
public static void main(String[] args) {
Dog d = new Pudle();
d.jitda();
}
}


[결과]
푸들~~

댓글 없음:

댓글 쓰기