Skip to content

Commit ebb2523

Browse files
committed
[ADD] 정적 팩토리 메서드
1 parent db9d62c commit ebb2523

File tree

1 file changed

+94
-3
lines changed

1 file changed

+94
-3
lines changed
Lines changed: 94 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,94 @@
1-
# 1. 객체의 생성과 소멸
2-
## Item 1: constructors 대신에 static factory methods를 고려하라.
3-
0.0
1+
### Item 1: 생성자 대신에 Static Factory Method 사용을 고려하라.
2+
3+
인스턴스를 제공하는 전통적인 방법으로 생성자를 사용한다.
4+
5+
여기에 인스턴스를 제공하는 또 다른 방법이 있다.
6+
7+
클래스는 public static factory method를 제공할 수 있다.
8+
9+
#### 예시
10+
11+
Boolean 클래스에서의 단순한 예시가 있다.
12+
13+
이 메소드는 boolean 원시값을 Boolean 객체로 바꾸어준다.
14+
15+
```java
16+
public static Boolean valueOf(boolean b) {
17+
return b ? Boolean.TRUE : Boolean.FALSE;
18+
}
19+
```
20+
21+
#### Static Factory Method 사용으로 얻게 되는 이점
22+
23+
- 생성자와 다르게 static factory method는 이름을 가지고 있다.
24+
- 따라서, 반환될 객체가 어떠한 객체인지 쉽게 알 수 있다.
25+
- static factory method는 호출할 때마다 항상 새로운 객체를 만드는 것을 요구하지 않는다.
26+
- 의도하지 않은 중복된 객체가 생기는 것을 피할 수 있다.
27+
- 반환 타입의 하위 타입을 반환 할 수 있다.
28+
- 반환되는 객체의 클래스를 고르는 것에 훌륭한 적응성을 제공해준다.
29+
- 입력 파라미터에 따라 매번 다른 객체를 반환할 수 있다.
30+
31+
- static factory method를 사용할 때 반환할 객체의 클래스는 존재하지 않아도 된다.
32+
33+
----
34+
35+
#### 한계
36+
37+
- public 생성자 혹은 protected 생성자가 없이 static factory method만 존재할 경우, 상속을 할 수 없다.
38+
39+
- static factory method는 프로그래머가 찾기에 어렵다. (확인작업 필요)
40+
41+
- 대중적으로 사용되는 이름들
42+
43+
- from : 형 변환 메소드, 하나의 매개변수를 가지며 인스턴스의 타입에 상응하는 객체를 반환한다.
44+
45+
```java
46+
Date d = Date.from(instant);
47+
```
48+
49+
- of : 집합 메소드, 여러개의 매개변수를 가지고 그것들을 통합한 인스턴스를 반환한다.
50+
51+
```java
52+
Set<Rank> faceCards = EnumSet.of(JACK, QUEEN, KING);
53+
```
54+
55+
- valueOf : from과 of의 자세한 대안.
56+
57+
```java
58+
BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE);
59+
```
60+
61+
- instance | getInstance : 기술된 매개변수로 인스턴스를 반환한다. 하지만, 매개변수와 같은 값을 가진다고 말할 수 없다.
62+
63+
```java
64+
StackWalker luke = StackWalker.getInstance(options);
65+
```
66+
67+
- create | newInstance : instance | getInstance와 비슷하지만, 매개변수와 같은 값을 보장하는 새 인스턴스를 반환한다.
68+
69+
```java
70+
Object newArray = Array.newInstance(classObject, arrayLen);
71+
```
72+
73+
- getType : getInstance와 비슷하지만, factory method가 다른 class를 반환할때 사용된다.
74+
75+
```java
76+
BufferedReader br = Files.newBufferedReader(path);
77+
```
78+
79+
- newType : newInstance와 비슷하지만, factory method가 다른 class를 반환할때 사용한다.
80+
81+
```java
82+
BufferedReader br = Files.newBufferedReader(path);
83+
```
84+
85+
- type : getType과 newType의 간결한 대안이다.
86+
87+
```java
88+
List<Complaint> litany = Collections.list(legacyLitany);
89+
```
90+
91+
92+
93+
-------------------------
94+

0 commit comments

Comments
 (0)