[Back-end] SOLID 원칙 (+DRY, YAGNI, KISS)

Geun·2022년 4월 19일
0

Back-end

목록 보기
60/74

SOLID 원칙

SOLID는 객체지향 설계의 5대원칙으로 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙)을 말한다.
앞글자만 따서 SOLID 원칙이 되었다.

단일 책임 원칙 (Single Responsiblity Principle)

SRP

모든 클래스는 각각 하나의 책임만 가져야 한다.
클래스는 그 책임을 완전히 캡슐화해야 한다.

사칙연산 함수를 가지고 있는 계산 클래스가 있다고 하자.
이 상태의 계산 클래스는 사칙연산 기능만을 책임진다.
이 클래스를 수정한다면 그 이유는 사칙연산 함수와 관련된 문제일 뿐이다.

개방-폐쇄 원칙 (Open Closed Principle)

OCP

확장에는 열려있고 수정 시에는 닫혀있는, 기존의 코드를 변경하지 않으면서(Closed) 기능을 추가할 수 있도록(Open) 설계가 되어야 한다는 원칙이다.

캐릭터를 하나 생성한다면, 각각의 캐릭터가 움직임이 다를 경우에
움직임의 패턴 구현을 하위 클래스에 맡긴다면 캐릭터 클래스의 수정은 필요가 없고(Closed) 움직임의 패턴만 재정의하면 된다(Open).

리스코프 치환 원칙 (Liskov Substitution Principle)

LSP

자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다는 원칙이다.
부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 계획대로 작동해야 한다.

자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 해야 LSP를 만족할 수 있다.

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

ISP

한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
하나의 일반적인 인터페이스보다 여러 개의 구체적인 인터페이스가 낫다.

의존 역전 원칙 (Dependency Inversion Principle)

DIP

의존 관계를 맺을 때 변화하기 쉬운 것, 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 원칙이다.

구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺으라는 것이다.


DRY

Don't Repeat Yourself

모든 형태의 정보중복을 지양하는 원리이다.
특히 다층 구조 시스템에서 유용하다.

중복 배제의 원리는 모든 지식은 시스템 내에서 유일하고 중복이 없으며 권위있는 표상만을 가진다는 말이다.


YAGNI

You Ain't Gonna Need it

프로그래머가 필요하다고 간주할 때까지 기능을 추가하지 않는 것이 좋다는 익스트림 프로그래밍(XP)의 원칙이다.
익스트림 프로그래밍의 공동 설립자 론 제프리스는 다음과 같이 말했다.
실제로 필요할 때 무조건 구현하되, 그저 필요할 것이라고 예상하는 때에는 절대 구현하지 말라.


KISS

Keep it simple, stupid

디자인에서 간단하고 알기 쉽게 만드는 편이 좋다는 원리이다.


차이점 및 유사점

  • DRY는 시스템을 관리가 가능한 컴포넌트로 나눠 복잡도를 줄이는 전략이다.

  • YAGNI는 컴포넌트의 갯수를 줄여 복잡도를 줄이는 전략이다.

  • YAGNI는 단순한 프로젝트를 추구하는 면에서 KISS와 유사하다.

  • 차이점은 KISS는 가능한 쉬운 방법으로 구현함으로 단순한 솔루션을 추구하나, YAGNI는 지금 필요없는 구현자체를 하지 않음으로 단순함을 추구한다.


참고자료

https://velog.io/@devmoonsh/ETC-SOLID%EC%9B%90%EC%B9%99-DRY-YAGNI-KISS
https://velog.io/@cchloe2311/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-SOLID-%EC%9B%90%EC%B9%99
https://hongjinhyeon.tistory.com/136

0개의 댓글