Post

⛓️ Java Design-Pattern XXβ…  - Flyweight

⛓️ Java Design-Pattern XXβ…  - Flyweight

πŸ“— γ€ŽJAVA μ–Έμ–΄λ‘œ λ°°μš°λŠ” λ””μžμΈ νŒ¨ν„΄ : μ‰½κ²Œ λ°°μš°λŠ” GoF의 23κ°€μ§€ λ””μžμΈ νŒ¨ν„΄γ€λ₯Ό 읽고 μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

Flyweight νŒ¨ν„΄μ΄λž€?

  • Flyweightλž€ λ³΅μ‹±μ—μ„œ κ°€μž₯ κ°€λ²Όμš΄ 체급인 ν”ŒλΌμ΄κΈ‰μ„ λ‚˜νƒ€λ‚Έλ‹€.
  • 즉, 이 λ””μžμΈ νŒ¨ν„΄μ€ 객체λ₯Ό κ°€λ³κ²Œ λ§Œλ“€κΈ° μœ„ν•œ 것이닀.
  • μ—¬κΈ°μ„œ λ§ν•˜λŠ” λ¬΄κ²ŒλŠ” λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ μ˜λ―Έν•œλ‹€.
  • Javaμ—μ„œλŠ” new ν‚€μ›Œλ“œλ₯Ό 톡해 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.
  • κ·ΈλŸ¬λ‚˜ νŠΉμ • 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ 많이 ν•„μš”ν•΄μ„œ newλ₯Ό μž”λœ© μ‚¬μš©ν•˜λ©΄ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ 컀진닀.
  • Flyweight νŒ¨ν„΄μ—μ„œ μ‚¬μš©ν•˜λŠ” 기법을 ν•œ μ€„λ‘œ μš”μ•½ν•˜λ©΄, β€˜μΈμŠ€ν„΄μŠ€λ₯Ό μ΅œλŒ€ν•œ κ³΅μœ ν•˜κ³  쓸데없이 newν•˜μ§€ μ•ŠλŠ” 것’이닀.
  • μΈμŠ€ν„΄μŠ€κ°€ ν•„μš”ν•  λ•Œ 항상 new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, 이미 λ§Œλ“€μ–΄μ§„ μΈμŠ€ν„΄μŠ€λ₯Ό μ΄μš©ν•  수 μžˆλ‹€λ©΄ 그것을 κ³΅μœ ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 것이닀.

예제 ν”„λ‘œκ·Έλž¨

  • 무거운 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“œλŠ” 클래슀둜 큰 문자λ₯Ό ν‘œν˜„ν•˜λŠ” 예제 ν”„λ‘œκ·Έλž¨μ΄λ‹€.
  • 큰 λ¬ΈμžλŠ” μž‘μ€ 문자λ₯Ό λͺ¨μ•„μ„œ λ§Œλ“ λ‹€.
  • BigCharλŠ” 큰 문자λ₯Ό ν‘œν˜„ν•˜λŠ” 클래슀둜, λ©”λͺ¨λ¦¬ μ†ŒλΉ„λ₯Ό 쀄이기 μœ„ν•΄ ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€λ₯Ό κ³΅μœ ν•˜λŠ” 것이 관건이닀.
  • ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€κ°€ 이미 μ‘΄μž¬ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό κ΄€λ¦¬ν•˜λ„λ‘ java.util.HashMap을 μ‚¬μš©ν•œλ‹€.

숫자 파일

....######......
..##......##....
..##......##....
....######......
..##......##....
..##......##....
....######......
................
  • 10 미만의 μˆ«μžμ™€ β€˜-β€˜ κΈ°ν˜Έμ— λŒ€ν•œ 파일이 μ‘΄μž¬ν•œλ‹€.
  • 예λ₯Ό λ“€λ©΄ μœ„ νŒŒμΌμ€ big8.txt이닀.

BigChar 클래슀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class BigChar {
	// 문자의 이름
	private char charname;
	
	// 큰 문자λ₯Ό ν‘œν˜„ν•˜λŠ” λ¬Έμžμ—΄('#' '.' '\n'으둜 이루어진 μ—΄)
	private String fontdata;
	
	// μƒμ„±μž
	public BigChar(char charname) {
		this.charname = charname;
		try {
			String filename = "big" + charname + ".txt";
			StringBuilder sb = new StringBuilder();
			
			for (String line: Files.readAllLines(Path.of(filename))) {
				sb.append(line);
				sb.append("\n");
			}
			
			this.fontdata = sb.toString();
		} catch (IOException e) {
			this.fontdata = charname + "?";
		}
	}
	
	// 큰 문자λ₯Ό ν‘œμ‹œν•œλ‹€
	public void print() {
		System.out.print(fontdata);
	}
}
  • 큰 문자λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν΄λž˜μŠ€μ΄λ‹€.
  • μƒμ„±λœ λ¬Έμžμ—΄μ€ fontdata ν•„λ“œμ— μ €μž₯ν•œλ‹€.

