[Spring-기본] 객체지향 설계 5대 원칙 - SOLID

DANI·2023년 11월 22일

Spring[김영한T]

목록 보기
17/31
post-thumbnail

📕 객체지향 프로그래밍의 5가지 설계 원칙, SOLID

1. SRP(단일 책임 원칙)

2. OCP(개방-폐쇄 원칙)

3. LSP(리스코프 치환 원칙)

4. DIP(의존 역전 원칙)

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




📑 1. SRP(단일 책임 원칙)


작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는데 집중되어 있어야 한다는 원칙이며, 이는 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 함을 의미한다.

한 클래스는 하나의 책임만 가져야 한다


✅ 구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당
✅ 클라이언트 객체(OrderServiceImpl, MemberServiceImpl) 는 실행하는 책임만 담당




📑 2. OCP(개방폐쇄의 원칙)


소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 한다는 원리이다. 이것은 변경을 위한 비용은 가능한 줄이고 확장을 위한 비용은 가능한 극대화 해야 한다는 의미로, 요구사항의 변경이나 추가사항이 발생하더라도, 기존 구성요소는 수정이 일어나지 말아야 하며, 기존 구성요소를 쉽게 확장해서 재사용할 수 있어야 한다는 뜻이다.

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


✅ AppConfig가 의존 관계를 FixDiscountPolicy -> RateDiscountPolicy로 변경해서 클라이언트 코드에 주입하므로 클라이언트 코드는 변경하지 않아도 된다.

✅ 소프트웨어 요소를 새롭게 확장해도 사용 영역의 변경은 닫혀있다. (AppConfig에서 변경하기 때문)




📑 3. LSP(리스코브 치환의 원칙)


하위 타입은 상위 타입을 대체할 수 있어야 한다는 뜻이다. 즉, 해당 객체를 사용하는 클라이언트는 상위 타입이 하위 타입으로 변경되어도, 차이점을 인식하지 못한 채 상위 타입의 퍼블릭 인터페이스를 통해 서브 클래스를 사용할 수 있어야 한다는 것이다.



📑 4. ISP(인터페이스 분리의 원칙)


한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원리이다. 즉, 어떤 클래스가 다른 클래스에 종속될 때에는 가능한 최소한의 인터페이스만을 사용해야 한다.



📑 5. DIP(의존성 역전의 원칙)


고수준 모듈(입출력으로부터 먼 추상화된 모듈)은 저수준 모듈(입출력으로부터 가까운 구현 모듈)의 구현에 의존해서는 안되며, 저수준 모듈이 고수준 모듈에 의존해야 한다는 것이다.

추상화에 의존해야지, 구체화에 의존하면 안된다


✅ AppConfig가 클라이언트 코드 대신 객체 인스턴스를 생성해서 클라이언트 코드에 의존관계를 주입한다.




참고 :

0개의 댓글