1. 상속과 중복 코드

요구사항이 변경됐을 때 두 코드가 함께 수정해야 한다면 이 코드는 중복이다.

DRY 법칙

모든 지식은 시스템 내에서 단일하고, 애매하지 않고, 정말로 믿을 만한 표현 양식을 가져야 한다. 코드안에 중복이 존재해서는 안된다.

중복 코드 수정

  1. 타입 코드 사용하기
    1. 낮은 응집도와 높은 결합도의 문제
  2. 상속
    1. 기존 코드를 재사용하기 때문에 결합도가 높다
    2. 특히 자식 클래스의 메서드 안에서 super 참조를 이용해 부모 클래스의 메서드를 직접 호출하면 두 클래스는 강하게 결합된다.

2. 취약한 기반 클래스 문제

부모 클래스의 변경에 의해 자식 클래스가 영향을 받는 현상을 취약한 기반 클래스 문제라고 부른다

1. 불필요한 인터페이스 상속 문제

Stack클래스는 Vector 클래스를 상속받아서 사용하는데 불필요한 add라는 메소드를 상속받아서 잘못 사용할 수 있다.

2. 메서드 오버라이딩의 오작용 문제

HashSet을 상속받아 사용하는 InstrumentedHashSet에서 addAll이라는 메소드를 오버라이딩하여 사용할 때 부모 객체 addAll에서 add하는 기능을 사용하고 있어서 중첩되서 add 되는 오류를 범한다

3. 부 모 클래스와 자식 클래스의 동시 수정 문제

부모클래스와 자식 클래스의 결합도가 높기 때문에 부모클래스가 수정이 되면 자식 클래스도 같이 수정이 될 확률이 높다.

상속을 위한 경고

  1. 자식 클래스의 메서드 안에서 super 참조를 이용해 부모 클래스의 메서드를 직접 호출할 경우 두 클래스는 강하게 결합된다.
  2. 상속받은 부모 클래스의 메서드가 자식 클래스의 내부 구조에 대한 규칙을 깨트릴 수 있다.
  3. 자식 클래스가 부모 클래스의 메서드를 오버라이딩할 경우 부모 클래스가 자신의 메서드를 사용하는 방법에 자식 클래스가 결합될 수 있다.
  4. 클래스를 상속하면 결합도로 인해 자식 클래스와 부모 클래스의 구현을 영원히 변경하지 않거나, 자식 클래스와 부모 클래스를 동시에 변경하거나 둘 중 하나를 선택할 수밖에 없다.