개발자 공부 - 인프런 온라인 강의/스프링 핵심 원리 - 기본편

[섹션 3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용] 좋은 객체 지향 설계의 5가지 원칙의 적용 / 인프런 김영한 스프링 핵심 원리 기본편

easpop 2023. 3. 5. 21:35
728x90
반응형

이번 시간에는 지금까지 구현한 코드들의 좋은 객체지향 설계의 5가지 원칙의 관점에서 리뷰했다.

 

좋은 객체지향 설계의 5가지 원칙들중에서, 단일책임원칙(SRP)부터 살펴보자.

단일책임은 말 그대로, 한 클래스는 하나의 책임만 가져야 한다는 뜻이다.

이러한 관점에서 봤을 때, 이전 코드에서는 클라이언트 객체에서,

직접 구현 객체를 생성, 연결, 실행까지 다양한 책임을 맡고 있었다.

 

SRP 원칙을 따르면서 관심사를 분리하였다.

구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당하도록 하였다.

자연스럽게 클라이언트 객체는 실행하는 책임만 담당하니 관심사가 분리되었다.

반응형

DIP 원칙은 "프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다" 는 원칙이다.

기존의 클라이언트 코드(OrderServiceImpl과 같은)는 DIP를 지키며, DiscountPoliy 추상화 인터페이스에 의존했지만,

구현 클래스인 FixDiscountPoliy도 함께 의존하고 있었다.

그래서, 클라이언트 코드가 DiscountPolicy 인터페이스만 의존하도록 코드를 변경했다.

하지만, 클라이언트 코드는 인터페이스만으로는 아무것도 실행할 수가 없다.

그렇기 때문에, DIP 원칙을 따르기 위해서, AppConfig가 FixDiscountPolicy 객체 인스턴스를 클라이언트 코드 대신 생성해서 클라이언트 코드에 의존관계를 주입해서 문제를 해결했다.

 

OCP 원칙은 "소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다" 는 원칙이다.

OCP 원칙은 다형성을 사용하고 클라이언트가 DIP를 지켰다.

AppConfig를 활용해서 애플리케이션을 사용 영역과 구성 영역으로 나누었다.

 

앞서 배운 시간에서, 할인 정책 사항이 고정할인 금액 정책에서 비율에 따른 할인 금액 정책으로 변경이 되었을 때,

AppConfig가 의존관계를 FixDiscountPolicy에서 RateDiscountPolicy로 변경을 해서

클라이언트 코드에 주입을 해주는 구조이기 때문에, 클라이언트 코드는 변경할 필요가 없게 되었다.

결과적으로 소프트웨어 요소를 새롭게 확장하더라도 사용 영역의 변경은 닫혀 있기 때문에 (=변경할 필요가 없기 때문에)

OCP 원칙을 잘 따른다고 할 수 있다.

 

좋은 객체지향 설계의 5가지 원칙에 대해서 조금 더 자세히 알고 싶은 분은,

이전에 올렸던 아래의 포스트를 참고해주세요~~!

 

2023.02.06 - [개발자 공부 - 인프런 온라인 강의/스프링 핵심 원리 - 기본편] - [섹션 1. 객체 지향 설계와 스프링] 좋은 객체 지향 설계의 5가지 원칙(SOLID)/ 인프런 김영한 스프링 핵심 원리 기본편

 

[섹션 1. 객체 지향 설계와 스프링] 좋은 객체 지향 설계의 5가지 원칙(SOLID)/ 인프런 김영한 스프

이번 시간에는 좋은 객체 지향 설계 5가지 원칙(SOLID)에 대해서 알아보는 시간이었다. SOLID는 클린 코드로 유명한 로버트 마틴이 정리한 좋은 객체 지향 설계의 5가지 원칙이다. S : 단일 책임 원칙

easpop.tistory.com

 

728x90
반응형