Flyweight pattern
ํ๋ผ์ด์จ์ดํธ ํจํด์ ๋น์ฉ์ด ํฐ ์์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋๋ ํจํด์ด๋ค.
์์์ ๋ํ ๋น์ฉ์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋ ๋ณผ ์ ์๋ค.
์ค๋ณต ์์ฑ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ ๊ฒฝ์ฐ
์ค๋ณต ์์ฑ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ๊ฒ์ ๋์ผํ ์์์ด ์์ฃผ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๋ฐ ์์ ๊ณตํต ์์ ํํ๋ก ๊ด๋ฆฌํด ์ฃผ๋ ํธ์ด ์ข๋ค.
์์ ์์ฑ ๋น์ฉ์ ํฐ๋ฐ ์ฌ์ฉ ๋น๋๊ฐ ๋ฎ์ ๊ฒฝ์ฐ
์ด๋ฐ ์์์ ํญ์ ๋ฏธ๋ฆฌ ์์ฑํด ๋๋ ๊ฒ์ ๋ญ๋น์ด๋ค. ๋ฐ๋ผ์ ์์ฒญ์ด ์์ ๋์ ์์ฑํด์ ์ ๊ณตํด์ฃผ๋ ํธ์ด ์ข๋ค.
์ด ๋ ๊ฐ์ง ๋ชฉ์ ์ ์ํด์ ํ๋ผ์ด์จ์ดํธ ํจํด์ ์์ ์์ฑ๊ณผ ์ ๊ณต์ ์ฑ ์์ง๋ค.
์์์ ์์ฑ์ ๋ด๋นํ๋ Factory ์ญํ ๊ณผ ๊ด๋ฆฌ ์ญํ ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข์ ์ ์์ผ๋, ์ผ๋ฐ์ ์ผ๋ก๋ ๋ ์ญํ ์ ํฌ๊ธฐ๊ฐ ๊ทธ๋ฆฌ ํฌ์ง ์์์ ํ๋์ ํด๋์ค๊ฐ ๋ด๋นํ๋๋ก ๊ตฌํํ๋ค.
์ฅ์
๋ง์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
๋งํฅใด ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ผ ์ ์๋ค.
state pattern๊ณผ ์ฝ๊ฒ ๊ฒฐํฉ๋ ์ ์๋ค.
๋จ์
ํน์ ์ธ์คํด์ค์ ๊ณต์ ์ปดํฌ๋ํธ๋ฅผ ๋ค๋ฅด๊ฒ ํ๋ํ๊ฒ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. (๊ฐ๋ณ ์ค์ ์ด ๋ถ๊ฐ๋ฅํ๋ค.)
์ฌ์ฉ ์์
๊ณ ์ ์ ์ธ ์ฌ์ฉ ์
์๋ ํ๋ก์ธ์์์ ๋ฌธ์๋ค์ ๊ทธ๋ํฝ์ ํํ์ ๋ํ ์๋ฃ ๊ตฌ์กฐ (ex ๊ธ์๋ชจ์ ์ ๋ณด๋ฅผ ํจ์จ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์์)
JDK ์์
java.lang.String
java.lang.Integer#valueOf(int) : ๋ฏธ๋ฆฌ ์ ์ฅ๋ ์บ์ ํ์์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์ค๊ณ , ๋ง์ฝ ์์ผ๋ฉด ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ๋์ด์์.
java.lang.Boolean#valueOf(boolean)
java.lang.Byte#valueOf(byte)
java.lang.Character#valueOf(char)
๊ฐ๋จ ๊ตฌํ ์์
public class FlyweightFactory {
private static Map<String, Subject> map = new HashMap<String, Subject>();
โ
public Subject getSubject(String key) {
Subject subject = map.get(key);
โ
if (subject == null) {
subject = new Subject(key);
map.put(key, subject);
โ
System.out.println("์๋ก ์์ฑ" + key);
} else {
System.out.println("์ฌ์ฌ์ฉ" + key);
}
โ
return subject;
}
}
Last updated
Was this helpful?