-
[Java] ๋์์ธ ํจํด (Factory ํจํด)Android/Java 2021. 1. 5. 09:43๋ฐ์ํ
- ์ด ๊ธ์ "์ธํ๋ฐ Java ๋์์ธ ํจํด" ๊ฐ์๋ฅผ ๋ฃ๊ณ ๊ณต๋ถํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ์์ต๋๋ค.
Factory ํจํด์ด๋?
Builder ํจํด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจํด์ ๋๋ค.
์ด ํจํด์ ๊ฐ์ฒด ์ฌ์ด์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด ์ฃผ๋ก ์ฌ์ฉํ๋ ํจํด์ ๋๋ค.
Factory ํจํด์ ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค๋ก ์ ์ธ์ ํ๊ณ ๋ด๋ถ์์๋ ์ด๋ค ๊ฐ์ฒด๊ฐ ์์ฑ์ด ๋๋์ง ๋ชจ๋ฅด๋๊ฒ ํต์ฌ์ ๋๋ค. ์ฆ, ํด๋์ค์ ์ธ์คํด์ค๋ ์๋ธ ํด๋์ค์์ ๊ฒฐ์ ๋๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
๋ง์ฝ ๊ตฌ์ ํด๋์ค (new๋ก ์ง์ ์์ฑ)๋ฅผ ๊ธฐ๋ฐํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด, ๋์ค์ ์ฝ๋ ์์ ํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๊ณ ์ ์ฐ์ฑ์ด ๋จ์ด์ง๊ฒ ๋ฉ๋๋ค.
์๋๋ก์ด๋์์ ์๋ก์ด Fragment๋ฅผ ์์ฑํ ๋, Factory ํจํด์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด import ํ์ง ์์๋ ๋์ด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์์ต๋๋ค.
Factory ํจํด ์ฌ์ฉ
public interface Subject { void describe(); }
public interface Factory { Subject createFactory(String name); }
๋ค์๊ณผ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค.
Factory ํจํด์ ์ฌ์ฉํ ๋๋ ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค๋ฅผ ์ ์ธ์ ํด์ผ ํฉ๋๋ค.
public class Program implements Subject{ String name; public Program(String name) { this.name = name; } @Override public void describe() { System.out.println(name+" ์๊ฐํฉ๋๋ค"); } }
public class English implements Subject{ String name; public English(String name) { this.name = name; } @Override public void describe() { System.out.println(name+"๋ฅผ ์๊ฐํฉ๋๋ค!!"); } }
์ดํ Subject ์ธํฐํ์ด์ค๋ฅผ implement ํ๋ ๊ฐ์ฒด๋ฅผ ๋ ๊ฐ์ง๋ฅผ ๋ง๋ค๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ๊ฐ์ฒด๋ค์ ์ง์ new๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋นํ์ฌ ์์ฑํ๋ ๊ฒ์ด ์๋ Factory ํจํด์ ํตํด ์บก์ํ๋ฅผ ํ๊ฒ ๋ฉ๋๋ค.
public class SubjectFactory implements Factory { @Override public Subject createFactory(String name) { Subject subject = null; switch (name){ case "์์ด": subject = new English(name); break; case "ํ๋ก๊ทธ๋๋ฐ": subject = new Program(name); break; } return subject; } }
SubjetFactory์์ createFactory ๋ฉ์๋๋ฅผ ํตํด ์์ฑํ๋ ค๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ฃผ๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
import factory.Factory; import factory.Subject; import factory.SubjectFactory; public class Main { public static void main(String[] args) { Factory factory = new SubjectFactory(); Subject subject1 = factory.createFactory("ํ๋ก๊ทธ๋๋ฐ"); Subject subject2 = factory.createFactory("์์ด"); subject1.describe(); subject2.describe(); } }
๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด factory ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ฒ ๋ฉ๋๋ค. ์ดํ Subject๋ก ์ ์ธ๋ง ํ ๋ฟ ์ธ๋ถ์ ์ผ๋ก ์ด๋ค ๊ฐ์ฒด๊ฐ ์์ฑ๋๋์ง๋ ๋ด๋ถ์์๋ง ์๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
Program, English์ ๊ฐ์ฒด๋ฅผ import ํ๋ ๋ถ๋ถ๋ ์์ต๋๋ค. ์ด์ฒ๋ผ ํฉํ ๋ฆฌ ํจํด์ ์ฌ์ฉํ๋ฉด Main์์๋ Program๊ณผ English์์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์ด ๋ ๊ฐ์ง์ ๊ฐ์ฒด๋ฅผ ์์ ํ๋๋ผ๋ Main์ ์ฝ๋๊ฐ ์์ ๋ ๊ฐ๋ฅ์ฑ์ ์ ๊ฒ ๋ฉ๋๋ค.
๋ฐ์ํ'Android > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] JVM์ด๋? ์๋ฐ ์ฝ๋ ์คํ (0) 2021.01.11 [Java] ๋์์ธ ํจํด(Decorator ํจํด) (0) 2021.01.08 [Java] ๋์์ธ ํจํด(Adapter ํจํด) (0) 2021.01.07 [Java] ๋์์ธ ํจํด (Singleton ํจํด) (0) 2021.01.05 [Java] ๋์์ธ ํจํด (Builder ํจํด) (0) 2021.01.03