[java] binding

happiyoung_·2024년 8월 7일

java

목록 보기
2/9

binding?

메소드 호출부와 메소드 바디를 연결하는 것

바인딩에는 두가지 종류가 있다.
정적바인딩과 동적바인딩이다.

  • static binding, 정적 바인딩 : 객체의 타입이 컴파일 시간에 결정되는 경우
  • dynamic binding, 동적 바인딩 : 객체의 타입이 런타임에 결정되는 경우

잠시만, 객체의 타입?

자바는 총 세가지의 타입이 있다.
1. 변수의 타입

int d = 1;
  1. 레퍼런스의 타입
class Dog{
	public static void main(String args[]){
    	Dog d1; // 여기서 d1은 Dog 타입
   	}
}
  1. 객체의 타입
class Animal{}

class Dog extends Animal{
	public static void main(String args[]){
    	Dog d1 = new Dog();

여기서 d1은 Dog 타입을 가지기도 하지만 Animal 타입을 가지기도 한다. 주목해야할 부분이 바로 이 부분이다. 그렇다면 d1은 Dog인가 Animal인가. 어디에 바인딩되는지를 알려면 다음을 보자.

Static binding

컴파일 시간의 타입이 결정되는 정적 바인딩은 함수의 호출과 정의된 부분이 이미 바인딩 되어있다.

class Dog{  
   private void eat(){System.out.println("dog is eating...");}  
  
   public static void main(String args[]){  
     Dog d1=new Dog();  
     d1.eat();  
   }  
}

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();  
   }  
}  

위의 출력은 Output:dog is eating... 이다.
부모클래스의 eat() 이 자식 클래스에 의해 오버라이딩 된 것이다.

comparision

정적바인딩은 이미 연결되어 있어 수행속도가 빠르고 메모리효율도 좋다.
반대로 동적바인딩은 수행속도도 느리고 메모리 효율도 좋지않다. 그러나 오버라이딩으로 객체 지향 프로그래밍이 가능해 코드의 재사용성을 높일 수 있다.

profile
해삐한 다영의 컴퓨터와 친해지기 프로젝트 🥰

0개의 댓글