본문 바로가기

Computer Science

[OOP] SOLID설계 원칙

OOP - SOLID설계 원칙

 

오늘은 객체 지향 프로그래밍(Object Oriented Programming) 설계 원칙 중 하나인  SOLID 설계 원칙에 대해 정리해보겠습니다.

https://www.geeksforgeeks.org/solid-principle-in-programming-understand-with-real-life-examples/


1. SRP (Single Responsibility Principle) : 단일 책임 원칙


하나의 클래스는 하나의 책임만 가져야 하며, 그 책임을 완전히 캡슐화해야 합니다. 이를 통해 클래스의 응집성을 높이

고 결합도를 낮출 수 있습니다.

 

예를 들어, 게시판 글 작성 기능을 구현할 때, 게시판 글 작성과 동시에 이미지 업로드, 태그 추가, 댓글 등 여러가지 작업을 처리하는 클래스를 작성하면 SRP를 위반합니다. 이 경우, 게시판 글 작성 기능을 담당하는 클래스와, 이미지 업로드를 처리하는 클래스, 태그 추가를 처리하는 클래스, 댓글 작성을 처리하는 클래스 등으로 클래스를 분리해야 합니다.

 

2. OCP (Open-Closed Principle) : 개방-폐쇄 원칙


소프트웨어 요소(클래스, 모듈, 함수 등)는 확장은 가능해야 하지만, 변경에 대해서는 폐쇄되어 있어야 합니다. 즉, 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있어야 합니다.

예를 들어, 쇼핑몰의 할인 적용 기능을 구현할 때, 기존 코드를 변경하지 않고도 새로운 할인 정책을 추가하고자 할 때, 기존 코드를 수정하는 대신, 새로운 할인 정책을 추가할 수 있는 추상 클래스나 인터페이스를 작성하고, 이를 구현하는 새로운 클래스를 추가하는 방식으로 구현해야 합니다.

 


3. LSP (Liskov Substitution Principle) : 리스코프 치환 원칙


하위 클래스는 상위 클래스의 기능을 사용할 수 있어야 하며, 이를 통해 상위 클래스로부터 파생된 객체들이 상위 클래스에서 정의된 규약을 지켜야 합니다.( 자식클래스는 부모클래스의 역할을 대신할 수 있어야 한다)

 

예를 들어, 동물 클래스와 이를 상속받은 각 동물 종류의 클래스를 작성할 때, 이 클래스들은 공통적으로 가지고 있는 메서드를 가지고 있어야 하고, 이 메서드들이 각각의 클래스에서 정의한 규약을 지켜야 합니다. 즉, 동물 클래스에서 정의한 메서드를 상속받은 각 동물 종류의 클래스에서는 해당 메서드를 자유롭게 사용할 수 있어야 합니다.

 


4. ISP (Interface Segregation Principle) : 인터페이스 분리 원칙


클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 합니다. 따라서, 인터페이스를 작은 단위로 분리하고 클라이언트가 필요한 인터페이스만 사용하도록 해야 합니다.

예를 들어, 주문 시스템에서 배송, 결제, 쿠폰 할인 등 여러 가지 기능을 갖는 OrderService 인터페이스를 작성할 때, 각 기능에 해당하는 별도의 인터페이스를 작성하고, 이 인터페이스를 구현하는 클래스에서 필요한 기능만 구현하도록 해야 합니다.


5. DIP (Dependency Inversion Principle) : 의존 역전 원칙


추상화에 의존해야 하며, 구체화에 의존해서는 안 됩니다. 즉, 추상 클래스나 인터페이스와 같은 추상화된 것에 의존하도록 해야 합니다. 이를 통해 코드의 유연성과 재사용성을 높일 수 있습니다.

 

예를 들어, 주문 시스템에서 배송, 결제, 쿠폰 할인 등 여러 가지 기능을 갖는 OrderService 인터페이스를 작성할 때, 각 기능에 해당하는 별도의 인터페이스를 작성하고, 이 인터페이스를 구현하는 클래스에서 필요한 기능만 구현하도록 해야 합니다.

 

 

SOLID 원칙의 필요성

 

객체지향 프로그래밍 5대 설계원칙을 지켜야 하는 이유는 코드의 재사용성, 유지보수성, 확장성, 테스트 용이성, 그리고 유연성 등을 높이기 위해서입니다. SOLID 원칙을 따르는 코드는 단일 책임 원칙에 따라 클래스의 역할이 분명하고, 개방-폐쇄 원칙에 따라 기능을 확장하거나 변경할 때 다른 부분에 영향을 미치지 않습니다. 리스코프 치환 원칙과 인터페이스 분리 원칙은 코드의 유연성과 확장성을 높여줍니다. 의존 역전 원칙은 코드의 결합도를 낮춰줌으로써 코드의 유지보수성을 높이고, 테스트 용이성을 높여줍니다.

 

 

Reference

https://www.nextree.co.kr/p6960/

 

객체지향 개발 5대 원리: SOLID

현재를 살아가는 우리들은 모두 일정한 원리/원칙 아래에서 생활하고 있습니다. 여기서의 원칙 이라 함은 좁은 의미로는 개개인의 사고방식이나 신념, 가치관 정도가 될 수가 있겠고, 넓게는 한

www.nextree.co.kr

https://velog.io/@haero_kim/SOLID-%EC%9B%90%EC%B9%99-%EC%96%B4%EB%A0%B5%EC%A7%80-%EC%95%8A%EB%8B%A4

 

SOLID 원칙, 어렵지 않다!

객체지향 프로그래밍 설계 원칙에 대해 알아보기

velog.io

https://www.geeksforgeeks.org/solid-principle-in-programming-understand-with-real-life-examples/

 

SOLID Principle in Programming: Understand With Real Life Examples - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org