좋은 소프트웨어 시스템은 깔끔한 코드로 부터 시작한다.
좋은 벽돌로 좋은 아키텍처를 정의하는 원칙이 필요한데,
그것이 바로 SOLID이다.
SOLID원칙은 함수와 데이터 구조를 클래스로 배치하는 방법,
그리고 이들 클래스를 서로 결합하는 방법을 설명해준다.
SOLID 원칙의 목적은
중간 수준의 소프트웨어 구조가 아래와 같도록 만드는 데 있다.
- 변경에 유연하다
- 이해하기 쉽다.
- 많은 소프트웨어 시스템에 사용할 수 있는 컴포넌트의 기반이 된다.
잘 만들어진 벽돌로도 빌딩의 아키텍처를 완전 망쳐버릴 수 있듯,
잘 설계된 중간수준의 컴포넌트를 이용해도 시스템을 엉망진창으로 만들수 있따.
이런 이유로, SOLID를 설명 뒤
- 컴포넌트 세계에서 SOLID 원칙에 대응하는 원칙을 설명하고
- 고수준 아키텍처 원칙까지 설명할 것이다.
저자는 1980년대 후반, 유즈넷(과거 페이스북)에서 다른 사람들과 소프트웨어 설계원칙에 대해 토론하는 과정에서 이 원칙을 모으기 시작했다.
2000년대 초반 안정화된 최종버전을 내놓았는데, 2004년 마이클 페더스가 이메일을 보냈다.
원칙들을 재배열 하면 각 원칙의 첫번째 글자들로 SOLID라는 단어를 만들 수 있다는 내용이었다.
그렇게 SOLID 법칙이 탄생했따.
- SRP : 단일 책임 원칙
- 각 소프트웨어 모듈은 변경의 이유가 단 하나여야만 한다.
- OCP : 개방-폐쇄 원칙
- 기존 코드를 수정하기 보다는 반드시 새로운 코드를 추가하는 방식으로 시스템의 행위를 변경할 수 있도록 설계해야만 SW시스템을 쉽게 변경할 수 있다.
- LSP : 리스코프 치환원칙
- 상호 대체 가능한 구성요소를 이용해 소프트웨어 시스템을 만들 수 있으려면, 이들 구성요소는 반드시 서로 치환 가능해야 한다는 계약을 반드시 지켜야 한다.
- ISP : 인터페이스 분리 원칙
- 소프트웨어 설계자는 사용하지 않은 것에 의존하지 않아야 한다.
- DIP : 의존성 역전 원칙
- 고수준 정책을 구현하는 코드는 저수준 세부사항을 구현하는 코드에 절대로 의존해서는 안된다. 대신 세부사항이 정책에 의존해야 한다.
이 원칙은 수많은 책에서 상세히 설명 했으니, 이들 원칙이
아키텍처 관점에서 지닌 의미에 집중해 논의하고자 한다.