ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [객체지향] 상속의 단점 - 메서드 오버라이딩의 부작용
    카테고리 없음 2022. 4. 17. 13:37

    클래스 상속 관계에서,
    자식클래스가 부모클래스의 메서드를 오버라이드 하는 경우,
    부모클래스가 해당 메서드를 사용하는 방식에 자식클래스가 결합된다.

     

    예시:
    클래스 A 의 func2() 구현에는 func1() 을 호출하는 코드가 있는데,
    클래스 B 가 func1() 을 오버라이드 했기 때문에 B 의 func1() 이 호출되는 상황이다.

    class A {
        void func1() {
            System.out.println("A: func1");
        }
    
        void func2() {
            System.out.println("A: func2");
            func1();    // 클래스 B 에서 func1() 을 오버라이드 하고 있기 때문에 부작용 발생 가능
        }
    }
    
    class B extends A {
        @Override
        void func1() {
            System.out.println("B: func1");
        }
    
        void run() {
            func2();
            System.out.println("B: run");
        }
    }
    
    class Main {
        public static void main(String[] args) {
            B b = new B();
            b.run();
        }
    }

    실행결과:

    A: func2
    B: func1
    B: run

    클래스 B 를 작성하는 입장에서, A 의 func2() 가 내부적으로 func1() 을 호출한다는 사실을 인지하고 있어야
    원치 않는 부작용을 방지할 수 있다.

    댓글

Designed by Tistory.