SOLID 란 ?
- 프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 할 때 적용할 수 있는 원리이다.
- 5가지 원칙들의 약어 첫 문자를 따서 SOLID라 칭한다.
SOLID 구성 5원칙
1. SRP | 단일 책임 원칙 (Single responsibility principle) : 한 클래스는 하나의 책임만 가져야 한다. - 클래스는 하나의 기능만 가지며 모든 서비스는 그 하나의 기능을 수행하는데 집중(책임)되어야 함 어떤 변화에 의해 클래스를 변경하는 이유도 오직 하나이어야 함 (가독성 향상, 유지보수 용이) |
2. OCP | 개방-폐쇄 원칙 (Open/closed principle) : 소프트웨어 요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. - 변경을 위한 비용은 줄이고 확장을 위한 비용은 극대화 해야함 - 변경이 발생하더라도 기존 구성은 수정이 일어나지 말아야함 = 기존 구성요소를 확장해서 재사용 |
3. LSP | 리스코프 치환 원칙 (Liskov substitution principle) : 서브타입은 언제나 기반 타입으로 교체할 수 있어야 함 - 서브클래스가 확장에 대한 인터페이스를 준수해야 함 (public ,인터페이스, 메소드의 예외 등) |
4. ISP | 인터페이스 분리 원칙 (Interface segregation principle) : 하나의 범용 인터페이스보다 여러 개의 구체적인 인터페이스가 낫다. (인터페이스의 단일 책임 강조) - 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 함 1) 클래스 상속을 이용해 분리 : 인터페이스에 서비스가 제한될 수 있음 2) 객체 인터페이스 위임을 이용해 분리 : 책임을 다른 클래스/메소드에 맡김 |
5. DIP | 의존관계 역전 원칙 (Dependency inversion principle) : 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. - 하위레벨 모듈이 상위레벨 모듈의 변경을 요구하는 관계를 끊는 것 - 둘의 관계를 직접 연결하는 게 아니라 추상레벨로 연결 = 상위 모듈의 확장성 보장 - 예시 : 소켓프로그래밍 비동기 모델 클라이언트 스레드가 직접 send(), recv() 하지 않고 훅 메소드를 실행 클라이언트 스레드의 잦은 응답확인을 제거, 클라이언트 스레드는 응답 확인할 시간에 다른 작업 가능해짐 |
+ 상속 시 주의할 점
is-a : 상속관계
일반적 개념-구체적 개념의 관계 (동물-사람, 동물-사자 등)
일반클래스를 구체화하는 상황에서 사용
하위 클래스가 상위 클래스에 종속 됨 (상위 수정 시 하위 미치는 영향 큼 -> IS-A 관계여야만 하는 이유)
has-a : 포함관계 (상속X)
다른 클래스의 기능(변수/메소드)을 사용. (컴퓨터클래스 - CPU클래스, RAM클래스 등)
Reference
'CS Interview > etc' 카테고리의 다른 글
JPA 특징과 동작 원리, ORM, SQL Mapper (0) | 2021.06.19 |
---|---|
gRPC 란 : RPC, gRPC 작동원리, HTTP API (json) 비교 (0) | 2021.06.16 |
교차 출처 리소스 공유 (CORS : Cross-Origin Resource Sharing) (2) | 2021.06.16 |
DevOps에 대한 칼럼 (조대협의 서버사이드) (2) | 2021.06.16 |
마이크로 서비스란 (MSA) - 모놀리식 아키텍처, API Gateway vs ESB (0) | 2021.06.16 |