SOLID 설계원칙이란?
위키백과에서는 SOLID를 아래와 같이 서술하고 있다.
컴퓨터 프로그래밍에서 SOLID란 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것이다. 프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 할 때 이 원칙들을 함께 적용할 수 있다. SOLID 원칙들은 소프트웨어 작업에서 프로그래머가 소스 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩터링하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다. 이 원칙들은 애자일 소프트웨어 개발과 적응적 소프트웨어 개발의 전반적 전략의 일부다.
간단히 말하자면
'유지보수와 확장이 쉬운 시스템을 만들고자 할때 적용하는 원칙들' 이라 할 수 있겠다.
- 단일 책임 원칙 (SRP : Single Respornsibility Principle)- 개방-폐쇄 원칙 (OCP : Open-Closed Principle)- 리스코프 치환 원칙 (LSP : Liskov Substitution Principle)- 인터페이스 분리 원칙 (ISP : Interface Segregation Principle)- 의존 역전 원칙 (DIP : Dependency Inversion Principle)
SOLID는 이름에서 알 수 있듯이 각 원칙들의 영어 이름 첫 자를 따서 만들어졌다.
# 단일 책임 원칙(SRP)
클래스는 단 한 개의 책임을 가져야 한다.
객체 지향의 기본은 책임을 객체에게 할당하는 데 있다. 객체를 객체로 존재하게 하는 이유가 책임인데, SRP는 이 책임과 관련된 원칙이다.
클래스가 여러 책임을 갖게 되면 그 클래스는 각 책임마다 변경되는 이유가 발생하기 때문에, 클래스가 한개의 이유로만 변경되려면 클래스는 한개의 책임만을 가져야 한다. 이런 이유로 이 원칙은 다른 말로 "클래스를 변경하는 이유는 단 한개여야 한다."고도 표현한다.
# 개방 폐쇄 원칙(OCP)
확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.
말이 좀 어려운데, 이 말을 구체적으로 풀어보면 다음과 같다.
- 기능을 변경하거나 확장할 수 있으면서
- 그 기능을 사용하는 코드는 수정하지 않는다.
# 리스코프 치환 원칙(LSP)
상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
이 말의 의미를 간단한 코드로 풀어보자.
상위 타입 SuperClass와 하위 타입 SubClass가 있다고 하자.
public void someMethod(SuperClass sc){
sc.someMethod();
}
someMethod()는 상위 타입인 SuperClass 타입의 객체를 사용하고 있는데, 이 메서드에 다음과 같이 하위타입의 객체를 전달해도 someMethod()가 정상적으로 동작해야 한다는 것이 리스코프 치환 원칙이다.
someMethod( new SubClass() );
# 인터페이스 분리 원칙(ISP)
클라이언트는 자신이 사용하는 메서드에만 의존해야 한다.
쉽게 말하자면 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다는 말이다.
# 의존 역전 원칙(DIP)
고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 된다. 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다.
- SOLID 정리
SOLID 원칙을 한 마디로 정의하면 변화에 유연하게 대처할 수 있는 설계 원칙이다.
단일 책임 원칙과 인터페이스 분리 원칙은 객체가 커지지 않도록 막아 준다. 객체가 많은 기능을 가지게 되면, 객체가 가진 기능의 변경 여파가 그 객체의 다른 기능에까지 번지게 되고 이는 다시 다른 기능을 사용하는 클라이언트에게까지 영향을 준다. 객체가 단일 책임을 갖게 하고 클라이언트마다 다른 인터페이스를 사용하게 함으로써 한 기능의 변경이 다른곳에까지 미치는 영향을 최소화할 수 있고, 이는 결국 기능 변경을 보다 쉽게 할 수 있도록 만들어준다.
리스코프 치환 원칙과 의존 역전 원칙은 개방 폐쇄 원칙을 지원한다. 개방 폐쇄 원칙은 변화되는 부분을 추상화하고 다형성을 이용함으로써 기능 확장을 하면서도 기존 코드를 수정하지 않도록 만들어 준다. 여기서, 변화되는 부분을 추상화할 수 있도록 도와주는 원칙이 바로 의존 역전 원칙이고, 다형성을 도와주는 원칙이 리스코프 치환 원칙인 것이다.
또한, SOLID 원칙은 사용자 입장에서의 기능 사용을 중시한다.
인터페이스 분리 원칙은 클라이언트 입장에서 인터페이스를 분리하고 있으며, 의존 역전 원칙 역시 저수준 모듈을 사용하는 고수준 모듈 입장에서 추상화 타입을 도출하도록 유도한다. 또한, 리스코프 치환 원칙은 사용자에게 기능 명세를 제공하고, 그 명세에 따라 기능을 구현할 것을 약속한다. 이처럼 SOLID 원칙은 사용자 관점에서의 설계를 지향하고 있다.
상기 내용은
'개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴(최범균 저)' 책을 공부한 내용을 정리한 것입니다.
'개발자의 삶 > 기타' 카테고리의 다른 글
[인프콘 2023] 참가자 선정 !! 야호 ! (0) | 2023.07.19 |
---|---|
[swagger] Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException" (1) | 2022.06.07 |
tomcat 찾아서 죽이기(?) (0) | 2021.06.25 |
맨 땅에 헤딩으로 학은제 학사 취득하기 (3) | 2021.06.25 |
한국관광공사 & KAKAO - 2021 관광데이터 활용 공모전 (0) | 2021.06.25 |