BigCharFactory 클래슀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.HashMap;
import java.util.Map;

public class BigCharFactory {
	/* 이미 λ§Œλ“  BigChar μΈμŠ€ν„΄μŠ€λ₯Ό 관리 */
	private Map<String,BigChar> pool = new HashMap<>();
	
	/* Singleton νŒ¨ν„΄ */
	private static BigCharFactory singleton = new BigCharFactory();
	
	/* μƒμ„±μž */
	private BigCharFactory() { }
	
	/* μœ μΌν•œ μΈμŠ€ν„΄μŠ€λ₯Ό μ–»λŠ”λ‹€ */
	public static BigCharFactory getInstance() {
		return singleton;
	}
	
	/* BigChar μΈμŠ€ν„΄μŠ€ 생성(곡유) */
	public synchronized BigChar getBigChar(char charname) {
		BigChar bc = pool.get(String.valueOf(charname));
		
		if (bc == null) {
			// μ—¬κΈ°μ„œ BigChar μΈμŠ€ν„΄μŠ€λ₯Ό 생성
			bc = new BigChar(charname);
			pool.put(String.valueOf(charname), bc);
		}
		
		return bc;
	}
}
  • BigChar의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“œλŠ” 곡μž₯이닀.
  • pool ν•„λ“œλŠ” BigChar의 μΈμŠ€ν„΄μŠ€λ₯Ό κ΄€λ¦¬ν•œλ‹€.
  • 즉, BigCharFactory의 poolμ—λŠ” 이미 λ§Œλ“€μ–΄μ§„ BigChar μΈμŠ€ν„΄μŠ€κ°€ λͺ¨μ—¬μžˆλ‹€.
  • κ°€λ Ή 문자 β€˜3’에 λŒ€μ‘ν•˜λŠ” BigCharλ₯Ό μ–»κ³  싢을 경우 β€œ3β€μ΄λΌλŠ” λ¬Έμžμ—΄μ΄ ν‚€κ°€ 되고, 파일 big3.txtλ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§€λŠ” BigChar μΈμŠ€ν„΄μŠ€κ°€ 값이 λœλ‹€.
  • BigCharFactory ν΄λž˜μŠ€λŠ” Singleton νŒ¨ν„΄μ„ μ‚¬μš©ν•΄ κ΅¬ν˜„ν–ˆλ‹€.
  • ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€λŠ” ν•˜λ‚˜λ§Œ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • getBigChar() λ©”μ„œλ“œλŠ” Flyweight νŒ¨ν„΄μ˜ 쀑심이 λ˜λŠ” λ©”μ„œλ“œμ΄λ‹€.
  • 이 λ©”μ„œλ“œλŠ” μ£Όμ–΄μ§„ μΈμˆ˜μ— ν•΄λ‹Ήν•˜λŠ” BigChar μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“ λ‹€.
  • 단, 이미 같은 λ¬Έμžμ— ν•΄λ‹Ήν•˜λŠ” μΈμŠ€ν„΄μŠ€κ°€ μ‘΄μž¬ν•œλ‹€λ©΄, μƒˆλ‘œ λ§Œλ“€μ§€λŠ” μ•ŠλŠ”λ‹€.
  • getBigChar() λ©”μ„œλ“œκ°€ syncronized둜 λ˜μ–΄ μžˆλŠ” μ΄μœ λŠ” λ©€ν‹° μ“°λ ˆλ“œ ν™˜κ²½μ—μ„œ ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μ“°λ ˆλ“œλ§Œ 이 λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜λ„λ‘ κ°•μ œν•˜κΈ° μœ„ν•¨μ΄λ‹€.

