본문 바로가기
카테고리 없음

SOLID

by 상똥 2024. 1. 9.

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

- 모든 클래스는 각각 하나의 기능만을 가진다는 원칙

- 클래스나 모듈을 바꿔야 할 이유가 하나여야 한다는 원칙 (-클린코드)

- 책임을 적절히 분배하여 관리보수에 용이함

- 다른 클래스들이 서로 연쇄적으로 영향을 미치는 것을 방지

 

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

- 클래스, 모듈, 함수 등이 확장에는 열려있고, 변경에는 닫혀있어야 한다는 원칙

- 쉽게 확장이 가능해야 함

- 요구사항의 변경이나 추가사항이 발생하더라도, 기존 구성요소는 변해서는 안 됨

- OCP를 가능하게 하는 중요한 매커니즘 : 추상화, 다형성

- 변할 수 있는 부분을 추상화하여, 상속하는 클래스가 의존할 수 있게 코드 작성

 

리스코프 치환 원칙 (LSP, Liscov Substitution Principle)

- 상위 클래스를 가리키는 포인터에 해당 클래스를 상속하는 하위 클래스를 할당하더라도 모든 기능이 정상적으로 작동해야한다는 원칙

- 하위 클래스의 상세한 내용은 상위 클래스가 알 필요가 없다는 의미

- 하위 클래스가 확장에 대한 인터페이스를 준수해야함을 뜻함 (하위 클래스는 상의 클래스의 역할을 해내야 함)

- override를 하지 않거나, 하되 기능의 추가만을 허용하면 준수할 수 있음

 

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

- 자신이 사용하지 않는 인터페이스는 구현해서는 안 된다는 원칙

- 하나의 큰 인터페이스를 상속받기보다, 인터페이스를 구체적이고 작은 단위들로 분리

- 꼭 필요한 인터페이스만 상속하자는 의미

 

의존관계 역전의 원칙 (DIP, Dependency Inversion Principle)

- 클래스 사이에 의존관계가 존재하되, 구체적인 클래스에 의존하지 말고 최대한 추상화한 클래스에 의존해야 한다는 원칙

- 어떤 클래스를 참조할 때, 그 클래스를 직접 참조하지 말고 그 상위 요소를 참조하라는 것

- interface를 적극적으로 활용하라는 의미

- 인터페이스/추상 클래스일수록 변할 가능성이 적기 때문

 

문제는 우리들 대다수가 프로그램이 돌아가면 일이 끝났다고 여기는 데 있다. - 로버트 c 마틴, 클린코드

solid => 소스코드를 읽고, 확장하기에 좋은 원칙들