본문 바로가기

전체 글

(84)
오브젝트 11장 - 합성과 유연한 설계 합성을 이용하면 포함된 객체의 내부 구현이 변경되더라도 영향을 최소화할 수 있기 때문에 변경에 더 안정적인 코드를 얻을 수 있게 된다. 코드 작성 시점에 결정한 상속 관계는 변경이 불가능하지만 합성 관계는 실행 시점에 동적으로 변경할 수 있기 때문이다. 클래스 상속 - 화이트박스 재사용(상태를 알아야 하므로) 합성 - 블랙 박스 재사용(인터페이스를 통해서만 재사용) 상속을 합성으로 변경하기 불필요한 인터페이스 상속 문제 → 불필요한 인터페이스를 사용안해도 된다. 메서드 오버라이딩의 오작용 문제 → 포워딩을 사용하여 기존 인터페이스를 그대로 제공하면서, 구현에 결합없이 사용할 수 있다. 부모 클래스와 자식 클래스의 동시 수정문제 →합성으로 변경해도 해결되지는 않는다. 파급 효과를 캡슐화하여 그래도 더 낫다..
오브젝트 10장 - 상속과 코드 재사용 전통적인 패러다임 → 코드를 재사용하는 방법은 코드를 복사한 후 수정하는 것 객체지향 패러다임 → 상속 또는 합성 10장에서는 상속, 11장에서는 합성에 대해 설명함 상속과 중복코드 중복코드 → 혼란야기 + 동료들을 의심하게 만든다 DRY 원칙 중복 코드는 변경을 방해한다. 중복 코드는 코드를 수정하는 데 필요한 노력을 몇 배로 증가시킨다. DRY원칙 = Don’t Repeat Yourself ⇒ 동일한 지식을 중복하지 마라 중복과 변경 책의 예제 코드 → 요구사항 변경으로 새로운 기능이 추가됨 → 상속으로 코드 중복을 줄임 상속을 위한 경고 1 → 자식 클래스의 메서드 안에서 super 참조를 이용해 부모 클래스의 메서드를 직접 호출할 경우 두 클래스는 강하게 결합된다. super 호출을 제거할 수 있..
오브젝트 9장 - 유연한 설계 8장에서는 다양한 의존성 관리 기법들을 소개했음. 9장에서는 원칙이라는 관점에서 정리 개방-폐쇄 원칙 컴파일타임 의존성을 고정시키고 런타임 의존성을 변경하라 컴파일 타임 의존성 = 인터페이스나 추상 함수에 의존 런타임 의존성 = OCP로 가능성을 확장하고 수정할 수 있는 구조 추상화가 핵심이다 추상화에 의존하는 것 변경에 의한 파급효과를 최대한 피하기 위해서는 변하는 것과 변하지 않는 것이 무엇인지를 이해하고 이를 추상화의 목적으로 삼아야만 한다. 생성 사용 분리 객체에 대한 생성과 사용을 분리해야 한다. FACTORY 추가하기 객체 생성과 관련된 지식이 client에게 까지 새어나가기를 원하지 않는다. 객체 생성과 관련된 책임만 전담하는 별도의 객체 = FACTORY Client는 오직 사용과 관련된 ..