Development/Development

객체 지향 설계 원칙 (SOLID / DRY / YAGNI / KISS)

2mukee 2025. 5. 27. 22:45
320x100
320x100

객체 지향 설계 원칙 (SOLID)

객체 지향 프로그래밍에서 소프트웨어를 효율적으로 설계하고 유지보수 하기 위해 따르는 기본 지침

대표적으로 SOLID 원칙이 존재

 

 

 

 

 

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

클래스는 하나의 책임만 가져야 하며 그 책임은 하나의 이유로 변경되어야 한다

변경이 있을 때 파급효과가 적어야 한다

 

- 풀이

SRP에서 이야기하는 책임이란 기능을 의미. 하나의 클래스가 수행할 수 있는 기능이 여러 개가 되면 객체 지향이 설계의 핵심인 높은 응집도와 낮은 결합도를 지키지 못하게 된다

 

- 응집도

모듈의 독립성을 의미하는 개념으로 모듈 내부 구성요소 간 연관 정도

응집도가 높을 수록 하나의 모듈은 하나의 기능을 수행하는 형태

 

- 결합도

소프트웨어 구조에서 모듈 간의 관련성을 측정하는 척도

모듈 내부가 아닌 외부의 모듈과의 연관도 또는 모듈 간의 상호 의존성을 의미

 

 

 

 

 

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

소프트웨어의 요소는 확장에 열려 있어야 하고 수정에는 닫혀있어야 한다

새로운 기능을 추가할 때 기존 코드를 수정하지 않고, 기존 코드를 기반으로 확장할 수 있도록 설계해야한다

 

- 풀이

상속(다형성)과 추상화(인터페이스)를 활용하여 자주 변경되는 부분을 추상화하여 기존 코드를 수정하지 않고 기능을 확장할 수 있도록 하여 유연성을 살려야한다

 

 

 

 

 

리스코프 치환 원칙 (Liskov Substitution Principle)

서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다

상속 구조에서 부모 클래스의 역할을 자식 클래스가 정상적으로 수행할 수 있도록 하여 코드의 일관성을 유지해야한다

 

- 풀이

다형성 원리를 이용하기 위한 원칙

다형성에서 하위 클래스는 인터페이스의 규약을 모두 지켜야 한다

부모 클래스의 메서드를 오버라이드 할 때 원래 메서드의 동작을 웨손하지 않도록 설계해야함

 

- 오버라이드

부모 클래스의 메서드를 자식 클래스에서 똑같이 가져와 사용하는 것

 

 

 

 

 

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

클라이언트는 자신이 사용하는 메서드에만 의존해야한다

클라이언트의 목적과 용도에 적합한 인터페이스만을 제공해야한다

 

- 풀이

인터페이스를 각각 사용에 맞게 끔 잘게 분리해야한다는 설계 원칙

SRP 원칙이 클래스의 단일 책임을 강조한다면, ISP는 인터페이스의 단일 책임을 강조

인터페이스는 한 번 구성하였으면 웬만해서는 변경하면 안된다는 개념

 

 

 

 

 

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

고수준 모듈은 저수준 모듈에 의존해서는 안되며, 둘 다 추상화에 의존해야한다

 

- 풀이

DIP 원칙은 어떤 클래스를 참조해야 하는 상황이 생기면 그 클래스를 직접 참조하는 것이 아니라 클래스의 상위 요소 (추상 클래스 / 인터페이스)를 참조하라는 원칙

쉽게 말해서 구현체에 의존하지 말고 인터페이스에 의존하라는 뜻

 

- 인터페이스

클래스가 어떤 메서드를 제공하는지 알려주는 명세

 

 

 

 

 

DRY (Don't Repeat Yourself)

중복을 피하고 코드를 재사용 할 수 있도록 설계하라

 

 

 

 

 

YAGNI (You Aren't Gonna Need It)

현재 필요하지 않은 기능을 미리 설계하지 마라

 

 

 

 

 

KISS (Keep It Simple Stupid)

가능한 간단하고 직관적으로 설계하라

멍청해 보이는 설계가 좋은 설계일 수 있다

 

 

 

 

 

 

 

Reference

 

💠 객체 지향 설계의 5가지 원칙 - S.O.L.I.D

객체 지향 설계의 5원칙 S.O.L.I.D 모든 코드에서 LSP를 지키기에는 어려움. 리스코프 치환 원칙에 따르면 자식 클래스의 인스턴스가 부모 클래스의 인스턴스를 대신하더라도 의도에 맞게 작동되어

inpa.tistory.com

 

✏️ SOLID, 좋은 객체지향 설계의 5가지 원칙

SOLID라는 좋은 객체지향의 설계의 5가지 원칙이 존재한다. SOLID는 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙)의 앞글자를 따

velog.io

 

결합도(Coupling)와 응집도(Cohesion)의 개념과 특징, 유형

결합도(Coupling) 결합도는 모듈 내부가 아닌 외부의 모듈과의 연관도 또는 모듈 간의 상호의존성을 나타내는 정도 결합도는 소프트웨어 구조에서 모듈 간의 관련성을 측정하는 척도 결합도의 특

computer-science-student.tistory.com

 

300x250
728x90