[dev] SOLID 원칙에 대한 간단 정리

부침개는 맛있다.·2021년 11월 30일
0

1. Single Responsibility Principle

단일 책임 원칙
THERE SHOULD NEVER BE MORE THAN ONE REASON FOR CLASS TO CHANGE.

설계를 잘한 프로그램은 기본적으로 새로운 요구사항과 프로그램 변경에 영향을 받는 부분이 적다. 즉 응집도는 높고, 결합도는 낮은 프로그램을 뜻한다.

만약 한클래스에 기능, 즉 책임이 많아진다고 하자. 그러면 내부의 함수끼리 강한 결합을 발생할 가능성이 높아진다. 그리고 이런 점은 결국 유지보수를 힘들게 만들기 때문에 책임을 분리시켜야 한다.

2. Open-Closed Principle

개방-폐쇄 원칙
YOU SHOULD BE ABLE TO EXTEND A CLASSES BEHAVIOR, WITHOUT MODIFYING IT.

간단히 말해 기존코드를 변경하지 않고(CLOSED) 기능을 수정 및 추가가 가능(OPEN)해야한다. 이렇게 구현하려면 결국 다음과 같이 하는게 포인트이다.

  • 자주 변경되는 내용은 수정하기 쉽게!
  • 변경되지 않아야 하는 것은 수정에 영향받지 않게!

그리고 이를 위해 자주 사용되는 문법이 인터페이스 이다.

3. Liskov Substitution Principle

리스코프 치환 원칙
FUNCTION THAT USE POINTERS OR REFERENCES TO BASE CLASSES MUST BE ABLE TO USE OBJECTS OF DERIVED CLASSES WITHOUT KNOWING IT.

간단히 말해 자식은 부모가 할 수 있는걸 할수 있어야 한다. 즉 부모와 자식 사이의 행위에는 일관성이 있어야 한다는 원칙이며, 또한 이는 곧 부모의 인스턴스 대신 자식의 인스턴스를 사용해도 문제가 없어야 한다는 점을 의미한다.

상속 관계에서는 일반화관계(Is-a)가 성립해야 한다.

4. Dependency Inversion Principle

의존 역전 원칙
HIGH LEVEL MODULES SHOULD NOT DEPEND UPON LOW LEVEL MODULES. BOTH SHOULD DEPEND UPON ABSTRACTIONS.
ABSTRACTIONS SHOULD NOT DEPEND UPON DETAILS. DETAILS SHOULD DEPEND UPON ABSTRACTIONS.

다른말로는 "의존 관계를 맺을 때, 변화하기 쉬운것 보단 어려운 것에 의존해야한다." 이다.

여기서 변화하기 쉬운건 구체적인 것, 변화하기 어려운 것은 추상적인 것을 말한다.

이는 다시 말해 변화하기 쉬운건 구체화 된 클래스를, 변화하기 어려운건 추상클래스나 인터페이스를 의미한다. 따라서 의존관계를 맺을 때, 구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺는다는 것을 의미한다.

의존성 주입이란 개념도 여기서 나온다.

5. Interface Segregation Principle

인터페이스 분리 원칙
CLIENTS SHOULD NOT BE FORCED TO DEPEND UPON INTERFACES THAT THEY DO NOT USE.

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

"하나의 일반적인 인터페이스보다는, 여러개의 구체적인 인터페이스가 낫다."

즉 자신이 사용하지 않는 기능(인터페이스)에는 영향을 받지 말아야 한다는 의미이다.

참고

참고한 링크 입니다. 정말 감사합니다!

배우는 과정이라 잘못된 정보가 있을 수도 있습니다! 잘못된 점이 있다면 언제든 알려주세요!

profile
저는 됩니다. 할 겁니다.

0개의 댓글