본 문서에서는 특정 디자인 패턴을 사용하는 데에 있어 기본이 되는 설계 원칙에 대해 다룬다. 이러한 내용은 다소 추상적이고 주관적인 측면이 있으나 공통된 맥락을 가지고 있다.
2023년 10월 19일 현재 이해한 내용의 키워드만 남겨둔다. 아래 내용은 제목을 제외하면 모두 주관적으로 이해한 내용을 느낌적으로 작성한것이다.
최종수정일 : 2023.10.19
각각의 모듈이 단일한 기능에 대한 책임만을 져야 한다는 뜻으로, 개념적인 수준에서 단일한 기능을 가지면 SRP를 위반하지 않는다고 할 것이다. 예를 들어, 종이를 확인하고, 잉크를 확인하고, 데이터를 받아 출력하는 모듈은, 실질적으로는 SRP를 위반하지 않는 여러 서브모듈로 이루어져 있겠지만 출력을 담당한다는 점에서 SRP를 위반하지 않는다.
수정에는 폐쇄적이고 확장에는 개방적이어야 한다는 원칙이다.
자식 객체가 부모객체가 있는 위치에 왔을 때 그 역할을 대신할 수 있어야 한다는 것으로, 단순히 같은 기능을 하여야 한다는 것에서 확장하여, 부모의 행동 규약을 자식이 그대로 따라야 한다는 점이다.
불필요한 기능들을 모두 가져오지 않아야 한다는 것으로, 입금, 출금, 조회의 기능이 필요하여 포함시킨 인터페이스에 사용자 정보 조회, 예금총액 조회 등 뭉뚱그려진 기능들이 한꺼번에 포함되지 않아야 한다는 점이다. 인접성과 가깝다.
원래 모듈이 프로그래머에 의존하여 구현당하지만, 원활한 확장을 위해서 모듈이 프로그래머에 구현을 지시할 수 있다. 이러한 경우, 의존성이 역전되었다고 하며 의존 역전 원칙을 지킨다고 한다. 내부가 직접 수정되는 것을 막는다.
단순하라는 원칙이다. Ocam's Razor와 비슷한 개념이다.
미래에 있을 모든 경우를 대비하여 기능을 비대하게 구축하지 말라는 원칙이다.
한 일을 다시 반복하지 말라는 뜻으로, 당연하다. Don't reinvent wheel과 같은 연장선상에 있는 원칙으로 볼 수 있다.
객체의 내부사정을 모른 채 사용할 수 있도록 하라는 의미이다. Don’t Talk to Strangers(낯선 이에게 말하지 마라) 또는 Principle of least knowledge(최소 지식 원칙)과 일맥상통하는 원칙이다.