issues
search
yepdi
/
TIL
Today I Learn
0
stars
0
forks
source link
오브젝트 - 상속과 코드 재사용
#14
Open
yepdi
opened
2 years ago
yepdi
commented
2 years ago
객체지향에서는 코드를 재사용하기 위해 새로운 코드를 추가 한다 -> 새로운 클래스를 추가한다
상속 : 클래스 안에 정의된 인스턴스 변수와 메서드를 자동으로 새로운 클래스에 추가하는 구현 기법
합성 : 기존 클래스의 인스턴스를 포함시키는 방법
상속과 중복 코드
DRY 원칙 (Don't Repeat Yourself)
중복을 제거하는 것
한 번, 단 한번(Once and Only Once) 원칙
단일 지점 제어(Single-Point Control) 원칙
중복과 변경
중복 코드가 늘어날 수록 애플리케이션은 변경에 취약해지고 버그가 발생할 가능성이 높아진다
두 클래스 사이의 중복 코드를 제거하는 한 가지 방법은 클래스를 하나로 합치는 것
NightlyDiscountPhone 클래스가 Phone 클래스를 상속받게 만들면 코드를 중복시키지 않음 => 하지만 강하게 결합되어 있음
코드 중복을 제거하기 위해 상속을 사용했어도 추가 구현을 위해 새로운 중복 코드를 만들어야 함
상속을 위한 경고
자식 클래스의 메서드 안에서 super 참조를 이용해 부모 클래스의 메서드를 직접 호출할 경우 두 클래스는 강하게 결합된다. super 호출을 제거할 수 있는 방법을 찾아 결합도를 제거하라
상속받은 부모 클래스의 메서드가 자식 클래스의 내부 구조에 대한 규칙을 깨트릴 수 있다
자식 클래스가 부모 클래스의 메서드를 오버라이딩할 경우 부모 클래스가 자신의 메서드를 사용하는 방법에 자식 클래스가 결합될 수 있다
클래스를 상속하면 결합도로 인해 자식 클래스와 부모 클래스의 구현을 영원히 변경하지 않거나, 자식 클래스와 부모 클래스를 동시에 변경하거나 둘 중 하나를 선택할 수밖에 없다.
취약한 기반 클래스 문제
상속은 자식 클래스와 부모 클래스의 결합도를 높인다
부모 클래스의 변경에 의해 자식 클래스가 영향을 받는 현상 (취약한 기반 클래스 문제)
상속은 자식 클래스를 점진적으로 추가해서 기능을 확장하는데 용이하지만 높은 결합도로 인해 부모 클래스를 점진적으로 개선하는 것은 어렵게 한다
최악의 경우 모든 자식 클래스를 동시에 수정하고 테스트해야 할수도 있다
Phone 다시 살펴보기
추상화에 의존하라
두 메서드가 유사하게 보인다면
차이점을 메서드로 추출하라
. 메서드 추출을 통해 두 메서드를 동일한 형태로 보이도록 만들 수 있다
부모 클래스의 코드를 하위로 내리지 말고
자식 클래스의 코드를 상위로 올려라
. 부모 클래스의 구체적인 메서드를 자식 클래스로 내리는 것보다 자식 클래스의 추상적인 메서드를 부모 클래스로 올리는 것이 재사용성과 응집도 측면에서 더 뛰어난 결과를 얻을 수 있다
차이를 메서드로 추출하라
중복 코드를 부모 클래스로 올려라
자식 클래스들 사이의 공통점을 부모 클래스로 옮김으로써 실제 코드를 기반으로 상속 계층을 구성할 수 있다
. 추상화에 의존
차이에 의한 프로그래밍
기존 코드와 다른 부분만을 추가함으로써 애플리케이션의 기능을 확장하는 것
중복 코드를 제거하고 코드를 재사용 하는 것
중복 코드를 제거하고 코드를 재사용할 수 있는 방법은 상속.
중복 코드를 하나의 클래스로 모은 후 상속 관계로 연결
허나 상속이 코드 재사용이라는 측면에서 매우 강력한 도구지만 강력한 만큼 잘못 사용할 경우에 돌아오는 피해가 크다
상속과 중복 코드
중복과 변경
상속을 위한 경고
취약한 기반 클래스 문제
Phone 다시 살펴보기
추상화에 의존하라
차이를 메서드로 추출하라
중복 코드를 부모 클래스로 올려라
차이에 의한 프로그래밍