Web/스프링

템플릿 메소드 패턴과 팩토리 메소드 패턴

벨포트조던 2016. 7. 27.
반응형

난 아직도 헷갈린다;; 같은 개념아닌가 .. ?


디자인 패턴

소프트웨어 설계 시 특정 상황에서 자주 만나는 문제를 해결하기 위해 사용할수 있는 재사용 가능한 솔루션.

패턴의 설계 구조를 보면 대부분 비슷한데, 그 이휴는 두가지 구조로 정리되기 때문이다. 

하나는 클래스 상속이고 다른 하나는 오브젝트 합성이다. 

따라서 패턴의 결과로 나온 코드나 설계 구조만 보면 대부분 비슷해 보인다.

패턴에서 가장 중요한 것은 각 패턴의 핵심이 담긴 목적 또는 의도다. 패턴을 적용할 상황, 해결해야 할 문제,

솔루션의 구조와 각 요서의 역할과 함께 핵심 의도가 무엇인지를 기억해둬야 한다.


템플릿 메소드 패턴

상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법이다.

변하지 않는 기능은 슈퍼클래스에 만들어 두고 자주 변경되며 확장할 기능은 추상클래스나 오버라이딩 가능한

protected메소드(=추상메소드) 등으로 만든 뒤 서브클래스에서 만들도록 한다
.

-단점 : 상속을 통하여 구현이 되므로 해당 추상 메소드가 필요한 클래스마다 상속을 받아야 한다.


 
 
=============== 예제 ================

/* UserDao.java */

public abstract class UserDao {


public void deleteAll() throws SQLException {


Connection c = null;

PreparedStatement ps = null;


try {

c = dataSource.getConnection();


ps = makeStatement(c);


ps.executeUpdate();


catch (SQLException e) {

throw e;

finally{

if(ps!=nulltry{ps.close();}catch(SQLException e){}

if(c!=nulltry{c.close();}catch(SQLException e){}

}

}


abstract protected PreparedStatement makeStatement(Connection c) throws SQLException;
}

/* UserDaoDeleteAll.java */
 public class UserDaoDeleteAll extends UserDao {


@Override

protected PreparedStatement makeStatement(Connection c) throws SQLException {

// TODO Auto-generated method stub

PreparedStatement ps = c.prepareStatement("delete from users");

return ps;

}

}
 


팩토리 메소드 패턴

템플릿 메소드와 마찬가지로 상속을 통해 기능을 확장하게 하는 패턴이다. 

허나 이 패턴의 주체는 서브클래스로 생각하면 되것다. 

서브클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드를 팩토리 메소드라 하고

이방식을 통해 오브젝트 생성방법을 나머지 로직, 즉 슈퍼클래스의 기본 코드에서 독립시키는 방법 

팩토리 메소드 패턴이라 한다. 이 메소드는 주로 인터페이스 타입으로 오브젝트를 리턴한다.

자바에서 종종 오브젝트를 생성하는 기능을 가진 메소드를 일반적으로 팩토리 메소드라고


부르기도 하는데 이때 말하는 팩토리 메소드와는 다르다고 한다.




출처 http://kimddochi.tistory.com/55




템플릿 메소드 패턴


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


팩토리 메소드 패턴

슈퍼클래스에서 서브클래스에서 구현할 메소드를 호출하여 필요한 타입의 오브젝트를 가져와 사용한다. 
서브클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드를 팩토리 메소드라고 하고, 이 방식을 통해 슈퍼클래스의 기본 코드에서 오브젝트 생성방법을 독립시키는 방법을 팩토리 메소드 패턴이라고 한다.


참고서적: 토비의 스프링3


반응형

댓글