ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (JAVA) 다형성과 동적 바인딩
    JAVA 2021. 7. 19. 16:42

    객체 지향의 중요한 개념인 다형성과 동적 바인딩에 대해서 정리해 보려고 한다.

    추상화때 예시로 들었던 코드를 가볍게 수정해서 설명해보도록 하겠다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    package 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 메소드는 컴파일 시점에서 결정되기 때문에 동적 바인딩이 일어나지 않는다!

Designed by Tistory.