SOLID 원칙

Rowan Lee·2024년 10월 5일

자바

목록 보기
6/10

SOLID 원칙이란?

객체지향을 디자인이 좋은 객체지향 프로그래밍을 위한 설계라면, 이런 객체지향 디자인들의 기본이 되는 원리가 있다. 이런 5가지 객체지향 설계 원칙을 앞 글자를 따서 SOLID 원칙이라고 한다.

  • SRP
  • OCP
  • LSP
  • DIP
  • ISP

즉 해당 내용을 명확히 이해해야 다른 디자인 패턴들에 대한 이해가 가능해진다.

SRP (단일책임의 원칙: Single Responsibility Principle)

THERE SHOULD NEVER BE MORE THAN ONE REASON FOR A CLASS TO CHANGE.

작성된 클래스는 하나의 기능만을 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중되어 있어야 한다는 원칙.

쉽게 말해 객체는 단 하나의 책임을 가져야 한다는 것을 의미하며, 이를 지키기 위해선 책임을 무리하게 지지 않도록 잘 분해해야 한다.

OCP (개방폐쇄의 원칙: Open Close Principle)

YOU SHOULD BE ABLE TO EXTEND A CLASSES BEHAVIOR, WITHOUT MODIFYING IT.

소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 한다는 원리

쉽게 말해 확장에 열려있고 변경에 닫혀있어야 한다는 원리, 이를 지키기 위해선 관리자를 두고 DI를 진행하는 방식으로 관계를 맺어야 한다.

LSP (리스코브 치환의 원칙: The Liskov Substitution Principle)

FUNCTIONS THAT USE POINTERS OR REFERENCES TO BASE CLASSES MUST BE ABLE TO USE OBJECTS OF DERIVED CLASSES WITHOUT KNOWING IT.

서브 타입은 언제나 기반 타입으로 교체할 수 있어야 한다.

쉽게 말해 부모 클래스의 자리에 자식 클래스를 넣어도 동일하게 동작해야한다는 의미, 재정의(Override)하지 않는 것으로 지킬 수 있다.

ISP (인터페이스 분리의 원칙: Interface Segregation Principle)

CLIENTS SHOULD NOT BE FORCED TO DEPEND UPON INTERFACES
THAT THEY DO NOT USE.

한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원리

쉽게 말해 클라이언트가 원하는 형태에 맞춰 인터페이스를 제공해야한다는 의미, 인터페이스를 두고 클라이언트가 이 인터페이스를 사용하도록하고 인터페이스가 사용자의 요구사항에 맞는 것만 제공하도록 하면 됌.

DIP (의존성역전의 원칙: Dependency Inversion Principle)

A. HIGH LEVEL MODULES SHOULD NOT DEPEND UPON LOW LEVEL MODULES. BOTH SHOULD DEPEND UPON ABSTRACTIONS.
B. ABSTRACTIONS SHOULD NOT DEPEND UPON DETAILS. DETAILS SHOULD DEPEND UPON ABSTRACTIONS.

하위 레벨 모듈의 변경이 상위 레벨 모듈의 변경을 요구하는 위계관계를 끊는 의미의역전입니다. 실제 사용 관계는 바뀌지 않으며, 추상을 매개로 메시지를 주고 받음으로써 관계를 최대한 느슨하게 만드는 원칙

쉽게 말해 추상적인 것에 의존하라는 의미, 인터페이스나 추상클래스에 의존하도록 하면 됌.

참고

https://www.nextree.co.kr/p6960/
도서 - 'JAVA 객체지향 디자인 패턴' 정인상 저

profile
CS/Software Engineer

0개의 댓글