본문 바로가기

스프링

[java] 추상화 인터페이스(클래스분리 리팩토링)

추상화 : 공통적인 성격을 뽑아내어 이를 따로 분리하는 작업

> 인터페이스 도입 : 자신이 구현한 클래스에 대한 구체적인 정보는 모두 감춤

 

UserDao 입장에서 ConnectionMaker 인터페이스 타입의 오브젝트라면 어떤 클래스로 만들어 졌던지 관계없이 makeConnection() 메소드를 호출하기만 하면 Connection 타입의 오브젝트를 만들어서 돌려줄 것이라고 기대할 수 있다.

 

 

 

 

인터페이스로 분류했지만 위처럼 고객에게 자유로운 DB커넥션 확장 기능을 가진 UserDao를 제공할 수 없다. 하지만 위의 기능을 클라이언트에게 떠넘기면?

 

 

이렇게 인터페이스를 도입하고 클라이언트의 도움을 받으면 UserDao 코드는 아무런 영향을 받지 않는다.(유연하다)(다양한 회사의 커넥션 객체를 받을 수 있다. 다형성)

개방폐쇄원칙(OCP:Open-Close Principle) : UserDao에 전혀 영향을 주지 않고도 기능을 확장. 변경이 없음.

 

객체생성을 클라이언트에게 위임

'스프링' 카테고리의 다른 글

[spring] spring ioc_DI  (0) 2020.10.10
[java] IOC_오브젝트팩토리  (0) 2020.10.10
[java] 클래스분리(상속을 통한 확장 리팩토링)  (0) 2020.10.06
[static] 자바 static 정리  (0) 2020.10.02
[자바 상속] extends 확장  (0) 2020.10.02