-
06. 동적 바인딩 & 정적 바인딩멋사 부트캠프/Java 프로그래밍 2025. 3. 11. 17:19
1. 상속 시, 정적바인딩/동적바인딩 예시
public class MTest01 { public static void main(String[] args) { DD d1 = new DD(); System.out.println("first value : " + d1.getRes()); prn(d1); } //정적 바인딩 (static) - 대규모 프로젝트에서 다중 상속을 받을 경우 메모리 부하가 생길 수 있다. public static void prn(DD res) { res.setA(100); res.setB(20); res.setC(1); res.setD(1); System.out.println(res.getRes()); } //동적 바인딩 : 메모리에는 AA - BB - DD 생성 되지만 Type AA이므로 AA 클래스의 메서드만 참조 할 수 있다. //자식 -> 부모를 참조하는 것이 보통이지만, 역으로 부모에서 자식을 필요할 때 마다 참조하는 것이 동적 바인딩이다. //즉, 메모리에 DD 객체가 로드 된 상태에서, 최상위 부모의 주소값만 있으면 주소따라 찾아 갈 수 있다. public static void prn02(AA res) { res.setA(100); res.setB(20); ((BB) res).setC(1); ((DD) res).setD(1); System.out.println(((DD) res).getRes()); } }
Heap 영역에 부모-자식을 로드 시켜놓은 후, 필요에 따라서 타입 캐스팅을 통하여 자식 클래스가 가진 특정 메서드만을
호출하여 사용할 수 있다. 부모 클래스의 주소값을 알고 있기 때문에 상속 구조에서는 참조할 수 있다.
자식 클래스에서 메서드 오버라이딩을 한 경우, 생성된 부모 클래스 객체에서는 자식 클래스의 메서드만이 호출된다.
2. 메모리 영역과 바인딩 방식
바인딩 시점 적용되는 개념 사용 메모리 영역 정적 바인딩 (Static Binding) 컴파일 타임 private, static, final 메서드, 메서드 오버로딩 주로 스택(Stack) 메모리 동적 바인딩 (Dynamic Binding) 런타임 메서드 오버라이딩, 다형성 힙(Heap) 메모리 (객체 저장), 스택(참조 변수 저장) 1. 동적 바인딩이 필요한 경우
동적 바인딩(Dynamic Binding)이 필요한 이유는 유연하고 확장 가능한 코드를 작성하기 위해서입니다.
특히 다형성(Polymorphism) 을 활용할 때 동적 바인딩이 필수적으로 사용됩니다.일례로써, Animal 부모 클래스 아래에 Bird, Dog 2개의 자식 클래스가 있다고 가정할 때,
부모 클래스에서 변수나 메서드를 바꾸면 공통적인 부분은 일괄적으로 수정이 되고, 오버라이딩된 메서드도
부분적으로 타입 캐스트를 이용하여 수정할 수 있다. 그래서 타입을 부모클래스로 선언한다.
2. 정적 바인딩이 필요한 경우
정적 바인딩(Static Binding)은 컴파일 타임에 메서드나 변수의 호출이 결정되는 경우에 사용됩니다.
주로 속도, 안정성, 메모리 효율성이 중요한 경우 정적 바인딩이 유리하지만,대용량 프로그램과 같은 경우 Stack 영역이 너무 타이트해져서 오히려 무거워 질 수 있고, 심하면
스택 오버플로(Stack Overflow) 위험성도 동시에 존재한다.왠만하면, 객체는 힙 영역에 동적 바인딩 시키자.
'멋사 부트캠프 > Java 프로그래밍' 카테고리의 다른 글
08. 예외 처리 (0) 2025.03.12 07. 추상 클래스 & 인터페이스 (0) 2025.03.11 05. 배열[1차, 2차] & 객체 배열 활용 (0) 2025.03.10 04. 연산자 & 제어문 (2) 2025.03.10 03. 객체 생성, 상속&다형성 [Overload / Override] (0) 2025.03.05