객체 지향 원칙 SOLID

배고픈귤·2025년 7월 11일

Backend

목록 보기
6/11

SOLID는 객체 지향 프로그래밍에서 유지보수성과 확장성을 높이기 위한 다섯 가지 설계 원칙을 의미한다.

SRP(단일 책임 원칙)

SRP(Single Responsibility Principle)는 하나의 클래스는 하나의 책임만 가져야 한다는 원칙이다.
하나의 객체가 여러 책임을 갖고 있으면, 각기 다른 변경 이유에 의해 여러 곳이 동시에 수정되어야 하므로 유지보수가 어려워진다.
객체를 적절히 분리하여 하나의 책임만 갖도록 설계하면, 변경이 필요한 경우에도 해당 책임을 가진 객체만 수정하면 되어 안정성과 유연성이 높아진다.

OCP(개방-폐쇄 원칙)

OCP(Opened/Closed Principle)는 소프트웨어 구성 요소는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다는 원칙이다.
새로운 기능이 추가될 때 기존 코드를 계속 수정하면, 버그 발생 위험과 유지보수 비용이 증가한다.
Java에서는 다형성, 인터페이스, 추상 클래스를 활용하여 OCP를 실현할 수 있다.
기존 코드를 건드리지 않고 새로운 하위 클래스를 추가하는 방식으로 기능을 확장하면 된다.
단, 다형성만으로 부족할 때는 Spring 프레임워크의 의존성 주입(DI) 등의 도움이 필요하다.

LSP(리스코프 치환 원칙)

LSP(Liskov Substitution)는 상속받은 하위 클래스는 부모 클래스가 사용되는 곳에서 문제없이 대체 가능해야 한다는 원칙이다. 단순히 컴파일이 되는 것만으로는 충분하지 않다.
하위 클래스는 부모 클래스의 기능을 그대로 유지하면서도 기대한 동작을 방해하지 않아야 하며,
부모 클래스 자리에 하위 클래스가 들어가도 정상적으로 작동해야 한다.
이를 지키지 않으면 상속 구조의 의미가 사라지고, 프로그램의 안정성이 무너질 수 있다.

ISP(인터페이스 분리 원칙)

ISP(Interface Segregation Principle)는 범용적인 하나의 큰 인터페이스보다, 특정 클라이언트에 맞춘 여러 개의 작은 인터페이스가 낫다는 원칙이다.
불필요하게 큰 인터페이스를 사용하면, 클라이언트는 사용하지도 않는 기능을 구현해야 하거나 의존하게 된다.
인터페이스를 적절히 분리함으로써 클라이언트는 자신에게 필요한 기능만 구현하거나 의존할 수 있어
유지보수성과 유연성이 향상된다.

DIP(의존 관계 역전 원칙)

DIP(Dependency Inversion Principle)는 고수준 모듈(클라이언트)은 저수준 모듈(구현체)에 의존하면 안 되고, 둘 다 추상화(인터페이스)에 의존해야 한다는 원칙이다.
즉, 클라이언트는 구현체가 아닌 인터페이스(역할) 에 의존해야 한다.
클라이언트는 구현체가 어떤 방식으로 동작하는지 몰라도, 인터페이스만 알고 있다면 문제없이 동작해야 한다.
이 원칙을 잘 지키면, 구현 변경이나 테스트 시에도 유연하게 대체할 수 있다.
Java에서는 의존성 주입(DI) 과 Spring 프레임워크를 통해 DIP를 쉽게 구현할 수 있다.

0개의 댓글