"생성패턴"의 두 판 사이의 차이
rlatpdbs2931 (토론 | 기여) |
잔글 |
||
1번째 줄: | 1번째 줄: | ||
'''생성패턴'''<!--생성패턴--> 은 인스턴스를 만드는 절차를 추상화하는 패턴으로 객체를 생성 / 합성 하는 방법이나 객체의 표현 방법과 시스템을 분리해준다.<ref name="생성패턴">〈[https://seungdols.tistory.com/486 디자인패턴 - 생성패턴]〉, 《seungdols company》, 2015-10-12</ref> | '''생성패턴'''<!--생성패턴--> 은 인스턴스를 만드는 절차를 추상화하는 패턴으로 객체를 생성 / 합성 하는 방법이나 객체의 표현 방법과 시스템을 분리해준다.<ref name="생성패턴">〈[https://seungdols.tistory.com/486 디자인패턴 - 생성패턴]〉, 《seungdols company》, 2015-10-12</ref> | ||
− | |||
== 개요 == | == 개요 == | ||
7번째 줄: | 6번째 줄: | ||
== 특징 == | == 특징 == | ||
생성 패턴 시스템이 어떤 구체 클래스를 사용하는지에 대한 정보를 캡슐화한다. 생성 패턴은 이들 클래스의 인스턴트들이 어떻게 만들고 어떻게 서로 맞붙는지에 대한 부분을 완전히 가려준다.<ref>〈[https://tadis.tistory.com/entry/4 생성패턴이란]〉,《TARDIS`s Note》, 2013-03-38 </ref> | 생성 패턴 시스템이 어떤 구체 클래스를 사용하는지에 대한 정보를 캡슐화한다. 생성 패턴은 이들 클래스의 인스턴트들이 어떻게 만들고 어떻게 서로 맞붙는지에 대한 부분을 완전히 가려준다.<ref>〈[https://tadis.tistory.com/entry/4 생성패턴이란]〉,《TARDIS`s Note》, 2013-03-38 </ref> | ||
− | |||
− | |||
=== 클래스 생성패턴 === | === 클래스 생성패턴 === | ||
클래스생성패턴(상속) : 팩토리 메서드(Factory Method)패턴 | 클래스생성패턴(상속) : 팩토리 메서드(Factory Method)패턴 | ||
− | |||
− | |||
==== 팩토리 메서드패턴 ==== | ==== 팩토리 메서드패턴 ==== | ||
19번째 줄: | 14번째 줄: | ||
* 목적 : 객체를 생성하기 위해 인터페이스를 정의하지만 어떤 클래스의 인스턴스를 생성 할지에 대한 결정은 서브클래스가 내리도록 하는것이다.<ref name="생성패턴종류">〈[https://blog.naver.com/hsoojy_/221880917549 - 생성패턴종류]〉, 《전이》, 2020-03-30</ref> | * 목적 : 객체를 생성하기 위해 인터페이스를 정의하지만 어떤 클래스의 인스턴스를 생성 할지에 대한 결정은 서브클래스가 내리도록 하는것이다.<ref name="생성패턴종류">〈[https://blog.naver.com/hsoojy_/221880917549 - 생성패턴종류]〉, 《전이》, 2020-03-30</ref> | ||
− | |||
[[파일:팩토리메서드.png|500픽셀|섬네일|가운데|팩토리메서드 디자인패턴]] | [[파일:팩토리메서드.png|500픽셀|섬네일|가운데|팩토리메서드 디자인패턴]] | ||
25번째 줄: | 19번째 줄: | ||
=== 객체 생성패턴 === | === 객체 생성패턴 === | ||
객체생성패턴 (위임) : 추상팩토리패턴(Abstract Factory), 빌더패턴(Builder), 프로토타입패턴(Prototype), 싱클톤패턴(Singleton) | 객체생성패턴 (위임) : 추상팩토리패턴(Abstract Factory), 빌더패턴(Builder), 프로토타입패턴(Prototype), 싱클톤패턴(Singleton) | ||
− | |||
− | |||
==== 추상 팩토리패턴 ==== | ==== 추상 팩토리패턴 ==== | ||
32번째 줄: | 24번째 줄: | ||
* 목적 : 객체 생성을 추상화하여 이를 사용하는 모듈과 독립적으로 인터페이스를 정의하는 것이다. 인스턴스를 생성하기 위한 프레임워크와 실제로 인스턴스를 생성하는 클래스를 분리하여 생각해야 한다.<ref name="생성패턴종류" /> | * 목적 : 객체 생성을 추상화하여 이를 사용하는 모듈과 독립적으로 인터페이스를 정의하는 것이다. 인스턴스를 생성하기 위한 프레임워크와 실제로 인스턴스를 생성하는 클래스를 분리하여 생각해야 한다.<ref name="생성패턴종류" /> | ||
− | |||
[[파일:추상팩토리.png|500픽셀|섬네일|가운데|추상팩토리 디자인패턴]] | [[파일:추상팩토리.png|500픽셀|섬네일|가운데|추상팩토리 디자인패턴]] | ||
− | |||
==== 빌더패턴 ==== | ==== 빌더패턴 ==== | ||
50번째 줄: | 40번째 줄: | ||
|width ="350px"| '''*''' 객체 생성은 쉬우나, 객체를 구성하는 부분은 추가가 어려운 점이 있다. <br> '''*''' 생성되는 구성을 명확히 하여 추가하거나 수정해야하는 부분을 최소화 해야한다. | |width ="350px"| '''*''' 객체 생성은 쉬우나, 객체를 구성하는 부분은 추가가 어려운 점이 있다. <br> '''*''' 생성되는 구성을 명확히 하여 추가하거나 수정해야하는 부분을 최소화 해야한다. | ||
|- | |- | ||
− | |} | + | |} |
− | |||
==== 프로토타입패턴 ==== | ==== 프로토타입패턴 ==== | ||
프로토타입패턴(Prototype)은 인스턴스를 생성할때 사용하는 패턴으로 원본을 만들어놓고, 미리 만들어진 객체를 복사하여 사용하는 패턴으로 다수의 객체 생성시에 발생되는 객체의 생성 비용을 효과적으로 줄일 수 있다.<ref name="생성패턴종류" /> | 프로토타입패턴(Prototype)은 인스턴스를 생성할때 사용하는 패턴으로 원본을 만들어놓고, 미리 만들어진 객체를 복사하여 사용하는 패턴으로 다수의 객체 생성시에 발생되는 객체의 생성 비용을 효과적으로 줄일 수 있다.<ref name="생성패턴종류" /> | ||
− | |||
[[파일:프로토타입.png|500픽셀|섬네일|가운데|빌더 디자인패턴]] | [[파일:프로토타입.png|500픽셀|섬네일|가운데|빌더 디자인패턴]] | ||
− | |||
− | |||
==== 싱글톤패턴 ==== | ==== 싱글톤패턴 ==== | ||
싱클톤패턴(Singleton)은 인스턴스가 프로그램 내에서 오직 하나만 생성되는 것을 보장하고, 어디에서든 이 인스턴스에 접근할 수 있도록 하는 방식이다.<ref name="생성패턴종류" /> | 싱클톤패턴(Singleton)은 인스턴스가 프로그램 내에서 오직 하나만 생성되는 것을 보장하고, 어디에서든 이 인스턴스에 접근할 수 있도록 하는 방식이다.<ref name="생성패턴종류" /> | ||
− | :{| cellpadding="10" cellspacing="3" border="1"" | + | :{|cellpadding="10" cellspacing="3" border="1"" |
|- | |- | ||
!width ="350px"| 장점 | !width ="350px"| 장점 | ||
73번째 줄: | 59번째 줄: | ||
|- | |- | ||
|} | |} | ||
− | |||
[[파일:싱글톤.png|500픽셀|섬네일|가운데|싱글톤 디자인패턴]] | [[파일:싱글톤.png|500픽셀|섬네일|가운데|싱글톤 디자인패턴]] | ||
− | |||
{{각주}} | {{각주}} | ||
− | |||
== 참고자료 == | == 참고자료 == | ||
85번째 줄: | 68번째 줄: | ||
* 디자인패턴:생성패턴종류〈[https://blog.naver.com/bluenara/221678877997 생성패턴종류]〉,《잠꾸러기》, 2019-10-15 | * 디자인패턴:생성패턴종류〈[https://blog.naver.com/bluenara/221678877997 생성패턴종류]〉,《잠꾸러기》, 2019-10-15 | ||
* 생성패턴종류〈[https://blog.naver.com/hsoojy_/221880917549 - 생성패턴종류]〉, 《전이》, 2020-03-30</ref> | * 생성패턴종류〈[https://blog.naver.com/hsoojy_/221880917549 - 생성패턴종류]〉, 《전이》, 2020-03-30</ref> | ||
− | |||
== 같이 보기 == | == 같이 보기 == |
2020년 8월 15일 (토) 01:55 판
생성패턴 은 인스턴스를 만드는 절차를 추상화하는 패턴으로 객체를 생성 / 합성 하는 방법이나 객체의 표현 방법과 시스템을 분리해준다.[1]
목차
개요
클래스 생성 패턴은 인스턴스로 만들 클래스를 제한하거나 혹은 쉽게 선언하기 위한 패턴으로 프로그램 성능에 영향을 미친다. 객체 생성패턴은 인스턴스화 작업을 다른 객체에게 떠넘길 수도 있다.[1]
특징
생성 패턴 시스템이 어떤 구체 클래스를 사용하는지에 대한 정보를 캡슐화한다. 생성 패턴은 이들 클래스의 인스턴트들이 어떻게 만들고 어떻게 서로 맞붙는지에 대한 부분을 완전히 가려준다.[2]
클래스 생성패턴
클래스생성패턴(상속) : 팩토리 메서드(Factory Method)패턴
팩토리 메서드패턴
팩토리 메서드패턴(Factory Method)은 객체 생성을 직접하지 않고, 팩토리라는 클래스에 위임하여 팩토리 클래스가 객체를 생성하도록 하는 방식이며 객체를 만들어 반환하는 함수를 생성자 대신 제공하여 초기화 과정을 외부에서 보지 못하게 숨기고 반환 타입을 제어하는 방법이다.[1]
- 목적 : 객체를 생성하기 위해 인터페이스를 정의하지만 어떤 클래스의 인스턴스를 생성 할지에 대한 결정은 서브클래스가 내리도록 하는것이다.[3]
객체 생성패턴
객체생성패턴 (위임) : 추상팩토리패턴(Abstract Factory), 빌더패턴(Builder), 프로토타입패턴(Prototype), 싱클톤패턴(Singleton)
추상 팩토리패턴
추상팩토리패턴(Abstract Factory)은 인터페이스를 이용하여 서로 연관된 객체를 구상클래스를 지정하지 않고도 생성할수 있다. 즉 연관된 서브 클래스를 그룹화 할 수 있고 자유롭게 교체할 수 있는 패턴이다.
- 목적 : 객체 생성을 추상화하여 이를 사용하는 모듈과 독립적으로 인터페이스를 정의하는 것이다. 인스턴스를 생성하기 위한 프레임워크와 실제로 인스턴스를 생성하는 클래스를 분리하여 생각해야 한다.[3]
빌더패턴
빌더패턴(Builder)은 복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공할 수 있도록 하는 것이다.[3]
- 목적 : 클래스와 사용 대상의 결합도를 낮추고 생성자에 전달하는 인수에 의미를 부여한다.[3]
장점 단점 * 유동적인 필드 값 세팅이 가능하다.
* 객체를 생성하는 부분과 표현하고 구성하는 부분을 분리 시켜 결합도를 낮춰준다.
* 객체를 한번에 생성하는 것이 아니라, 부분 생성 후 최종 결과를 얻어가는 방식으로 생성 과정을 상세히 볼 수 있다.* 객체 생성은 쉬우나, 객체를 구성하는 부분은 추가가 어려운 점이 있다.
* 생성되는 구성을 명확히 하여 추가하거나 수정해야하는 부분을 최소화 해야한다.
프로토타입패턴
프로토타입패턴(Prototype)은 인스턴스를 생성할때 사용하는 패턴으로 원본을 만들어놓고, 미리 만들어진 객체를 복사하여 사용하는 패턴으로 다수의 객체 생성시에 발생되는 객체의 생성 비용을 효과적으로 줄일 수 있다.[3]
싱글톤패턴
싱클톤패턴(Singleton)은 인스턴스가 프로그램 내에서 오직 하나만 생성되는 것을 보장하고, 어디에서든 이 인스턴스에 접근할 수 있도록 하는 방식이다.[3]
장점 단점 * 한번의 생성으로 인스턴스를 사용하기 때문에 메모리 낭비를 방지한다.
* 만들어진 인스턴스는 전역 인스턴스 이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.
* 객객체 로딩 시간이 줄어 성능이 좋아진다.* 만들어진 인스턴스가 많은 일을 하거나, 많은 데이터를 공유 시킬 경우 다른 인스턴스 간에 결합도가 높아져 수정 및 테스트가 어렵다.
* 멀티쓰레드 환경에서 동기화 처리를 하지않으면 인스턴스가 여러개 생성된다.
각주
참고자료
- 생성패턴〈디자인패턴 - 생성패턴〉,《seungdols company》, 2015-10-12
- 생성패턴이란〈생성패턴이란〉,《TARDIS`s Note》, 2013-03-38
- 디자인패턴:생성패턴종류〈생성패턴종류〉,《잠꾸러기》, 2019-10-15
- 생성패턴종류〈- 생성패턴종류〉, 《전이》, 2020-03-30</ref>
같이 보기