도니의 iOS 프로그래밍 세상

[오브젝트 2회독] 10장 - 상속과 코드 재사용 본문

OOP

[오브젝트 2회독] 10장 - 상속과 코드 재사용

Donee 2024. 11. 19. 19:31
  • 객체 지향 코드 재사용의 관점에서 상속이란 클래스 안에 정의된 인스턴스 변수와 메서드를 새로운 클래스에 추가하는 기법
  • 코드 재사용의 동기는 중복 코드 제거

1. 상속과 중복 코드

DRY 원칙

  • 중복 코드 제거의 가장 큰 이유는 변경을 방해한다는 것
    • 비즈니스 로직의 변화로 코드를 변경할 때, 중복 코드는 수정하는데 많은 노력이 발생
    • 중복 코드를 발견하여도, 개별적 테스트 후 동일한 결과를 체크해야 함
  • 중복의 기준은 변경,요구 사항 변경시 함께 수정되는 것

상속을 이용한 중복 코드 제거

  • 이미 존재하는 클래스와 유사 클래스 필요시 코드를 복사하지 않고 상속을 이용
  • 상속을 염두하지 않는 클래스를 상속을 통해 재사용하는 것은 쉽지 않음
  • 상속은 부모 클래스와 자식 클래스 사이의 강한 결합을 만들어 코드 수정을 어렵게 만듦

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

  • 상속의 첫번째 문제점은 자식 클래스가 부모 클래스의 구현 세부사항에 의존하여 캡슐화를 약화시킴
  • 서로간의 강한 결합으로 객체 내부 규칙을 깨트릴 수 있음
  • 결국 강한 결합도로 인해 자식 클래스와 서브 클래스는 영원히 변경되지 않거나, 동시에 변경되거나 둘중 하나를 선택해야 함

3. 기존 객체 개선하기

추상화에 의존

  • 가장 큰 문제는 자식 클래스가 부모 클래스의 구현에 강하게 의존한다는 사실
  • 자식 클래스가 구현이 아닌, 추상화에 의존하도록 수정

코드 중복 제거 방법

  • 두 메서드가 유사할 때 차이점을 메서드로 추출하고, 두 메서드를 동일한 형태로 만듦
  • 중복 코드를 부모 클래스로 올리고, 부모 클래스를 추상 클래스로 만드는 것

4. 차이에 의한 프로그래밍

중복 코드 제거 및 코드 재사용

  • 재사용 가능한 코드는 심각한 버그가 존재하지 않는 코드(단순 타이핑 노력을 감소하기 위함X)
  • 가장 유명한 방법은 상속이며, 여러 클래스 사이의 재사용 코드를 하나로 모음
  • 코드 재사용 관점에서 상속을 사용할 경우, 오용으로 인해 더욱 이해하기 어려운 코드가 발생
  • 코드 재사용의 가장 좋은 방법은 합성

결론

  • 중복 코드 제거 방법중 하나는 상속
  • 중복의 기준은 변경의 원인이 동일한 경우를 의미
  • 상속은 자식이 부모의 내부 구현에 강하게 의존하는 구조를 가져 결합도를 높임
  • 따라서, 올바른 상속을 위해선 부모의 내부 구현이 아닌 추상화에 의존
  • 코드 중복 제거를 위해 추상화에 의존하며, 중복된 코드를 부모 클래스로 올리고 추상 클래스로 만드는 과정이 필요함
  • 하지만 그럼에도 불구하고 코드 재사용 관점에서는 상속보다 합성이 더욱 좋은 방법
    • 상속은 오용시 더욱 이해하기 힘든 코드를 만듦
Comments