새소식

반응형
Study/오브젝트

[Object] 10장 : 상속과 코드 재사용

  • -
반응형

 

객체지향 프로그래밍의 장점 중 하나는 코드를 재사용하기가 용이하다는 것

- 클래스를 재사용하기 위해 새로운 클래스를 추가하는 가장 대표적인 기법인 상속에 관해 살펴보자

- 재사용 관점에서 상속이란 클래스 안에 정의된 인스턴스 변수와 메서드를 자동으로 새로운 클래스에 추가하는 구현 기법

  - 상속 이외에 코드를 효과적으로 재사용하는 방법인 합성은 다음장에서 배워보자

 

DRY 원칙 (Don't Repeat Yourself)

전화요금을 계산하는 애플리케이션을 통한 예시

- 밤에 전화하면 세금을 할인해 주는 Phone의 등장을 상속으로 구현하려 함 

 

타입 코드 사용 - 낮은 응집도와 높은 결합도라는 문제 발생

if(type == PhoneType.REGULAR) { } else if (type == PhoneType.NIGHT) { }

 

상속을 이용해서 중복 코드 제거하기 - 자식 코드가 부모 클래스에 결합이 심해진다. 

 

상속이라는 문맥 안에서 결합도가 초래하는 문제점

캡슐화를 약화시키고 결합도를 높인다

상속을 통한 재사용을 고려하지 않은 클래스를 상속받으면.. 장점보다는 문제점이 커진다 

 

지금까지의 문제를 해결할 수 있는 키는 추상화이다.

- 자식 클래스가 부모 클래스의 구현이 아닌 추상화에 의존하도록 만드는 것

- 차이점을 메서드로 추출하고 공통적인 부분은 부모 클래스로 이동

 


 

업무에서도 중복 코드를 제거하려고 많이 노력한다.

그 과정 중에 FACTORY를 사용하거나, 상속을 사용하는 것 같다. 

 

상속을 이용한 중복 제거의 단점으로는 자녀가 부모의 영향을 많이 받는다

- 부모의 코드를 잘 알고 있어야, 자식 코드를 작성할 수 있다

- 부모의 코드가 바뀌면, 자식에게도 영향이 갈 수 있다

이러한 현상이 취약한 기반 클래스라고 말하나 보다. 이런 용어가 있는지도 처음 알았는데 잘 지은 단어인 거 같다

 

취약한 기반을 토대로 코드를 작성하기보다는 

중복을 제거하기 위해서 추상화를 시키자

추상화 클래스에 공통부분을 작성하고, 각 클래스마다 달라지는 행동은 하위에서 작성하자.

그러기 위해서는 추상화 메서드를 잘 뽑아야 한다. 

반응형

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.