BigString 클래슀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class BigString {
	/* '큰 문자'의 λ°°μ—΄ */
	private BigChar[] bigchars;
	
	/* μƒμ„±μž */
	public BigString(String string) {
		BigCharFactory factory = BigCharFactory.getInstance();
		bigchars = new BigChar[string.length()];
		
		for (int i = 0; i < bigchars.length; i++) {
			bigchars[i] = factory.getBigChar(string.charAt(i));
		}
	}
	
	/* ν‘œμ‹œ */
	public void print() {
		for (BigChar bc: bigchars) {
			bc.print();
		}
	}
}
  • BigCharλ₯Ό λͺ¨μ€ 큰 λ¬Έμžμ—΄ ν΄λž˜μŠ€μ΄λ‹€.
  • bigchars ν•„λ“œλŠ” BigChar의 배열이며 BigChar의 μΈμŠ€ν„΄μŠ€λ₯Ό μ €μž₯ν•œλ‹€.
  • μƒμ„±μžμ˜ for문을 보면 getBigChar() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄ μž‘μ„±λ˜μ–΄ μžˆλ‹€.
  • 즉, new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— 같은 λ¬Έμžμ—΄μ—μ„œ μƒμ„±ν•˜λŠ” BigChar μΈμŠ€ν„΄μŠ€λŠ” κ³΅μœ λœλ‹€.

Main 클래슀

1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
	public static void main(String[] args) {
		if (args.length == 0) {
			System.out.println("Usage: java Main digits");
			System.out.println("Example: java Main 1212123");
			System.exit(0);
		}
		
		BigString bs = new BigString(args[0]);
		bs.print();
	}
}
  • μ£Όμ–΄μ§„ 인수λ₯Ό λ°”νƒ•μœΌλ‘œ λ¬Έμžμ—΄μ„ μƒμ„±ν•˜κ³  좜λ ₯ν•œλ‹€.

Flyweight νŒ¨ν„΄μ˜ λ“±μž₯인물

BigChar 클래슀

  • ν‰μ†Œμ²˜λŸΌ 닀루면 ν”„λ‘œκ·Έλž¨μ΄ λ¬΄κ±°μ›Œμ§€κΈ° λ•Œλ¬Έμ— κ³΅μœ ν•˜κΈ° 편이 λ‚˜μ€ 것을 λ‚˜νƒ€λ‚΄λŠ” ν”ŒλΌμ΄κΈ‰(Flyweight) 역을 λ§‘μ•˜λ‹€.

BigCharFactory 클래슀

  • Flyweightλ₯Ό λ§Œλ“œλŠ” 곡μž₯인 ν”ŒλΌμ΄κΈ‰ 곡μž₯(FlyweightFactory) 역을 λ§‘μ•˜λ‹€.
  • 이 곡μž₯을 μ‚¬μš©ν•΄ Flyweightλ₯Ό λ§Œλ“€λ©΄ μΈμŠ€ν„΄μŠ€κ°€ κ³΅μœ λœλ‹€.

BigString 클래슀

  • FlyweightFactory을 μ‚¬μš©ν•˜μ—¬ Flyweightλ₯Ό λ§Œλ“€μ–΄λ‚΄κ³  μ΄μš©ν•˜λŠ” 의뒰자(Client) 역을 λ§‘μ•˜λ‹€.

μ±…μ—μ„œ μ œμ‹œν•˜λŠ” 힌트

