생성패턴은 인스턴스를 만드는 절차를 추상화하는 패턴으로 객체를 생성 합성하는 방법이나 객체의 표현 방법과 시스템을 분리해준다.[1]
클래스 생성패턴은 인스턴스로 만들 클래스를 제한하거나 혹은 쉽게 선언하기 위한 패턴으로 프로그램 성능에 영향을 미친다. 객체 생성패턴은 인스턴스화 작업을 다른 객체에게 떠넘길 수도 있다.[1]
생성패턴 시스템이 어떤 구체 클래스를 사용하는지에 대한 정보를 캡슐화한다. 생성패턴은 이들 클래스의 인스턴트들이 어떻게 만들고 어떻게 서로 맞붙는지에 대한 부분을 완전히 가려준다.[2]
클래스 생성패턴[편집]
클래스생성패턴(상속) : 팩토리 메서드(Factory Method)패턴
팩토리 메서드패턴[편집]
팩토리 메서드패턴(Factory Method)은 객체 생성을 직접하지 않고, 팩토리라는 클래스에 위임하여 팩토리 클래스가 객체를 생성하도록 하는 방식이며 객체를 만들어 반환하는 함수를 생성자 대신 제공하여 초기화 과정을 외부에서 보지 못하게 숨기고 반환 타입을 제어하는 방법이다.[1]
- 목적 : 객체를 생성하기 위해 인터페이스를 정의하지만 어떤 클래스의 인스턴스를 생성 할지에 대한 결정은 서브클래스가 내리도록 하는것이다.[3]
객체 생성패턴[편집]
객체생성패턴 (위임) : 추상팩토리패턴(Abstract Factory), 빌더패턴(Builder), 프로토타입패턴(Prototype), 싱클톤패턴(Singleton)
추상 팩토리패턴[편집]
추상팩토리패턴(Abstract Factory)은 인터페이스를 이용하여 서로 연관된 객체를 구상클래스를 지정하지 않고도 생성할수 있다. 즉 연관된 서브 클래스를 그룹화 할 수 있고 자유롭게 교체할 수 있는 패턴이다.
- 목적 : 객체 생성을 추상화하여 이를 사용하는 모듈과 독립적으로 인터페이스를 정의하는 것이다. 인스턴스를 생성하기 위한 프레임워크와 실제로 인스턴스를 생성하는 클래스를 분리하여 생각해야 한다.[3]
빌더패턴[편집]
빌더패턴(Builder)은 복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공할 수 있도록 하는 것이다.[3]
- 목적 : 클래스와 사용 대상의 결합도를 낮추고 생성자에 전달하는 인수에 의미를 부여한다.[3]
장점
|
단점
|
* 유동적인 필드 값 세팅이 가능하다. * 객체를 생성하는 부분과 표현하고 구성하는 부분을 분리 시켜 결합도를 낮춰준다. * 객체를 한번에 생성하는 것이 아니라, 부분 생성 후 최종 결과를 얻어가는 방식으로 생성 과정을 상세히 볼 수 있다.
|
* 객체 생성은 쉬우나, 객체를 구성하는 부분은 추가가 어려운 점이 있다. * 생성되는 구성을 명확히 하여 추가하거나 수정해야하는 부분을 최소화 해야한다.
|
프로토타입 패턴[편집]
프로토타입 패턴(prototype pattern)은 인스턴스를 생성할때 사용하는 패턴으로 원본을 만들어놓고, 미리 만들어진 객체를 복사하여 사용하는 패턴으로 다수의 객체 생성시에 발생되는 객체의 생성 비용을 효과적으로 줄일 수 있다.[3]
싱글톤패턴[편집]
싱글톤패턴(singleton pattern)은 인스턴스가 프로그램 내에서 오직 하나만 생성되는 것을 보장하고, 어디에서든 이 인스턴스에 접근할 수 있도록 하는 방식이다.[3]
장점
|
단점
|
* 한번의 생성으로 인스턴스를 사용하기 때문에 메모리 낭비를 방지한다. * 만들어진 인스턴스는 전역 인스턴스 이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다. * 객객체 로딩 시간이 줄어 성능이 좋아진다.
|
* 만들어진 인스턴스가 많은 일을 하거나, 많은 데이터를 공유 시킬 경우 다른 인스턴스 간에 결합도가 높아져 수정 및 테스트가 어렵다. * 멀티쓰레드 환경에서 동기화 처리를 하지않으면 인스턴스가 여러개 생성된다.
|
참고자료[편집]
- 생성패턴〈디자인패턴 - 생성패턴〉,《seungdols company》, 2015-10-12
- 생성패턴이란〈생성패턴이란〉,《TARDIS`s Note》, 2013-03-38
- 디자인패턴:생성패턴 종류〈생성패턴종류〉,《잠꾸러기》, 2019-10-15
- 생성패턴 종류〈- 생성패턴종류〉, 《전이》, 2020-03-30</ref>
같이 보기[편집]
![검수요청.png](/images/b/bf/%EA%B2%80%EC%88%98%EC%9A%94%EC%B2%AD.png) 이 생성패턴 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.
|
개발 : 프로그래밍 □■⊕, 소프트웨어, 데이터, 솔루션, 보안, 하드웨어, 컴퓨터, 사무자동화, 인터넷, 모바일, 사물인터넷, 게임, 메타버스, 디자인
|
|
프로그래밍 언어
|
ASP • C 언어 • C++ • C# • CSS • D 언어 • HTML • HTML5 • JSP • PHP • R • XHTML • XML • XSLT • 고(Go) • 고급언어 • 기계어 • 델파이 • 러스트 • 루비 • 루아 • 리액트 • 리퀴디티 • 무브 • 미켈슨 • 베이직 • 브이비스크립트 • 비주얼 C++ • 비주얼베이직(VB) • 비주얼베이직닷넷(VB.NET) • 솔리디티 • 스몰토크 • 스위프트 언어 • 스칼라 • 스크립트 언어 • 알골 • 어셈블리 • 언리얼스크립트 • 얼랭 • 에이잭스(Ajax) • 엠에프씨(MFC) • 오브젝티브-C • 오브젝트 파스칼 • 오카멜 • 웹어셈블리(WASM) • 이와즘(eWASM) • 자바 • 자바스크립트 • 저급언어 • 제이슨(JSON) • 제이쿼리(jQuery) • 카멜 • 코볼 • 코틀린 • 콜드퓨전 • 타입스크립트 • 파스칼 • 파워스크립트 • 파이썬 • 펄(Perl) • 포트란 • 프로씨(Pro-C) • 피엘에스큐엘(PL/SQL) • 피엘원(PL/I) • 하스켈
|
|
개발방법론
|
CBD 개발방법론 • EA • 구조적 개발방법론 • 객체지향 개발방법론 • 라이브러리 • 람다 아키텍처 • 모듈 • 모듈화 • 벤치마킹 • 소프트웨어 개발방법론 • 스크럼 • 스프린트 • 아키텍처 • 아키텍트 • 애자일 • 웹개발방법론 • 정보공학 개발방법론 • 컴포넌트 • 테일러링 • 템플릿 • 폭포수 모델 • 프로젝트 • 프로토타입 • 피드백
|
|
코딩
|
EUC-KR • UTF-8 • 값 • 글루웨어 • 디버깅 • 디코딩 • 마크업 • 버그 • 부트스트랩 • 세이브포인트 • 소스코드 • 시큐어코딩 • 아스키 • 액티브엑스 • 오픈소스 • 유니코드 • 인코딩 • 재컴파일 • 주석 • 컴파일 • 컴퓨터 프로그램 • 코드 • 코딩 • 태그 • 테스트 • 테이블 • 텍스트 • 파싱 • 퍼블리싱 • 퓨니코드 • 하드코딩 • 하이퍼링크 • 하이퍼텍스트
|
|
프로그래밍
|
C 명령어 • 객체 • 객체지향 • 객체지향 프로그래밍 • 거짓 • 관계연산자 • 기본형 변수 • 널 • 논리 • 논리연산 • 논리연산자 • 다중상속 • 다형성 • 대입 • 대입문 • 대입연산자 • 더블 • 도스 명령어 • 디폴트 • 레지스터변수 • 루프 • 리눅스 명령어 • 리턴 • 메모리 주소 • 메소드 • 멤버 • 명령문 • 명령어 • 무한루프 • 문자 • 문자열 • 바이트 • 반복문 • 배열 • 변수 • 분기 • 분기문 • 불린 • 브레이크 • 비교연산자 • 비트연산자 • 산술연산자 • 상속 • 상수 • 생성자 • 선언 • 선언문 • 설정자 • 속성 • 스위치 • 스태틱 • 시프트연산자 • 실행 • 실행문 • 어노테이션 • 에코 • 역참조 • 연산 • 연산문 • 연산자 • 오버로딩 • 오버라이딩 • 외부변수 • 윈도우 명령어 • 유닉스 명령어 • 인스턴스 • 인스트럭션 • 인클루드 • 인터페이스 • 임포트 • 입력 • 입력문 • 입출력 • 입출력문 • 자료형(데이터 타입) • 자바 명령어 • 자바 예약어 • 자바 컬렉션 • 전역변수 • 접근자 • 접근제어자 • 정보은닉 • 정수형 • 정적변수 • 제어 • 제어문 • 제어자 • 조건 • 조건문 • 조건연산자 • 주소 • 증감연산자 • 지역변수 • 참 • 참조 • 참조변수 • 초기화 • 추상메소드 • 추상클래스 • 추상화 • 출력 • 출력문 • 캡슐화 • 케이스 • 클래스 • 파라미터(매개변수) • 파이널 • 패키지 • 퍼블릭 • 포인터 • 프라이빗 • 프로텍티드 • 필드(멤버변수) • 함수 • 환경변수
|
|
명령어
|
abstract • array • boolean • break • byte • case • char • continue • default • double • do while • echo • elif • else • else if • false • final • float • for • gosub • goto • if • if else • import • include • int • join • long • long long • null • print • printf • println • private • protected • public • return • scanf • short • stdio.h • static • string • switch • temp • then • true • unsigned • void • while
|
|
디자인패턴
|
구조패턴 • 동시성패턴 • 동시실행패턴 • 모델-뷰-컨트롤러 패턴 • 상태패턴 • 생성패턴 • 싱글톤패턴 • 아키텍처패턴 • 전략패턴 • 커맨드패턴 • 행동패턴
|
|
프로그래밍 인물
|
귀도 반 로썸 • 그레이스 머레이 호퍼 • 니클라우스 비르트 • 댄 브릭클린 • 더그 커팅 • 데니스 리치 • 리누스 토르발스 • 리처드 그린블라트 • 마거릿 해밀턴 • 마크 앤드리슨 • 빈트 서프 • 빌 게이츠 • 빌 조이 • 스티브 잡스 • 에이다 러브레이스 • 제임스 고슬링 • 척 벤턴 • 켄 톰슨 • 팀 패터슨
|
|
위키 : 자동차, 교통, 지역, 지도, 산업, 기업, 단체, 업무, 생활, 쇼핑, 블록체인, 암호화폐, 인공지능, 개발, 인물, 행사, 일반
|
|