본문 바로가기

개발/Java

[Java]순수 자바 코드로 DIP와 OCP를 준수하는 방법

Service 인터페이스와 ServiceImpl 클래스로 서비스를 구현받는 구조를 통해 추상화 - 구체화를 구축하여도,

 

실제 비즈니스 로직을 수행하기 위해 new 연산자를 통해 객체를 생성할때는 실행되는 ServiceImpl 클래스를

 

new 로 선언하여 생성하게 된다.

 

ex) private final Service service = new ServiceImpl(); 형식으로 객체 생성

 

이런식으로 구현하게 되면, 추상화가 잘 되어 있다 하더라도, 객체의 생성에 있어서 구체화 된 클래스를 호출해야 하므로 DIP(의존관계 역전원칙 : 프로그래머는 "구체화"보다 "추상화"에 의존해야 한다.

 

뿐만 아니라 구체화된 클래스의 변경이 발생할때 Service를 호출하는 클라이언트 단을 수정해야 하므로, OCP(개방 폐쇠 원칙) 에도 위배되는 상황이 발생한다.

 

이러한 문제를 해결하기 위해서 하나의 Config 클래스를 생성한다.

스프링 원리 기본편 중 - 김영한(인프런)

위와 같이 컨피그 파일을 통해 객체를 return 해 준 후, 서비스 로직에서는 아래와 같이 생성자를 통해 호출한다.

스프링 원리 기본편 중 - 김영한(인프런)

이렇게 구성하게 되면, 클라이언트단에서는 구체화된 어떤 클래스가 호출되는지 알지 못한다.

 

이러한 방법을 통해 순수 Java 코드로 DIP와 OCP를 준수할 수 있게 된다.

 

물론 스프링을 통해 훨씬 더 편하고 유용하게 리팩토링이 가능하다.

'개발 > Java' 카테고리의 다른 글

[Java]Comparator  (0) 2022.03.31
[Java]PriorityQueue  (0) 2022.03.27
[Java]Call by value, Call by reference  (0) 2022.03.09
[CS]객체 지향 설계의 5원칙(SOLID)  (0) 2022.03.02
[Java]Optional  (0) 2022.03.01