소프트웨어 개발/Design Pattern

⑦ 디자인 패턴(Design Pattern) - Factory

늘근이 2015. 8. 15. 09:56

팩토리 디자인 패턴은 자바에서 참 많이 구경할수 있는 대표적인 패턴이다. 


팩토리는 내부적으로 상품을 하나 찍어내어 전달해주는 역할을 한다. 보통, new를 통해 인스턴스를 생성하는 경우가 대부분이지만, 팩토리에서는 Factory 혹은 이를 구현한 concrete Factory에서 인스턴스를 넘겨주게 된다. 대표적인 팩토리 패턴을 따르는 애들은 사실 Calendar이다. getInstance()를 통해서 객체를 생성하게 되는데 (보통은 create()메서드로 관습화 되어있는데, 칼렌더에서의 getInstance()는 너무 자주쓰다보니 이게 대체로 싱글톤 패턴에서 쓰이는 메서드인것과 혼동이 올때가 있다.) 이는 계속 칼렌다를 만들어 찍어내서 보내준다. 


new를 쓰는 방법과 다른점은, 추상클래스나 인터페이스를 이용하여 추상화 수준을 높인다는 것이다. 우리가 Calendar를 이용할때는 이것이 그레고리안인지, 머시기인지 별로 알필요가 없지만, sysout으로 찍어보면 그레고리안 칼렌다이다. 왜 이렇게 사용자들을 더 헷갈리게 만들었을까? 사실 달력 체계가 바뀌었을 경우 (이럴일은 많이 없겠지만..) 모든 칼렌더를 쓰는 놈들에게 접근해서


Calendar c = new GragorianCalendar();


이 메서드를 다음과 같이 수정해야한다.


Calendar c = new NextGenerationCalendar();


이 칼렌다는 어마어마하게 쓰는 용도가 많을 것이고 이를 다 뜯어고칠수가 없는 노릇이다. 

따라서, 


Calendar c = Calendar.getInstace() //누누히 말하지만 create() 메서드로 이름이 바뀌는게 옳은 방향이다.


이러한식으로 객체생성이 이루어지고 있으면, Calendar의 팩토리 부분만 살짝 바꿔주면 적용받는 달력이 상당히 많은것이다.


물론 문제는 이렇게 살짝 바꿔줌에 따라 하위단들이 모조리 바뀌면서 프로그램이 와장창될수도 있겠지만 뭐 어쩔수는 없다.