-
[Java] λμμΈ ν¨ν΄(Strategy ν¨ν΄)Android/Java 2021. 5. 11. 23:31λ°μν
- μ΄ κΈμ "μΈνλ° Java λμμΈ ν¨ν΄" κ°μλ₯Ό λ£κ³ 곡λΆν λ΄μ©μ λ°νμΌλ‘ κΈμ μμ±νμμ΅λλ€.
Strategy ν¨ν΄
ν΄λμ€ μν μ λλ ·ν νμ¬ λͺ¨λνλ μννΈμ¨μ΄λ₯Ό ꡬμΆνλ λ° λμμ μ£Όλ ν¨ν΄μΌλ‘ μ¬λ¬ κ°μ§ κΈ°λ₯λ€μ λν΄ κ΅¬μ²΄μ μΈ ν΄λμ€λ‘ ꡬννμ¬ νννλ ν¨ν΄μ λλ€.
κ° κΈ°λ₯λ€μ λν΄μ If, else if, else μ κ°μ 쑰건문μΌλ‘ νλμ½λ©νμ¬ λ€λ₯΄κ² μμ±νλ©΄ κΈ°λ₯μ μΈ μΈ‘λ©΄μμλ κ°μμ§ λͺ°λΌλ κ°μ²΄μ§ν₯ μμΉμ΄ μ΄κΈλκ² λ©λλ€.
μνλ λμμ΄ μμ λ ν΄λΉ κΈ°λ₯μ ꡬνν ν΄λμ€λ‘ λ°κΎΈκΈ° λλ¬Έμ μΆν μ μ§λ³΄μμ μμ μ μ©μ΄ν©λλ€.
Strategy ν¨ν΄ μ¬μ©
public class DeviceOS { public String type; public DeviceOS(String type) { this.type = type; } }
λ¨Όμ DeviceOS λΌλ ν΄λμ€λ₯Ό ꡬνν©λλ€. κ°μ’ Deviceμ ν¬ν¨μν¬ μ μλ μ΄μ체μ λ‘ Window, Mac, Linux, Android ..μ΄ typeμ΄ λ μ μμ΅λλ€.
public class Device { private DeviceOS deviceOS; public Device(DeviceOS deviceOS) { this.deviceOS = deviceOS; } public void execute(){ switch (deviceOS.type){ case "Mac": System.out.println("Mac OS booting"); break; case "Linux": System.out.println("Linux booting"); break; case "Android": System.out.println("Android booting"); break; case "Window": System.out.println("Window booting"); break; default: break; } } } public class Main{ public static void main(String[] args) { DeviceOS deviceOS = new DeviceOS("Linux"); Device device = new Device(deviceOS); device.execute(); // Linux booting } }
DeviceOSλ₯Ό κ°μ§κ³ μλ μ€μ Deviceμ ν΄λΉνλ ν΄λμ€λ‘ execute ν¨μλ κ° μ΄μ체μ μ μ’ λ₯μ λ°λΌ λ€λ₯΄κ² μλνλ κ±Έ λ³Ό μ μμ΅λλ€.μ΄λ κ² κ΅¬νμ νμ¬λ μ¬μ€μ κΈ°λ₯ μΈ‘λ©΄μμλ λ¬Έμ μμ΄ μλν©λλ€. μ€μ νμ μμλ μκ°μ μΈ μμλ‘ μΈν΄ case λ§λ€ νλμ½λ©νμ¬ κ΅¬ννκΈ°λ ν©λλ€.
νμ§λ§ κ°λ°μλΌλ©΄ κ°μ²΄μ§ν₯μ μμΉμ ν΅ν λͺ¨λνμ λΆλ¦¬λ₯Ό ν΅ν΄ λ―Έλ μ μ§λ³΄μμ μμ μ μ©μ΄ν μ μλλ‘ μ€κ³νλ κ²λ μ€μν λ₯λ ₯μ΄λΌκ³ μκ°ν©λλ€.public interface OperatingSystem { void execute(); }
Strategy ν¨ν΄μ μ¬μ©νκΈ° μ μ OperatingSystemμ΄λΌλ μΈν°νμ΄μ€λ₯Ό ꡬννμ¬ κ° OS ꡬ체μ μΈ νμ ν΄λμ€μ λ©μλλ₯Ό κ°μ μ μΌλ‘ ꡬννλλ‘ ν©λλ€.
public class Android implements OperatingSystem { @Override public void execute() { System.out.println("Android booting"); } } public class Linux implements OperatingSystem{ @Override public void execute() { System.out.println("Linux booting"); } } public class Mac implements OperatingSystem { @Override public void execute() { System.out.println("Mac booting"); } } public class Window implements OperatingSystem { @Override public void execute() { System.out.println("Window"); } } public class Device { private OperatingSystem operatingSystem; public Device(OperatingSystem operatingSystem) { this.operatingSystem = operatingSystem; } public void execute(){ operatingSystem.execute(); } }
κ° κΈ°λ₯λ³ ν΄λμ€λ₯Ό ꡬννμ¬ OperatingSystemμμ κ°μ λ°μ λ©μλλ‘ μνλ λμμ νλλ‘ μμ±ν μ μμ΅λλ€. κ·Έλ¦¬κ³ Deviceμμλ OperatingSystemμ΄λΌλ μΈν°νμ΄μ€ μ μΈνμ¬ μμ±μμμ λ°μ μ μλλ‘ ν©λλ€.
public class Main{ public static void main(String[] args) { OperatingSystem operatingSystem = new Linux(); Device device = new Device(operatingSystem); device.execute(); // Linux booting } }
λ€μκ³Ό κ°μ΄ Main λ©μλλ₯Ό μμ±ν κ²½μ° κ²°κ³Όλ λμΌνκ² λμ¨λ€λ κ²μ μ μ μμ΅λλ€. μ¬κΈ°κΉμ§ λ΄€μ λ ν° μ°¨μ΄κ° μμκΉ λΌλ μλ¬Έμ΄ λ€ μλ μμ΅λλ€. νμ§λ§ κ°μ²΄μ§ν₯ μμΉμΌλ‘ ν° μννΈμ¨μ΄μΌμλ‘ μμ λͺ¨λ λ¨μλ‘ μͺΌκ°κ³ ꡬ체μ μΈ κΈ°λ₯μ κ°μ§ ν΄λμ€λ‘ ꡬννλ ν΄μΌ ν©λλ€. μ΄ μμΉμ ν΅ν΄μ μ μ§λ³΄μμ μΆκ° μμ μ΄ κ°νΈν΄μ§κ³ μ€λ₯κ° λ°μνμ κ²½μ° μ νν λͺ¨λμ ν΄λμ€λ§ 보면 λκΈ° λλ¬Έμ λΉ λ₯΄κ² λμμ΄ κ°λ₯ν©λλ€.
λ°μν'Android > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] λμμΈ ν¨ν΄(Template ν¨ν΄) (0) 2021.05.17 [Java] λμμΈ ν¨ν΄(Proxy ν¨ν΄) (0) 2021.05.14 [Java] λλ€μμ΄λ? (0) 2021.03.21 [Java] Java Generic(μ λ€λ¦) (0) 2021.03.01 [Java] Java IO, NIO (0) 2021.02.22