-
[객체지향] 상속의 단점 - 메서드 오버라이딩의 부작용카테고리 없음 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() 을 호출한다는 사실을 인지하고 있어야
원치 않는 부작용을 방지할 수 있다.