객체 지향은
높은 응집도 낮은 결합도
라는 설계 방향을 추구한다.
결합도는 서로 다른 모듈 간에 상호 의존하는 정도 또는 연관된 관계를 의미
응집도는 한 모듈 내부의 처리 요소들이 서로 관련되어 있는 정도를 의미
더 많은 내용이 존재하지만,
간단하게 무엇을 의미하는지만 집고 넘어가자.
추가적인 내용이 필요하면 아래 블로그를 참고하면 좋을 것 같다.
객체 지향적으로 좋은 코드를 설계하기 위한 기준(?)이 될 수 있는
을 간단히 알아보자.
단일 책임의 원칙이라고 한다.
즉, 소프트웨어의 설계 부품(클래스, 함수 등)은 단 하나의 책임만을 가져야한다는 말이다.
클래스, 함수가 비대해지면 이를 분리시킬 필요가 있으며
설계를 잘한 프로그램은 기본적으로 새로운 요구사항과 프로그램 변경에 영향을 받는 부분이 적다.
개방-폐쇄의 원칙이라고 한다.
즉, 기존 코드변경에는 닫혀있고, 추가나 확장에는 열려있어야 한다.
OCP에 만족하는 설계를 할 때에는 자주 변경될 수 있는 내용은 수정하기 쉽게 설계하는 것에 초점을 맞춘다.
리스코프 치환 원칙이라고 한다.
이는 자식 클래스는 부모 클래스에서 가능한 행위를 수행할 수 있어야 한다라는 원칙이다.
즉, 부모 클래스와 자식 클래스 사이의 행위에는 일관성이 있어야한다라는 말이다. (상속 관계를 정의할 때, 이게 정말 올바른 상속 관계를 갖는지 생각해보아야 한다.)
의존 역전 원칙이라고 한다.
이는 의존 관계를 맺을 때, 변화하기 더 어려운 것에 의존해야 한다는 것이다.
내 생각
말이 조금 어렵게 느껴진다.
일단,
- 변화에 유연하게 대체할 수 있도록 해야한다는 말인 것 같다.
- 의존성 주입(DI)과 깊은 연관이 있을 것으로 보인다.
인터페이스 분리 원칙이라고 한다.
이는 자신이 사용하지 않는 기능에는 영향을 받지 않아야한다는 의미이다.
인터페이스를 만들 때, 구체적이고 작은 단위로 분리시킴으로써 충족시킬 수 있다.