토비의 스프링을 읽으면서 [템플릿 메소드 패턴], [팩토리 메소드 패턴] 디자인 패턴의 대한 설명이 나와서 정리를 하려한다.
디자인 패턴이란?
간단하게 설명하자면, 디자인 패턴이란 소프트웨어 설계 시 특정 상황에서 자주 만나는 문제를 해결하기 위해 사용할 수 있는 재사용 가능한 솔루션을 말한다.
디자인 패턴은 객제치향 언어인 자바를 사용하는 개발자라면 반드시 공부해야할 주제다!!
템플릿 메소드 패턴
객체지향의 장점인 상속을 통해 슈퍼클래스의 기능을 확장하고자 할때 사용하는 가장 대표적인 방법이다. 변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장할 기능은 서브클래스에서 만들도록 한다.
예를 들어 돈을 넣어서 음료를 뽑는다는 Class가 있다고 생각해보자.
템플릿 메소드 패턴을 사용하지 않는다면 음료 별로 주문하는 클래스가 있을 것이다.
템플릿 메소드 패턴을 이용해서 상속을 통해 슈퍼클래스의 기능을 확장해보고 중복코드는 한곳에 모으자.
Order 라는 추상클래스를 만든 후 drink() 메소드를 서브 클래스에서 구현해보자.
Order 추상클래스를 서브클래스가 상속받아서 사용하므로 음료 종류에 대해 변경 할 수 있고 손쉽게 확장된다고 할 수있다.
서브클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법을 디자인 패턴에서 템플릿 메소드 패턴이라고 한다.
팩토리 메소드 패턴
팩토리 메소드 패턴도 템플릿 메소드 패턴과 마찬가지로 상속을 통해 기능을 확장하게 하는 패턴이다. 그래서 구조도 비슷하다.
객체 생성 처리를 서브클래스로 분리해 처리하는 패턴 소스를 통해 확인해보자.
Drink 의 추상클래스는 info(정보)를 구현해야하는 추상 메소드가 있다.
이번에는 음료의 정보를 재정의한 Coke, Coffe가 있다고 가정하자.
DrinkFactory클래스에서는 Drink 타입을 가진 create() 메소드가 존재한다.
input 값을 받아 사용자가 요청한 값에 따른 객체를 리턴시켜준다.
DrinkService 에서는 주문을 받아 해당주문 정보를 가져올 수 있다.
팩토리 메소드 패턴을 사용하는 이유는 클래스간의 결합도를 낮추기 위함이다. 클래스의 변경이 생겼을때 어떤 변경점이 생기는가에 대한 문제를 줄이기위한 기법이다.
사용자가 order("음료명") 만 적으면 다른 클래스의 수정은 생기지 않고 원하는 객체를 리턴시켜줄 수 있다.
직접 객체를 생성하는 것을 방지하고 서브클래스에게 위임함으로 효율적인 코드를 제어할 수 있고 의존성을 제거할 수 있다.
본 내용은 초보개발자가 작성한 내용이므로 잘못된 예제설명일 수 있습니다ㅠㅠ
틀린점이 있다면 피드백주시면 수정하겠습니다!!
참고자료