메소드 호출부와 메소드 바디를 연결하는 것
바인딩에는 두가지 종류가 있다.
정적바인딩과 동적바인딩이다.
자바는 총 세가지의 타입이 있다.
1. 변수의 타입
int d = 1;
class Dog{
public static void main(String args[]){
Dog d1; // 여기서 d1은 Dog 타입
}
}
class Animal{}
class Dog extends Animal{
public static void main(String args[]){
Dog d1 = new Dog();
여기서 d1은 Dog 타입을 가지기도 하지만 Animal 타입을 가지기도 한다. 주목해야할 부분이 바로 이 부분이다. 그렇다면 d1은 Dog인가 Animal인가. 어디에 바인딩되는지를 알려면 다음을 보자.
컴파일 시간의 타입이 결정되는 정적 바인딩은 함수의 호출과 정의된 부분이 이미 바인딩 되어있다.
class Dog{
private void eat(){System.out.println("dog is eating...");}
public static void main(String args[]){
Dog d1=new Dog();
d1.eat();
}
}
런타임에 타입이 결정되는 동적 바인딩은 함수의 호출과 정의된 부분이 프로그램 실행시에 사용되는 객체의 클래스 타입에 따라 결정된다.
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();
}
}
위의 출력은 Output:dog is eating... 이다.
부모클래스의 eat() 이 자식 클래스에 의해 오버라이딩 된 것이다.
정적바인딩은 이미 연결되어 있어 수행속도가 빠르고 메모리효율도 좋다.
반대로 동적바인딩은 수행속도도 느리고 메모리 효율도 좋지않다. 그러나 오버라이딩으로 객체 지향 프로그래밍이 가능해 코드의 재사용성을 높일 수 있다.