도니의 iOS 프로그래밍 세상

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

OOP

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

Donee 2024. 10. 1. 08:37
  • 객체 지향의 장점중 하나인 상속을 통한 코드 재사용
  • 합성을 통해서도 코드 재사용 가능

Chap01. 상속과 중복 코드

  • 중복 코드란 스펙이 변경될 때 함께 수정되어야 하는 코드
  • 중복을 제거해야 하는 이유는, 추후 코드 수정시에 몇배의 노력이 발생 하기 때문(계속된 중복 코드는 제곱배로 커져, 버그 발생 가능성이 높아짐)
  • 따라서, 신뢰할 수 있는 소프트웨어를 위해선 DRY 원칙(Don’t Repeat Yourself를 지켜야 함

중복 제거 방법

  1. 타입코드
  • 중복 코드를 제거를 위해, 클래스로 만들어 중복 코드를 이관시킴
  • 타입코드는 낮은 응집도와 높은 결합도 문제 발생(특정 타입에 종속되어 있기 때문)
  1. 상속
  • 상속을 통해 기반 클래스의 로직을 재활용
  • 상속을 염두하지 않는 클래스를 상속하는 것은 코드 수정 및 이해를 어렵게 함
  • 상속은 부모 ↔ 자식간 강한 결합도를 가지기 때문
  • 따라서, super 호출하는 부분또한 결합도를 위해서 제거되어야 함(만약 계층 구조가 상속을 염두하였고 반드시 필요한 공통 로직이라, super를 사용하거나 별도 함수를 사용하는 게 더 나을듯)

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

  • 부모 클래스의 변경이 자식 클래스에 영향을 주는 현상
  1. 불필요한 인터페이스 상속 문제
  2. 메서드 오버라이딩 오남용 문제
  3. 부모 클랫, 자식 클래스 동시 수정 문제

→ 핵심은 결국 부모 ↔ 자식간 강력한 커플링으로 인해, 서로에 영향을 주어 버그 발생 위험이 높아 진다는 점이다. 자식은 부모의 추상화가 아닌, 구현에 의존하기 때문에 부모의 변경으로 인해 자식은 변경될 수 밖에 없다.

Chap03. 기존 클래스 수정

  1. 차이를 메서드로 분리
  2. 공통 코드를 부모 클래스로 이동
  3. 핵심은 추상화

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

  • 기존 코드와 다른 부분을 추가하여 애플리케이션 기능을 확장하는 방법
  • 목표는 중복 코드 제거 및 코드 재사용
  • 코드 재사용을 통해 코드 품질 유지 및 코드 작성 노력 과 테스트를 줄일 수 있음(but, 재사용 가능 단위로 코드를 분리하고 재구성 해야함)

상속

  • 코드 재사용의 가장 유명한 방법
  • 기능 추가에 대한 코드 양을 줄일 수 있음
  • 하지만 대부분의 케이스에서 코드 재사용을 위한 경우 상속은 좋은 방법이 아닐 수 있다.

결론

  • 중복 코드를 제거하는 목적은 관리 비용을 줄이기 위함
  • 상속을 통해 해결할 경우, 부모 ↔ 자식간 커플링으로 많은 문제가 발생할 수 있음
  • 중복 코드 제거를 위한 클래스 수정 방안(메서드, 공통로직 부모클래스 이동등)

→ 하지만 구조 설계를 하지 않은 채 무작정 상속을 사용할 경우 더 많은 문제가 발생할 수 있음.

Comments