React 공부를 하다가 Component를 분리하는 과정에서 친구를 통해 SOLID 원칙을 접하게 되었다.
SOLID 원칙과 그 외 추가적으로 개발 원칙인 DRY, YAGNI, KISS 에 대해 정리해보고자 한다.
객체지향 설계5대 원칙이라 부르는데 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙),
ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙)을 말하고 앞자를 따서 SOILD 원칙이라고 부른다.
모든 클래스는 각각 하나의 책임만 가져야 한다. 클래스는 그 책임을 완전히 캡슐화해야 함을 말한다.
사칙연산 함수를 가지고 있는 계산 클래스가 있다고 치자. 이 상태의 계산 클래스는 오직 사칙연산 기능만을 책임진다.
이 클래스를 수정한다고 한다면 그 이유는 사직연산 함수와 관련된 문제일 뿐이다.
확장에는 열려있고 수정에는 닫혀있는. 기존의 코드를 변경하지 않으면서(Closed),
기능을 추가할 수 있도록(Open) 설계가 되어야 한다는 원칙을 말한다.
캐릭터를 하나 생성한다고 할때, 각각의 캐릭터가 움직임이 다를 경우
움직임의 패턴 구현을 하위 클래스에 맡긴다면 캐릭터 클래스의 수정은 필요가없고(Closed)
움직임의 패턴만 재정의 하면 된다.(Open)
자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다는 원칙이다.
즉 부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 계획대로 잘 작동해야 한다.
자식클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 해야 LSP를 만족한다.
한 클래스는 자신이 사용하지않는 인터페이스는 구현하지 말아야 한다.
하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스가 낫다.
의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것,
거의 변화가 없는 것에 의존하라는 것이다.
한마디로 구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺으라는 것이다.
DRY(Don't repeat yourself, 중복배제)는 소프트웨어 개발 원리의 하나로,
모든 형태의 정보 중복을 지양하는 원리이다. 특히 다층 구조 시스템에서 유용하다.
중복배제 원리는 한마디로 “모든 지식은 시스템 내에서 유일하고 중복이 없으며
권위있는 표상만을 가진다”는 말로 기술할 수 있다.
YAGNI(You aren't gonna need it)는 프로그래머가 필요하다고 간주할 때까지
기능을 추가하지 않는 것이 좋다는 익스트림 프로그래밍(XP)의 원칙이다.
익스트림 프로그래밍의 공동 설립자 론 제프리스는 다음과 같이 썼다:
"실제로 필요할 때 무조건 구현하되, 그저 필요할 것이라고 예상할 때에는 절대 구현하지 말라.",
"You aren't going to need it"와 "You ain't gonna need it"의 준말로도 인용된다.
KISS는 “Keep it small and simple.”, “Keep it short and simple.”, 또는
“Keep it simple, stupid.”의 첫글자만 따서 만든 약어로,
KISS 원칙이란 디자인에서 간단하고 알기 쉽게 만드는 편이 좋다는 원리를 말한다.
Ref.