-
(JAVA) 다형성과 동적 바인딩JAVA 2021. 7. 19. 16:42
객체 지향의 중요한 개념인 다형성과 동적 바인딩에 대해서 정리해 보려고 한다.
추상화때 예시로 들었던 코드를 가볍게 수정해서 설명해보도록 하겠다.
1234567891011121314151617181920212223package blog_binding;class Animal{void howl() {System.out.println("Animal");}}class Dog extends Animal{void howl() {System.out.println("Dog");}}public class Test1 {public static void main(String[] args) {Animal a = new Dog();a.howl();}}cs 간단하게 동물 클래스와 동물 클래스를 상속받는 강아지 클래스를 정의하였다.
메인 함수에서 출력되는 내용은 무엇일까?
- 1. Animal
- 2. Dog
- 3. Animal
Dog - 4. 에러
정보처리기사 시험에서 나올법한 질문인데 이게 동적 바인딩을 이해하지 못하고 있는 상태라면 무척 헷갈린다.
정답은 2번이다. 보통 1번이 나올거라고 생각할 수 있는데 컴파일 시점에서는 1번이 출력되는게 맞는 결과이다.
하지만 런타임 시점에서는 new 연산자를 통해 Dog 객체가 생성되고 Dog 객체에 오버라이딩 된 howl()을 호출하게 된다.
정리해보면 동적 바인딩은 런타임 시점에 형성된 객체 타입을 기준으로 실행될 함수를 결정하고 호출한다는 것을 의미한다.
다형성이 적용되었기 때문에 동적 바인딩이 발생할 수 있다.
예외적으로 static 메소드는 컴파일 시점에서 결정되기 때문에 동적 바인딩이 일어나지 않는다!
'JAVA' 카테고리의 다른 글
(JAVA) Queue를 이용한 간단한 영화관 대기열 프로그램 만들기 (0) 2021.07.19 (JAVA) Stack 과 Queue 자료구조 (0) 2021.07.19 (JAVA) 추상화와 추상클래스 (0) 2021.07.19 (JAVA) 객체 지향 언어의 특징 (0) 2021.07.18 (JAVA) 메소드 오버로딩 vs 메소드 오버라이딩 (0) 2021.07.07