μ—¬λŸ¬ μž₯μ†Œμ— 영ν–₯을 λ―ΈμΉœλ‹€.

  • μΈμŠ€ν„΄μŠ€λ₯Ό κ³΅μœ ν•  λ•ŒλŠ” μ—¬λŸ¬ 곳에 영ν–₯을 λ―ΈμΉœλ‹€λŠ” 점을 μ£Όμ˜ν•΄μ•Ό ν•œλ‹€.
  • 즉, ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό λ³€κ²½ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œ ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” λͺ¨λ“  곳에 λ™μ‹œμ— λ³€κ²½ 사항이 λ°˜μ˜λœλ‹€.
  • κ°€λ Ή BigChar ν΄λž˜μŠ€μ—μ„œ β€˜3β€™μ˜ fontdataλ₯Ό λ³€κ²½ν•œλ‹€λ©΄ BigStringμ—μ„œ μ‚¬μš©λ˜λŠ” β€˜3β€™μ˜ 글꼴은 λͺ¨λ‘ λ³€κ²½λœλ‹€.
  • μ΄λ ‡κ²Œ μ—¬λŸ¬ 곳에 영ν–₯을 λ―ΈμΉ˜λŠ” 것이 ν”„λ‘œκ·Έλž¨μ΄ λ‹€λ£¨λŠ” λ¬Έμ œμ— 따라 쒋은 κ²½μš°λ„ 있고 κ·Έλ ‡μ§€ μ•Šμ€ κ²½μš°λ„ μžˆλ‹€.
  • κ·ΈλŸ¬λ―€λ‘œ Flyweight 역이 κ°€μ§ˆ μ •λ³΄λŠ” 잘 μƒκ°ν•΄μ„œ 골라야 ν•œλ‹€.
  • 정말 μ—¬λŸ¬ κ³³μ—μ„œ κ³΅μœ ν•΄μ•Ό ν•  μ •λ³΄λ§Œ ν•΄λ‹Ή 역이 갖도둝 ν•˜λŠ” 것이 μ˜¬λ°”λ₯΄λ‹€.
  • 예제 ν”„λ‘œκ·Έλž¨μ— 색을 μΆ”κ°€ν•œλ‹€κ³  ν•˜λ©΄ ν•΄λ‹Ή μ •λ³΄λŠ” μ–΄λ–€ ν΄λž˜μŠ€κ°€ 갖도둝 ν•΄μ•Ό ν• κΉŒ?
  • λ§Œμ•½ BigChar에 색 정보λ₯Ό 갖도둝 ν•œλ‹€λ©΄ BigChar λ³„λ‘œ 색 정보가 κ³΅μœ λ˜μ–΄ 반영될 것이닀.
  • κ°€λ Ή BigString에 색 정보λ₯Ό κ°–κ²Œ ν•œλ‹€κ³  ν•˜λ©΄, β€˜μ„Έ 번째 κΈ€μžλŠ” 빨간색’과 같은 색 정보λ₯Ό BigString이 κ°–κ²Œ ν•˜μ—¬, 같은 BigChar μΈμŠ€ν„΄μŠ€λΌλ„ λ‹€λ₯Έ μƒ‰μœΌλ‘œ μ§€μ •ν•  수 μžˆλ‹€.
  • μ–΄λ–€ 정보λ₯Ό κ³΅μœ ν•˜κ³ , κ³΅μœ ν•˜μ§€ μ•Šμ„ μ§€ 클래슀 μ‚¬μš© λͺ©μ μ— 달렀 μžˆλ‹€.

intrinsicκ³Ό extrinsic

  • κ³΅μœ ν•˜λŠ” μ •λ³΄λŠ” intrinsicν•œ 정보라고 ν•œλ‹€.
  • κ·Έ μΈμŠ€ν„΄μŠ€λ₯Ό 어디에 κ°€μ§€κ³  가도 μ–΄λ–€ μƒν™©μ—μ„œλ„ λ³€ν•˜μ§€ μ•ŠλŠ” 정보닀.
  • κ°€λ Ή BigChar의 폰트 λ°μ΄ν„°λŠ” BigString의 어디에 λ“±μž₯해도 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • κ³΅μœ ν•˜μ§€ μ•ŠλŠ” 정보λ₯Ό extrinsicν•œ 정보라고 ν•œλ‹€.
  • μΈμŠ€ν„΄μŠ€ 배치 μž₯μ†Œμ— 따라 λ³€κ²½λ˜λŠ” 정보, 상황에 따라 λ³€ν™”ν•˜λŠ” 정보, μƒνƒœμ— μ˜μ‘΄ν•˜λŠ” 정보이닀.
  • κ°€λ Ή BigChar의 μΈμŠ€ν„΄μŠ€κ°€ BigString의 λͺ‡ 번째 λ¬ΈμžμΈκ°€ ν•˜λŠ” μ •λ³΄λŠ” BigChar의 μœ„μΉ˜μ— 따라 λ‹¬λΌμ§€λ―€λ‘œ BigCharκ°€ κ°€μ§ˆ μˆ˜λŠ” μ—†λ‹€.

