공부블로그

[공부 블로그] SOLID 원칙에 대하여

bimtaeur30 2025. 8. 21. 11:04

안녕하세요.

오늘은 디자인 패턴 중 하나인 SOLID 원칙을 공부한 내용에 대해 블로그를 쓰겠습니다.

SOLID 원칙이란, 객체지향 프로그래밍(OOP)에서 유지보수성과 확장성을 높이기 위해 만들어진 설계 원칙입니다.

SOLID 원칙은 로버스 C. 마틴이라는 사람이 제안했다고 합니다. 각 글자의 의미도 살펴봅시다.

 

S: 단일책임원칙

O: 개방-폐쇄의 원칙

L: 리스코프 치환 원칙

I: 인터페이스 분리 원칙

D: 의존성 역전 원칙

 

이제 각 원칙이 무엇을 의미하는지 자세히 알아보겠습니다.


S, 단일책임원칙

의미는 "한 클래스는 오직 하나의 책임을 가져야 한다"입니다.

단일책임원칙을 적용할 경우 코드 이해도가 높아지고 수정범위가 낮아집니다.

 

O, 개방-폐쇄의 원칙

의미는 "소프트웨어 요소는 확장에는 열려있어야 하고, 변경에는 닫혀있어야 한다"입니다.

즉 기능을 추가할 때 코드를 수정하지 말고 확장으로 해결하자는 의미입니다.

 

L, 리스코프 치환 원칙

의미는 "자식클래스는 언제나 부모클래스를 대체할 수 있어야 한다"입니다.

부모타입으로 참조했을 때 자식이 문제없이 동작해야 한다는 것입니다.

예를 들어, Bird 클래스를 Penguin이 상속했을 때 Fly()를 호출한다면 에러가 날 것입니다.

이때는 Bird를 FlyBird, NoneFlyBird로 분리하여 Penguin은 NoneFlyBird를 상속해야 합니다.

 

I, 인터페이스 분리 원칙

의미는 "특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다"입니다.

즉 불필요한 메서드 의존성을 줄여야 한다는 것입니다.

예를 들어 IPerson 인터페이스가 있을 때 해당 인터페이스에 Sleep(), Eat(), Poop()을 다 넣지 말고 ISleep, IEat, IPoop으로 분리한다는 것입니다. 

 

D, 의존성 역전 원칙

의미는 "고수준 모듈은 저수준 모듈에 의지하면 안 되고, 둘 다 추상(인터페이스)에 의존해야 한다"입니다.

구현체가 아니라 추상화에 의존하도록 설계하라는 것입니다.

예를 들어 Person 클래스가 Sword 클래스에 직접 의존하지 말고 IWeapon 인터페이스에 의존하여 Sword, Gun 등 다양한 무기로 교체할 수 있도록 하라는 것입니다.


이렇게 SOLID 원칙을 알아보았습니다.

앞으로 SOLID 원칙을 계속 참고하면서 코드의 유지보수성과 확장성을 높이기 위해 노력해야겠다고 생각했습니다.

감사합니다.