-
-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
51 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
|
||
--- | ||
layout: post | ||
title: `정적 팩토리 메서드 패턴` | ||
author: `김택준` | ||
categories: `기술세미나` | ||
banner: | ||
image: `assets/images/post/2023-11-05.webp` | ||
background: "#000" | ||
height: "100vh" | ||
min_height: "38vh" | ||
heading_style: "font-size: 4.25em; font-weight: bold; text-decoration: underline" | ||
tags: [`정적 팩토리 메서드 패턴`, `static`, `factory method pattern`] | ||
--- | ||
|
||
# Static Factory Method Pattern | ||
|
||
--- | ||
|
||
## 정적 팩토리 메서드 패턴이란? | ||
지금까지 객체를 인스턴스화 할 때 직접적으로 생성자를 호출하고 생성했는데, 이와는 반대로 객체 생성 역할을 하는 메서드를 통해 간접적으로 객체 생성을 유도하는 것이 `정적 팩토리 메서드 패턴`이다.<br><br> | ||
조슈아 블로크의 **이펙티브 자바**에서 소개하는 아이템 중에서 첫 번째로 조언 하는것이 '생성자 대신 정적 팩토리 메서드를 고려하라' 인데, 왜 이렇게 한단계 더 거쳐서 정적팩토리 메서드를 통해 객체를 생성하라는 것인가에 대해 그 장점과 단점을 알아보자. | ||
|
||
## 정적 팩토리 메서드의 장점 | ||
### 1. 생성 목적에 따라 네이밍이 가능하다. | ||
지금까지는 다양한 타입의 객체를 생성할 때, 생성 목적에 따라 생성자를 오버로딩하여 구분하고 사용해왔다.<br><br> | ||
이렇게 하면 다른 사람과의 협업에서 개발자가 객체를 초기화 시키고 생성자로 생성할 때 생성자의 인자 순서와 내부 구조를 알고 있어야 목적에 맞게 객체를 생성할 수 있는데, | ||
이렇게 작성했을 때 클래스 이름으로 고정되어있는 탓에 코드의 가독성은 현저하게 떨어질 것이다.<br><br> | ||
따라서, `정적 팩토리 메서드`를 통해 적절한 메서드 네이밍을 해 준다면 객체의 목적이 무엇인가에 대해 한번에 유추할 수 있게 된다.(물론 네이밍 잘해야 함) | ||
|
||
|
||
### 2. 인자에 따라 다른 객체를 반환하도록 분기할 수 있다. | ||
메서드이니 매개변수를 받을수 있을테고, 메서드 블록 내에서 분기문을 통해 여러 자식 타입의 인스턴스를 반환하도록 응용 구성이 가능하다 | ||
|
||
### 3. 객체 생성을 캡슐화 할 수 있다. | ||
생성자를 사용하는 경우 외부에 내부 구조를 드러내야 하는데, `정적 팩토리 메서드`의 경우 간접적으로 호출되기 때문에 외부로부터 숨길 수 있어 캡슐화 할 수 있다는 특징이 있다. | ||
또한, 정보 은닉성을 가지는 동시에 의존성을 제거해 주는 장점도 지니고 있다. | ||
|
||
### 4. 불필요한 객체 생성을 막을 수 있다. | ||
2번과 같이 매개변수가 정해져있는 여러 자식 타입이 있고 그 목적에 맞는 메서드를 사용할 때 반환해야 할 객체만을 생성하기에 불필요한 객체가 생겨날 수 없다. | ||
|
||
## 정적 팩토리 메서드 패턴의 단점 | ||
### 1. 상속을 이용한 확장이 불가능하다. | ||
정적 팩토리 메서드로 클래스를 설계하면 생성자를 private 하게 설정하게 되는데 이 때문에 상속을 이용한 확장이 불가능해진다.<br> | ||
하지만 정적 팩토리 메서드는 상속보단 합성을 사용하게끔 유도한다거나, 불변 객체로 만들고 싶을 때 사용되는 패턴이기에 단점보단 특징에 가까울 수 있다. | ||
|
||
### 2. API 문서의 불편함 | ||
개발자가 임의로 만든 메서드이기에, 무슨 메서드인지 직접 찾아가서 이해해야한다.<br> | ||
따라서 네이밍 컨벤션을 지키고 명확한 목적을 명시해야 한다. | ||
|
||
네이밍 컨벤션 참고 => https://docs.oracle.com/javase%2Ftutorial%2F/datetime/overview/naming.html |