토비의 스프링 ~p60

 

 

 

 

초난감 DAO를 리펙토링 하는 과정에서 알 수 있었던 템플릿 메소드 패턴과 팩토리 메소드 패턴.

 

 

리펙토링?

기존의 코드를 외부의 동작방식에는 변화 없이 내부 구조를 변경해서 재구성하는 작업 또는 기술

 

 

템플릿 메소드 패턴?

이는 상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방식이다. 변하지 않는 기능은 슈퍼클래스에서 만들어두고 자주 변경되며 확장할 기능은 서브클래스에 만들도록 한다.

슈퍼클래스에 기본적인 로직의 흐름을 만들고(커넥션 가져오기, SQL 생성, 실행, 반환), 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤, 서브클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방식이다.

 

 

팩토리 메소드 패턴?

템플릿 메소드 패턴과 마찬가지고 상속을 통해 기능을 확장하게 하는 패턴이다. 슈퍼클래스 코드에서는 서브클래스에서 구현할 메소드를 호출에서 필요한 타입의 오브젝트를 가져와 사용한다. 

UserDAO에서 getConnection()메소드는 Connection타입 오브젝트를 생성한다는 기능을 정의해놓은 추상 메소드이다. 그리고 UserDAO의 서브클래스의 getConnection() 메소드는 어떤 Connection클래스의 오브젝트를 어떻게 생성할 것인지 결정하는 방법이다. 이렇게 서브클래스에서 구체적인 오브젝트 생성방법을 결정하게 하는 방식이다.

UserDAO는 Connection 인터페이스 타입의 오브젝트라는 것 이외에는 관심을 두지 않는다. 그저 Connection 인터페이스에 정의된 메소드를 사용할 뿐이다. 이를 사용하는 클래스는 서버의 DB커넥션 풀에서 가져올 수도 있고, 드라이버를 직접 이용해 새로운 DB커넥션을 만들수도 있고...

 

발췌 : 토비의 스프링 3.1 <UserDao의 팩토리 메소드 패턴>

 

+ Recent posts