5장. (막간) 객체 지향 대참사!

Q. 이 코드 구성요소는 여러 타입에 적용되는 행동을 정의하는 역할과 그 여러 타입을 사용하는 클래스들의 관심의 초점을 나타내는 역할의 두가지 역할이 있습니다.

(역자 주: 이 구성 요소가 적용되는 A 클래스를 다른 클래스인 B가 사용할 때, B는 A라는 클래스의 행동 중에 관심이 있는 행동은 이 구성요소가 정의된 행동 뿐이라는 의미)

*{color:white}+"인터페이스"+{color} 은 무엇일까요?


.구현보다는 인터페이스에 의존하도록 코딩하는 것이 소프투웨어를 확장이 용이 하게합니다.
.인터페이스에 의존하도록 코딩하면, 여러분의 코드는 인터페이스의 서브 클래스 모두 심지어 아직 만들지 않은 클래스와도 잘 동작할 것입니다.

Q. 이것은 객체의 행동 변화에 필요한 코드 변경을 국한하여, 어떤 객체지향 원래보다도 유지보수에서 생기는 문제를 막는 책임을 지고 있습니다.

*{color:white}+"캡슐화"+{color} 은 무엇일까요?

.여러분의 클래스를 불필요한 변경으로부터 보호합니다.
.변화의 가능성이 있다고 생각되는 프로그램의 기능이 있을 때, 그 기능을 자주 변하지 않는 부분과 분리해야 합니다.
변경하는 것을 갭슐화 하려는 노력이 항상 필요하다.

Q. 모든 클래스가 이 것(소프트웨어의 많은 잘못 설계된 부분 없애기)에 대해 하나의 이유만을 갖도록 해야 합니다.

*{color:white}+"변경"+{color} 은 무엇일까요?

.소프트웨어의 변하지 않는 진리는 소프트웨어는 변한다는 것이다.
.설계가 잘 되어 있지 않은 소프트웨어는 처음 변경이 일어날 때 무너진다. 하지만 위대한 소프트웨어는 쉽게 변경될 수 있다.

. 소프트웨어를 변경에 잘 견디도록 만드는 가장 쉬운 방법은 각 클래스가 변경의 이유를 하나만 갖도록 하는 것이다.
(즉, 클래스 안의 변경 요인을 줄여서 변경 가능성을 최소화 하는 것입니다.)

문서에 대하여