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

 

SOLID (객체 지향 설계) - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

 

객체지향 개발 5대 원리: SOLID

현재를 살아가는 우리들은 모두 일정한 원리/원칙 아래에서 생활하고 있습니다. 여기서의 원칙 이라 함은 좁은 의미로는 개개인의 사고방식이나 신념, 가치관 정도가 될 수가 있겠고, 넓게는 한

www.nextree.co.kr

 

[JAVA] IS-A 관계, HAS-A 관계

IS-A 관계, HAS-A 관계 안녕하세요? 장장스입니다. IS-A 관계, HAS-A 관계에 대해 알아보겠습니다. 객체지향 프로그래밍에서 우리는 상속을 사용합니다. 언제 상속을 사용해야 할까요? IS-A 관계 상속

zangzangs.tistory.com

 

반응형

+ Recent posts