참고 페이지
S.O.L.I.D - The First 5 Principles of Object-Oriented Programing
SOLID: The First 5 Principles of Object Oriented Design (digitalOcean)

SOLID는 Robert C.Martin이 자신의 논문인 Design Principles and Design Patterns에서 처음 5가지 객체지향 설계 원칙에서 따온 약자 이다.

S.O.L.I.D

  • S (Single-responsibility principle - SRP) : 단일 책임의 원칙
  • O (Open-closed Principle - OCP) : 개방 폐쇄의 원칙
  • L (The Liskov Substitution Principle - LSP) : 리스코브 치환의 법칙
  • I (Interface Segregation Principle - ISP) : 인터페이스 분리의 원칙
  • D (Dependency Inversion Principle - DIP) : 의존성 역전의 원칙

🧡 Single-Responsibility Principle (SRP)

"A class should have one and only one reason to change, meaning that a class should have only one job."

하나의 클래스는 하나의 기능만 가지며, 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중되어 있어야 한다는 원칙. 즉, 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나 뿐이어야 함을 의미함. 그래서, SRP 원리를 적용하면 무엇보다도 책임 영역이 확실해지기 때문에 한 책임의 변경에서 다른 책임의 변경으로의 연쇄작용에서 자유로울 수 있다.

💛 Open-closed Principle (OCP)

"Objects or entities should be open for extension, but closed for modification."

SW의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 한다는 원리. 즉, 변경을 위한 비용은 가능한 줄이고, 확장을 위한 비용은 가능한 극대화 해야한다는 의미. 요구사항의 변경이나 추가사항이 발생하더라도, 기존 구성요소는 수정이 일어나지 말아야 하며, 기존 구성요소를 쉽게 확장해서 재사용 할 수 있어야 한다는 의미이다.

💚 The Liskov Substitution Principle (LSP)

"If S is a subtype of T, then objects of type T may be replaced (or substituted) with objects of type S."

서브타입은 언제나 기반 타입으로 교체할 수 있어야 한다. (= 서브 타입은 언제나 기반 타입과 호환될 수 있어야 한다는 말이다) 서브 타입은 기반 타입이 약속한 규약(public 인터페이스, 물론 메소드가 던지는 예외까지 포함)을 지켜야한다는 원칙. 상속은 구현이든 인터페이스 이든 궁극적으로는 다형성을 통한 확장성 획득을 목표로 하고 있다. LSP 원칙도 역시 서브 클래스가 확장에 대한 인터페이스를 준수해야함을 의미함

💙 Interface Segregation Principle (ISP)

"A client should never be forced to implement an interface that it doesn't use or clients shouldn't be forced to depend on methods they do not use."

한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원리. 즉, 어떤 클래스가 다른 클래스에 종속될 때에는 가능한 최소한의 인터페이스만을 사용해야한다. ISP를 ‘하나의 일반적인 인터페이스보다는, 여러개의 구체적인 인터페이스가 낫다’ 라고 정의 할 수도 있습니다. 만약, 어떤 클래스를 이용하는 클라이언트가 여러개이고 이들이 해당 클래스의 특정 부분집합만을 이용한다면, 이들을 따로 인터페이스로 빼내어 클라이언트가 기대하는 메세지 만을 전달할 수 있도록 해야한다. SRP와 비교하자면, SRP가 클래스의 단일 책임을 강조한다면, ISP는 인터페이스의 단일 책임을 강조함.

💜 Dependency Inversion Principle (DIP)

"Entities must depend on abstractions, not on concretions. It states that the high-level module must not depend on the low-level module, but they should depend on abstractions."

의존 관계의 역전이란, 구조적 디자인에서 발생하던 하위 레벨 모듈의 변경이 상위 레벨 모듈의 변경을 요구하는 위기관계를 끊는 의미의 역전입니다. 실제 사용 관계는 바뀌지 않으며, 추상을 매개로 메세지를 주고 받음으로써 관계를 최대한 느슨하게 만드는 원칙이다.
profile
Welcome to my velog! I love learning something new to build up my ability in development field. I don't think it is shame not to know, but it is shame to pretend to know about something you don't know.

0개의 댓글