반응형

Java) Static Binding 과 Dynamic Binding


메소드 바디에 메소드 호출을 연결하는 것을 " 바인딩 " 이라고 합니다.

두 가지 타입이 바인딩이 있는데요.


1) static binding   (정적 바인딩)

2) dynamic binding (동적 바인딩)


일단 타입을 이해해봅시다.


1) 변수 타입

int data = 30;

각 각의 변수들은 타입을 가지고있고 primitive 타입이거나 아닐 수 있습니다. 

정수 타입의 데이터 변수가 있고 30이란 정수값을 가지고있네요.



2) 참조 타입 

class Dog{  

 public static void main(String args[]){  

  Dog d1;//Here d1 is a type of Dog  

 }  

 



d1 객체는 Dog타입을 가지고있습니다.


3) 객체 타입

class Animal{}  


class Dog extends Animal 

 public static void main(String args[]){  

  Dog d1=new Dog();  

  

}  

Object는 특이한 자바 클래스의 인스턴스입니다.

하지만 Object 또한 부모 인스턴스이기도하죠. 

d1은 Dog클래스의 인스턴스입니다만, Animal의 인스턴스이기도하지요.


이제 스태틱 바인딩을 알아봅시다.


객체의 타입이 컴파일러에 의해서 컴파일시 정해지는것을 스태틱 바인딩이라고합니다.

만약 private, final, static method가 클래스 내부에 있다면 스태틱 바인딩입니다.




//스태틱바인딩의 예입니다.


2 ) Dynamic binding


 class Animal{  

 void eat(){System.out.println("animal is eating...");}  

 

  

class Dog extends Animal{  

 void eat(){System.out.println("dog is eating...");}  

  

 public static void main(String args[]){  

  Animal a=new Dog();  

  a.eat();  

 }  

}  

Run-time시에 객체의 타입이 결정된다면동적 바인딩입니다. 

객체타입은 컴파일러에 의해 결정될  없습니다.

Dog 인스턴스의 또한 Animal 인스턴스이기 때문이죠.

그래서 컴파일러는 기본유형만 알고 제대로된 a 타입을 모릅니다.



반응형
by 발전소장 에르 :) 2017. 8. 11. 00:55