👩🏻‍💻기초지식/CS

[CS] 객체지향 설계원칙 (SOLID)

공대 컴린이 2023. 1. 20. 00:37
728x90

✔ 객체지향 설계원칙 (객체지향 5원칙, SOLID 원칙)

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

객체(클래스)는 오직 하나의 책임을 가져야 한다.

객체는 오직 하나의 변경의 이유만을 가져야하며 그 책임을 완전히 캡슐화해야 한다.

 

O (Open-Close Principle, OCP) = 개방-폐쇄 원칙

객체는 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야 한다.

즉, 기존의 코드는 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다는 원칙이다.

더보기
어떤 기능을 구현했을 때, 기능에 문제가 생기면 클래스를 변경하지 않고 상속이나 Wrapping과 같은 방법으로 문제를 해결할 수 있어야 한다.

 

L (Liskov Substitution Principle, LSP) = 리스코프 치환 원칙

자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다. 즉, 자식클래스를 부모클래스에 그대로 대입하여 사용해도 프로그램이 정상작동 해야한다는 뜻이다.

 

상속의 본질을 다루는 원칙으로, 부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 계획대로 잘 작동해야 하는 is-a 관계가 형성되어야 한다.

자식클래스는 부모클래스의 책임을 무시하거나 재정의하지 않고, 확장만 수행하도록 구현해야 리스코프 치환 원칙이 지켜질 수 있다.

 

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

한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다. 즉, 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.

최대한 인터페이스를 작게 나누어 여러개의 구체적인 인터페이스가 낫다.

 

D (Dependency Inversion Principle, DIP) = 의존성 역전 원칙

의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다 변화하기 어렵고, 거의 변화가 없는 것에 의존해야 한다.

추상성이 높고 안정적인 고수준의 클래스는 구체적이고 불안정한 저수준 클래스에 의존해서는 안된다.

요약하면, 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다. 라는 의미이다.

 

여기서 말하는 추상성이 높고 안정적이고 변화가 없는 고수준 클래스는 인터페이스나 추상클래스로 볼 수 있고, 변화하기 어렵고 구체적인 저수준 클래스는 단순 구현되는 클래스를 의미한다고 볼 수 있다.


 

참조

https://hckcksrl.medium.com/solid-%EC%9B%90%EC%B9%99-182f04d0d2b

 

SOLID 원칙

객체지향 설계원칙

hckcksrl.medium.com

https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%9B%90%EC%B9%99

 

객체 지향 프로그래밍/원칙 - 나무위키

객체지향 5원칙(SOLID). 객체지향에서 꼭 지켜야 할 5개의 원칙을 통틀어 객체지향 5원칙이라 칭한다. 일단 한번 보면 개념은 알아 듣긴 하지만 막상 실현하려면 생각보다 어려움이 따른다. 이 5개

namu.wiki

 

728x90