본문 바로가기

스터디/오브젝트15

11장 - 합성과 유연한 설계 개요 이번 장에서는 상속의 문제점을 해결하기 위한 방법에 대해서 소개합니다. 상속의 문제들을 어떻게 해결할 수 있을까? 합성(Composition)을 사용하면 상속의 문제들을 해결할 수 있습니다. 합성(Composition)은 기존의 객체를 재사용하기 위해 그 객체를 포함하는 새로운 객체를 생성하는 디자인 패턴입니다. 다음 간단한 예제들을 통해 어떻게 문제를 해결하는지 알아보겠습니다. 상속을 사용한 예제 class Car: def __init__(self, fuel_efficiency): self.fuel_efficiency = fuel_efficiency # 초기 연료 효율성 설정 def fuel_needed(self, distance): return distance / self.fuel_efficie.. 2023. 8. 28.
10장 - 상속과 코드 재사용 개요 이번 장에서는 객체지향에서 중복 코드를 제거하는 대표적인 기법인 상속에 대해 설명합니다. 왜 중복 코드를 제거해야 할까? 중복 코드가 가지는 가장 큰 문제는 코드를 수정하는 데 필요한 노력을 몇 배로 증가시킵니다. 프로세스 예시) 어떤 코드가 중복인지 확인 → 찾았다면 찾아낸 모든 코드를 일관되게 수정 → 테스트하여 동일한 결과가 출력되는지 확인 위 프로세스의 노력이 늘어날수록 코드의 변경이 힘들게 됩니다. 따라서 이러한 이슈 때문에 중복 코드를 제거해야 합니다. 중복 여부를 판단하는 기준은 변경입니다. 요구사항이 변경됐을 때 두 코드를 함께 수정해야 한다면 이 코드는 중복이며, 함께 수정할 필요가 없다면 중복이 아닙니다. 어떻게 중복 코드를 제거할 수 있을까? 여러 가지 방법이 있겠지만 이 책에서.. 2023. 8. 6.
9장 - 유연한 설계 개요 이번 장에서는 8장에서 소개했던 기법들을 원칙이라는 관점에서 설명합니다. 개방-폐쇄 원칙(Open-Closed Principle, OCP) 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해 열려 있어야 하고, 수정에 대해 닫혀 있어야 한다는 원칙입니다. '확장에 대해 열려 있다는 의미'는 앱의 요구사항이 변경될 때 이 변경에 맞게 새 동작을 추가해서 앱의 기능을 확장할 수 있다는 의미이며, '수정에 대해 닫혀 있다는 의미'는 기존의 코드를 수정하지 않고도 앱의 동작을 추가하거나 변경할 수 있다는 의미입니다. 어떻게 기존 코드를 수정하지 않고도 새로운 동작을 추가할 수 있을까? 1. 컴파일타임 의존성을 고정시키고 런타임 의존성을 변경하라 런타임 의존성은 실행 시에 협력에 참여하는 객체들 사이의.. 2023. 7. 24.
8장 - 의존성 관리하기 개요 이번 장에서는 협력적이면서도 유연한 객체를 만들기 위해 의존성을 관리하는 방법에 대해 다룹니다. 의존성이란? 의존하고 있는 대상의 변경에 영향을 받을 수 있는 가능성을 말합니다. 의존성 이해하기 어떤 객체가 협력하기 위해 다른 객체를 필요할 때 두 객체 사이에 의존성이 존재한다고 말합니다. 의존성은 실행 시점과 구현 시점에 서로 다른 의미를 가집니다. 실행 시점: 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야 합니다. 구현 시점: 의존 대상 객체가 변경될 경우 의존하는 객체도 함께 변경됩니다. 두 요소 사이의 의존성은 의존되는 요소가 변경될 때 의존하는 요소도 함께 변경될 수 있다는 것을 의미하며 이 의미는 변경에 의한 영향의 전파 가능성을 암시합니다. 의.. 2023. 5. 22.