좋은 객체지향 설계를 위한 SOLID 원칙 $($그리고 IoC)

Updated:

SOLID 원칙 - 좋은 객체 지향 설계를 위한 5가지 원칙.

  • SRP: 단일 책임 원칙 $($Single Responsibility Principle)

  • OCP: 개방-폐쇄 원칙 $($Open/Closed Principle)

  • LSP: 리스코프 치환 원칙 $($Liskov Subsitution Principle)

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

  • DIP: 의존관계 역전 원칙 $($Dependency Inversion Principle)

SRP 단일 책임 원칙 💪

하나의 클래스는 하나의 책임$($기능)만을 가져야 한다.

책임이란 해야하는 것을 의미하며 클래스에 책임을 할당할 때는 그 책임을 수행해야 하는 클래스에 할당해야 한다.

한 객체가 갖는 책임을 상황에 따라 적절히 조절하는 것이 중요하다.

변경이 있을 때 파급 효과가 적다면 단일 책임 원칙을 잘 지킨 것이다.

OCP 개방-폐쇄 원칙 🔓 & 🔒

코드는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.

즉, 기존의 코드를 변경하지 않으면서 새로운 기능을 추가할 수 있도록 설계해야 한다.

다형성을 활용하여 확장.

인터페이스를 구현한 하나의 클래스를 새로 만들어서 새로운 기능을 구현$($수정이 아닌 확장)

ex) 객체의 역할과 구현을 분리

객체를 생성하고, 연관관계를 맺어주는 별도의 설정자$($ex. 스프링 컨테이너)를 사용.

IoC 제어의 역전 🔄

IoC 제어의 역전: 프로그램의 제어 흐름을 구현 객체가 직접 제어하는 것이 아니라 외부에서 관리하는 것.

객체의 역할과 구현을 편리하게 다룰 수 있도록 지원한다.

구현 객체는 자신의 로직을 실행하는 역할만 담당.

프로그램의 제어 흐름은 외부의 설정 클래스가 담당.

LSP 리스코프 치환 원칙 🚘

일반화 관계를 적절하게 사용했는지를 점검하는 원칙.

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

ex) 자동차 핸들을 왼쪽으로 꺾으면 차량이 왼쪽으로 이동하는 기능, 오른쪽으로 가면 LSP 위반.

ISP 인터페이스 분리 원칙

인터페이스를 클라이언트에 특화되도록 분리시키는 원칙.

인터페이스가 명확해지고, 대체 가능성이 높아진다.

DIP 의존관계 역전 원칙 👨‍🍼

클라이언트 코드가 인터페이스만 바라보게 설계해야 한다.

구현 클래스에 의존하지 말고, 인터페이스나 추상 클래스에 의존관계를 맺도록 설계해야 한다.

클라이언트는 역할에 의존해야 유연하게 구현체를 변경할 수 있다.

Categories:

Updated:

Leave a comment