본문 바로가기

📖 독서13

[오브젝트] 9장. 유연한 설계 8장에서 설명한 기법들을 원칙이라는 관점에서 정리한다. 1. 개방-폐쇄 원칙 : 소프트웨어 개체(클래스, 모듈, 함수 등)는 '확장'에 대해 열려있어야 하고, '수정'에 대해서는 닫혀있어야 한다. '확장'에 대해 열려 있다 : 애플리케이션의 요구사항이 변경될 때 이 변경에 맞게 새로운 '동작'을 추가해서 애플리케이션의 기능을 확장할 수 있다. '수정'에 대해 닫혀 있다 : 기존의 '코드'를 수정하지 않고도 애플리케이션의 동작을 추가하거나 변경할 수 있다. - 컴파일 타임 의존성은 코드에서 드러나는 클래스들 사이의 관계, 런타임 의존성은 실행 시에 협력에 참여하는 객체들 사이의 관계다. 유연하고 재사용 가능한 설계에서 런타임 의존성과 컴파일 의존성은 서로 다른 구조를 가진다. - 의존성 관점에서 개방-폐쇄.. 2022. 4. 10.
[ 오브젝트] 8장. 의존성 관리하기 - 협력을 위해서는 의존성이 필요하지만 과도한 의존성은 애플리케이션을 수정하기 어렵게 만든다. 객체지향 설계의 핵심은 협력을 위해 필요한 의존성은 유지하면서도 변경을 방해하는 의존성은 제거하는 데 있다. 이런 관점에서 객체지향 설계란 의존성을 관리하는 것이고 객체가 변화를 받아들일 수 있게 의존성을 정리하는 기술이라고 할 수 있다. 1. 의존성 이해하기 - 어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이에 의존성이 존재하게 된다. 의존성은 실행 시점과 구현 시점에 서로 다른 의미를 가진다. - 실행 시점 : 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야 한다. - 구현 시점 : 의존 대상 객체가 변경될 경우 의존하는 객체도 함께 변경된다. -.. 2022. 4. 9.
[오브젝트] 7장. 객체 분해 7장 '객체 분해'에서는 추상화의 한 가지 방법인 분해의 역사를 다룬다. 프로시저 추상화와 데이터 추상화 사이의 갈등과 분쟁의 역사를 이해하면 기능 분해에서 시작해서 객체지향에 이르기까지 소프트웨어 패러다임의 변화를 자연스럽게 이해하게 될 것이다. - 추상화 : 불필요한 정보를 제거하고 현재의 문제 해결에 필요한 핵심만 남기는 작업. - 분해 : 큰 문제를 해결 가능한 작은 문제로 나누는 작업. - 현대적인 프로그래밍 언어를 특징짓는 중요한 두 가지 추상화 메커니즘은 '프로시저 추상화'와 '데이터 추상화'다. 1. 프로시저 추상화와 기능분해 : 소프트웨어가 무엇을 해야 하는지를 추상화한다. - 프로시저는 반복적으로 실행되거나 거의 유사하게 실행되는 작업들을 하나의 장소에 모아놓음으로써 로직을 재사용하고 .. 2022. 4. 8.
[오브젝트] 6장. 메시지와 인터페이스 용어 정리 - 메시지 : 객체가 다른 객체와 협력하기 위해 사용하는 의사소통 메커니즘. 일반적으로 객체의 오퍼레이션이 실행되도록 요청하는 것을 '메시지 전송'이라고 부른다. 메시지는 협력에 참여하는 전송자와 수신자 양쪽 모두를 포함하는 개념이다. - 오퍼레이션 : 객체가 다른 객체에게 제공하는 추상적인 서비스다. 프로그래밍 언어의 관점에서 퍼블릭 인터페이스에 포함된 메시지다. 메시지가 전송자와 수신자 사이의 협력 관계를 강조하는 데 비해 오퍼레이션은 메시지를 수신하는 객체의 인터페이스를 강조한다. 다시 말해서 메시지 전송자는 고려하지 않은 채 메시지 수신자의 관점만을 다룬다. 메시지 수신이란 메시지에 대응되는 객체의 오퍼레이션을 호출하는 것을 의미한다. - 메서드 : 메시지에 응답하기 위해 실행되는 코드.. 2022. 4. 4.