다형성과 동적 바인딩이 담겨있는 짤막한 코드

진조던·2022년 1월 20일
0

JAVA

목록 보기
1/2

⌨️ 코드

public class PolymorphismTest {

	public static void main(String[] args) {
		SubClass A = new SubClass();
		System.out.println(A.str);
		A.method();
		
		SuperClass B = A;
		System.out.println(B.str);
		B.method();
		//END
		
		/*
		 * Output
		 * 
		 * SUB!
		 * Sub Class method() call
		 * SUPER!
		 * Sub Class method() call
		 */
	}

}

class SuperClass{
	String str = "SUPER!";
	
	public void method() {
		System.out.println("Super Class method() call");
	}
}

class SubClass extends SuperClass{
	String str = "SUB!";
	
	@Override
	public void method() {
		System.out.println("Sub Class method() call");
	}
}

💡 눈여겨 볼 뽀인뜨

  1. 다형성(Polymorphism)이란?
    • 다양한 타입의 참조 변수가 동일한 형태의 객체를 참조할 수 있는 것.

  2. SubClass 클래스의 멤버 변수는 2개고 메서드는 1개.
SuperClass B = A;
System.out.println(B.str); 		//SUPER!
B.method();				//Sub Class method() call!
  1. 참조 변수(B)의 클래스는 SuperClass이지만 SubClass 클래스인 A의 주소를 넘겨주고 있다.
    • 묵시적 형변환을 통해 업캐스팅 되었다.

  2. 바인딩(Binding)이란?
    • 프로그램에서 사용될 변수나 메서드를 결정짓는 행위

  3. 동적 바인딩(Dynamic Binding)은 실행(Runtime)시점에, 정적 바인딩(Static Binding)은 컴파일 시점에 이루어짐.
    • 흔히 동적 바인딩을 Override에, 정적 바인딩을 Overload에 연관 짓는 이유는 Override된 메서드는 실행 시점까지 어떤 함수를 호출할지 알 수 없고, Overload된 메서드의 경우는 이미 Parameter에 의해 호출할 함수가 결정되어 있기 때문.

🤔 결론

상속 관계에서 객체의 멤버 변수나 메서드가 중복(@Override)되는 경우가 있을 수 있다.

이런 경우에는,

  • 멤버 변수는 참조 변수의 타입에 따라 결정된다.
  • 메서드는 무조건 자식 클래스의 메서드가 호출된다.

왜? 메모리에 생성된 실제 객체에 최적화된 메서드가 동작하기 때문이다.

0개의 댓글