κ΄€λ¦¬λ˜λŠ” μΈμŠ€ν„΄μŠ€λŠ” κ°€λΉ„μ§€ μ»¬λ ‰μ…˜λ˜μ§€ μ•ŠλŠ”λ‹€.

  • BigCharFactoryμ—μ„œλŠ” java.util.HashMap을 μ΄μš©ν•΄μ„œ μƒμ„±ν•œ BigChar의 μΈμŠ€ν„΄μŠ€λ₯Ό κ΄€λ¦¬ν•œλ‹€.
  • 이처럼 μΈμŠ€ν„΄μŠ€λ₯Ό κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν–ˆμ„ λ•Œ, λ°˜λ“œμ‹œ β€˜κ΄€λ¦¬λ˜λŠ” μΈμŠ€ν„΄μŠ€λŠ” κ°€λΉ„μ§€ μ»¬λ ‰μ…˜λ˜μ§€ μ•ŠλŠ”λ‹€β€™λŠ” 점을 μ˜μ‹ν•  ν•„μš”κ°€ μžˆλ‹€.
  • 예제 ν”„λ‘œκ·Έλž¨μ„ 보면 pool ν•„λ“œλ‘œ BigChar μΈμŠ€ν„΄μŠ€λ₯Ό κ΄€λ¦¬ν•˜κ³  μžˆλ‹€.
  • μ‹€μ œλ‘œ BigString μΈμŠ€ν„΄μŠ€μ—μ„œ BigChar μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•˜μ§€ μ•Šλ”λΌλ„ pool ν•„λ“œλ‘œ κ΄€λ¦¬λ˜κ³  μžˆμœΌλ―€λ‘œ μ“°λ ˆκΈ°λ‘œ κ°„μ£Όλ˜μ§€ μ•ŠλŠ”λ‹€.
  • κ·Έλ ‡λ‹€λŠ” 것은 일단 ν•œ 번 λ§Œλ“  BigChar 클래슀의 μΈμŠ€ν„΄μŠ€λŠ” λ©”λͺ¨λ¦¬μ— 계속 λ‚¨μ•„μžˆλ‹€λŠ” 말이닀.
  • μž₯μ‹œκ°„ λ˜λŠ” 적은 λ©”λͺ¨λ¦¬λ‘œ λ™μž‘ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ 섀계할 경우 이 점을 μœ μ˜ν•΄μ•Ό ν•œλ‹€.
  • μΈμŠ€ν„΄μŠ€λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ‚­μ œν•  순 μ—†μ§€λ§Œ, μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό 없앨 μˆ˜λŠ” μžˆλ‹€.
  • κ°€λ Ή HashMapμ—μ„œ ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€λ₯Ό ν¬ν•¨ν•œ μ—”νŠΈλ¦¬λ₯Ό μ‚­μ œν•˜λ©΄ μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό 없앨 수 μžˆλ‹€.

λ©”λͺ¨λ¦¬ μ΄μ™Έμ˜ λ¦¬μ†ŒμŠ€

  • Flyweight νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 쀄일 수 μžˆλ‹€κ³  ν–ˆλ‹€.
  • 더 일반적으둜 μ–˜κΈ°ν•˜λ©΄, μΈμŠ€ν„΄μŠ€λ₯Ό κ³΅μœ ν•˜λ©΄ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 데 ν•„μš”ν•œ λ¦¬μ†ŒμŠ€λ₯Ό 쀄일 수 μžˆλ‹€.
  • κ°€λ Ή μΈμŠ€ν„΄μŠ€λ₯Ό μƒˆλ‘œ λ§Œλ“œλŠ” 횟수λ₯Ό 쀄일 수 있고, 이λ₯Ό 톡해 ν”„λ‘œκ·Έλž¨ 속도λ₯Ό ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€.
  • 파일 ν•Έλ“€μ΄λ‚˜ μœˆλ„μš° ν•Έλ“€ 등도 μžμ›μ˜ 일쒅이닀.
  • OS에 λ”°λΌμ„œλŠ” λ™μ‹œμ— μ‚¬μš©ν•  수 μžˆλŠ” 파일 ν•Έλ“€μ΄λ‚˜ μœˆλ„μš° ν•Έλ“€ μˆ˜μ— μ œν•œμ΄ 있고, 그럴 λ•Œ μΈμŠ€ν„΄μŠ€λ₯Ό κ³΅μœ ν•΄λ‘μ§€ μ•ŠμœΌλ©΄ 이 μ œν•œμ— κ±Έλ € ν”„λ‘œκ·Έλž¨μ΄ λ™μž‘ν•˜μ§€ μ•Šμ„ μœ„ν—˜μ΄ μžˆλ‹€.

static Factory Method

  • 예제 ν”„λ‘œκ·Έλž¨μ˜ BigCharFactory ν΄λž˜μŠ€μ—λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μ–»κΈ° μœ„ν•œ static λ©”μ„œλ“œκ°€ λͺ‡ 개 λ“±μž₯ν–ˆλ‹€.
  • getInstance() λ©”μ„œλ“œλŠ” μœ μΌν•œ μΈμŠ€ν„΄μŠ€λ₯Ό μ–»κΈ° μœ„ν•œ 것이고, String.valueOf() λ©”μ„œλ“œλŠ” νŠΉμ • λ¬Έμžμ— λŒ€μ‘ν•˜λŠ” λ¬Έμžμ—΄ ν‘œν˜„μ„ μ–»κΈ° μœ„ν•œ 것이닀.
  • 이듀은 static Factory Method라고 ν•  수 μžˆλ‹€.
This post is licensed under CC BY 4.0 by the author.