카테고리 없음

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

iamreo 2013. 7. 25. 17:45
반응형
디자인 패턴

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

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

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

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

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

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


템플릿 메소드 패턴

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

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

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

반응형