๊ฒฝ๊ณ„

์–ด๋–ค ์‹์œผ๋กœ๋“  ์™ธ๋ถ€ ์ฝ”๋“œ๋ฅผ ์šฐ๋ฆฌ ์ฝ”๋“œ์— ๊น”๋”ํ•˜๊ฒŒ ํ†ตํ•ฉํ•ด์•ผ๋งŒ ํ•œ๋‹ค.

์™ธ๋ถ€ ์ฝ”๋“œ ์‚ฌ์šฉํ•˜๊ธฐ

  • ํŒจํ‚ค์ง€ ์ œ๊ณต์ž๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ ์ œ๊ณต์ž๋Š” ์ ์šฉ์„ฑ์„ ์ตœ๋Œ€ํ•œ ๋„“ํžˆ๋ ค ์• ์“ด๋‹ค.(๋” ๋งŽ์€ ํ™˜๊ฒฝ/ ๋” ๋งŽ์€ ๊ณ ๊ฐ โ†’ $)
  • ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ์š”๊ตฌ์— ์ง‘์ค‘ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๋ฐ”๋ž€๋‹ค.

java.util.Map

  • ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ์œ ์—ฐ์„ฑ์€ ์œ ์šฉํ•˜์ง€๋งŒ ๊ทธ๋งŒํผ ์œ„ํ—˜ํ•˜๋‹ค.
Figure 8-1. The methods of Map
clear() void โ€“ Map
containsKey(Object key) boolean โ€“ Map
containsValue(Object value) boolean โ€“ Map
clear() void โ€“ Map
containsKey(Object key) boolean โ€“ Map
containsValue(Object value) boolean โ€“ Map
entrySet() Set โ€“ Map
equals(Object o) boolean โ€“ Map
get(Object key) Object โ€“ Map
getClass() Class<? extends Object> โ€“ Object
hashCode() int โ€“ Map
isEmpty() boolean โ€“ Map
keySet() Set โ€“ Map
notify() void โ€“ Object
notifyAll() void โ€“ Object
put(Object key, Object value) Object โ€“ Map
putAll(Map t) void โ€“ Map
remove(Object key) Object โ€“ Map
size() int โ€“ Map
toString() String โ€“ Object
values() Collection โ€“ Map
wait() void โ€“ Object
wait(long timeout) void โ€“ Object
wait(long timeout, int nanos) void โ€“ Object

๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ Sensorํด๋ž˜์Šค๋ฅผ ์ €์žฅํ•˜๋Š” Map๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์ผ ๊ฒƒ์ด๋‹ค.

Map sensors = new HashMap();
Sensor s = (Sensor) sensors.get(sensorId);
  • ์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์€ Sensorํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋นˆ๋ฒˆํžˆ ์‚ฌ์šฉ๋œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด๋Š” ์‚ฌ์šฉ๋˜๋Š” ๊ณณ์—์„œ ์บ์ŠคํŒ…์˜ ๋ถ€๋‹ด์„ ์•ˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ ์ ˆํ•œ ๋ฌธ๋งฅ์กฐ์ฐจ ์ค„ ์ˆ˜ ์—†๋‹ค.

์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด generic์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

Map<String, Sensor> sensors = new HashMap<String, Sensor>();
Sensor s = sensors.get(sensorId);

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ• ๋˜ํ•œ Map๊ฐ์ฒด๊ฐ€ ํ•„์š” ์ด์ƒ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๋ง‰์ง€ ๋ชปํ•œ๋‹ค.

Map์˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ํ•  ๊ฒฝ์šฐ ๋˜ํ•œ ์šฐ๋ฆฌ ์ฝ”๋“œ์˜ ๋งŽ์€ ๋ถ€๋ถ„๋“ค์ด ๋ฐ”๋€Œ์–ด์•ผ ํ•œ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ฐ”๋€” ์ผ์ด ๋ณ„๋กœ ์—†์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•  ์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ, ์‹ค์ œ๋กœ Java 5๋ฒ„์ „์—์„œ generic์ด ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ Map์˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ฐ”๋€ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค.

๊ฒฐ๊ตญ ์ œ์ผ ์ข‹์€ ๋ฐฉ๋ฒ•์€ Wrapping์ด๋‹ค.

๋ชจ๋“  Map์„ ์ด๋Ÿฐ ์‹์œผ๋กœ Wrappingํ•˜๋ผ๋Š” ๋ง์€ ์•„๋‹ˆ๋‹ค. ๋‹ค๋งŒ Map๊ณผ ๊ฐ™์€ โ€œ๊ฒฝ๊ณ„์— ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šคโ€๋ฅผ ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋Œ๋ ค๊ฐ€๋ฉฐ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ 

  • ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๋„ฃ๋˜์ง€ ๊ฐ€๊นŒ์šด ๊ณ„์—ด์˜ ํด๋ž˜์Šค์— ๋„ฃ์–ด๋ผ.
  • ๊ณต๊ฐœ๋œ api์—์„œ ์ธ์ž๋กœ ๋ฐ›๊ฑฐ๋‚˜ ๋ฆฌํ„ดํ•˜์ง€ ๋งˆ๋ผ.
public class Sensors {
    // ๊ฒฝ๊ณ„์˜ ์ธํ„ฐํŽ˜์ด์Šค(์ด ๊ฒฝ์šฐ์—๋Š” Map์˜ ๋ฉ”์„œ๋“œ)๋Š” ์ˆจ๊ฒจ์ง„๋‹ค.
    // Map์˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ์—ฌํŒŒ๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Generic์„ ์‚ฌ์šฉํ•˜๋˜ ์ง์ ‘ ์บ์ŠคํŒ…ํ•˜๋˜ ๊ทธ๊ฑด ๊ตฌํ˜„ ๋””ํ…Œ์ผ์ด๋ฉฐ Sensorํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ธก์—์„œ๋Š” ์‹ ๊ฒฝ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค.
    // ์ด๋Š” ๋˜ํ•œ ์‚ฌ์šฉ์ž์˜ ๋ชฉ์ ์— ๋”ฑ ๋งž๊ฒŒ ๋””์ž์ธ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ž˜๋ชป ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋œ๋‹ค.
 
    private Map sensors = new HashMap();
 
    public Sensor getById(String id) {
        return (Sensor)sensors.get(id);
    }
}

๊ฒฝ๊ณ„ ์‚ดํ”ผ๊ณ  ์ตํžˆ๊ธฐ

  • ์„œ๋“œํŒŒํ‹ฐ๋ฅผ ์ตํžˆ๊ธฐ๋„ ์–ด๋ ต๊ณ . ํ†ตํ•ฉํ•˜๊ธฐ๋„ ์–ด๋ ต๋‹ค. ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ๋™์‹œ์— ํ•˜๊ธฐ๋Š” ๋‘ ๋ฐฐ๋‚˜ ์–ด๋ ต๋‹ค.
  • ์„œ๋“œํŒŒํ‹ฐ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๊ณง๋ฐ”๋กœ ์„œ๋“œํŒŒํ‹ฐ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ , ๊ทธ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.(์ง ๋‰ด์ปคํฌ๋Š” ์ด๋ฅผ ํ•™์Šตํ…Œ์ŠคํŠธ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.)

log4j ์ตํžˆ๊ธฐ

    // 1.
    // ์šฐ์„  log4j ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์šด๋ฐ›์ž.
    // ๊ณ ๋ฏผ ๋งŽ์ด ํ•˜์ง€ ๋ง๊ณ  ๋ณธ๋Šฅ์— ๋”ฐ๋ผ "hello"๊ฐ€ ์ถœ๋ ฅ๋˜๊ธธ ๋ฐ”๋ผ๋ฉด์„œ ์•„๋ž˜์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.
    @Test
    public void testLogCreate() {
        Logger logger = Logger.getLogger("MyLogger");
        logger.info("hello");
    }
 
    // 2.
    // ์œ„ ํ…Œ์ŠคํŠธ๋Š” "Appender๋ผ๋Š”๊ฒŒ ํ•„์š”ํ•˜๋‹ค"๋Š” ์—๋Ÿฌ๋ฅผ ๋ฑ‰๋Š”๋‹ค.
    // ์กฐ๊ธˆ ๋” ์ฝ์–ด๋ณด๋‹ˆ ConsoleAppender๋ผ๋Š”๊ฒŒ ์žˆ๋Š”๊ฑธ ์•Œ์•„๋ƒˆ๋‹ค.
    // ๊ทธ๋ž˜์„œ ConsoleAppender๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋„ฃ์–ด์ค˜๋ดค๋‹ค.
    @Test
    public void testLogAddAppender() {
        Logger logger = Logger.getLogger("MyLogger");
        ConsoleAppender appender = new ConsoleAppender();
        logger.addAppender(appender);
        logger.info("hello");
    }
 
    // 3.
    // ์œ„์™€ ๊ฐ™์ด ํ•˜๋ฉด "Appender์— ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์ด ์—†๋‹ค"๊ณ  ํ•œ๋‹ค.
    // ์ด์ƒํ•˜๋‹ค. ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฒŒ ์ด์„ฑ์ ์ผ๊ฒƒ ๊ฐ™์€๋ฐ...
    // ๊ตฌ๊ธ€์˜ ๋„์›€์„ ๋นŒ๋ ค, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๋ณด์•˜๋‹ค.
    @Test
    public void testLogAddAppender() {
        Logger logger = Logger.getLogger("MyLogger");
        logger.removeAllAppenders();
        logger.addAppender(new ConsoleAppender(
            new PatternLayout("%p %t %m%n"),
            ConsoleAppender.SYSTEM_OUT));
        logger.info("hello");
    }
 
    // ์„ฑ๊ณตํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ConsoleAppender๋ฅผ ๋งŒ๋“ค์–ด๋†“๊ณ  ConsoleAppender.SYSTEM_OUT์„ ๋ฐ›๋Š”๊ฑด ์ด์ƒํ•˜๋‹ค.
    // ๊ทธ๋ž˜์„œ ๋นผ๋ดค๋”๋‹ˆ ์ž˜ ๋Œ์•„๊ฐ„๋‹ค.
    // ํ•˜์ง€๋งŒ PatternLayout์„ ์ œ๊ฑฐํ•˜๋‹ˆ ๋Œ์•„๊ฐ€์ง€ ์•Š๋Š”๋‹ค.
    // ๊ทธ๋ž˜์„œ ๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ดค๋”๋‹ˆ "ConsoleAppender์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” unconfigured์ƒํƒœ"๋ž€๋‹ค.
    // ๋ช…๋ฐฑํ•˜์ง€๋„ ์•Š๊ณ  ์‹ค์šฉ์ ์ด์ง€๋„ ์•Š๋‹ค... ๋ฒ„๊ทธ์ด๊ฑฐ๋‚˜, ์ ์–ด๋„ "์ผ๊ด€์ ์ด์ง€ ์•Š๋‹ค"๊ณ  ๋Š๊ปด์ง„๋‹ค.
 
 
// ์กฐ๊ธˆ ๋” ๊ตฌ๊ธ€๋ง, ๋ฌธ์„œ ์ฝ๊ธฐ, ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณ log4j์˜ ๋™์ž‘๋ฒ•์„ ์•Œ์•„๋ƒˆ๊ณ  ๊ทธ๊ฒƒ์„ ๊ฐ„๋‹จํ•œ ์œ ๋‹›ํ…Œ์ŠคํŠธ๋กœ ๊ธฐ๋กํ–ˆ๋‹ค.
// ์ด์ œ ์ด ์ง€์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ log4j๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ๋‹ค.
// ๋‚˜๋จธ์ง€ ์ฝ”๋“œ์—์„œ๋Š” log4j์˜ ๋™์ž‘์›๋ฆฌ์— ๋Œ€ํ•ด ์•Œ ํ•„์š”๊ฐ€ ์—†๊ฒŒ ๋๋‹ค.
 
public class LogTest {
    private Logger logger;
 
    @Before
    public void initialize() {
        logger = Logger.getLogger("logger");
        logger.removeAllAppenders();
        Logger.getRootLogger().removeAllAppenders();
    }
 
    @Test
    public void basicLogger() {
        BasicConfigurator.configure();
        logger.info("basicLogger");
    }
 
    @Test
    public void addAppenderWithStream() {
        logger.addAppender(new ConsoleAppender(
            new PatternLayout("%p %t %m%n"),
            ConsoleAppender.SYSTEM_OUT));
        logger.info("addAppenderWithStream");
    }
 
    @Test
    public void addAppenderWithoutStream() {
        logger.addAppender(new ConsoleAppender(
            new PatternLayout("%p %t %m%n")));
        logger.info("addAppenderWithoutStream");
    }
}

โ€ํ•™์Šต ํ…Œ์ŠคํŠธ(Learning test)โ€œ๋Š” ๊ณต์งœ ์ด์ƒ์ด๋‹ค.

  • ๋ฉ”์ธ ๋กœ์ง์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉฐ ์„œ๋“œํŒŒํ‹ฐ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋“œํŒŒํ‹ฐ ์ฝ”๋“œ๊ฐ€ ๋ฐ”๋€” ๊ฒฝ์šฐ Learning test๋ฅผ ๋Œ๋ ค โ€œ์•„์ง ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€โ€ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Learning test๋ฅผ ํ•˜๋˜ ๋ง๋˜, ๊ฒฝ๊ณ„ ํ…Œ์ŠคํŠธ๋Š” ์ƒˆ ๋ฒ„์ „์œผ๋กœ์˜ ์ด์ „์— ๋„์›€์„ ์ค€๋‹ค.

์•„์ง ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ์‚ฌ์šฉํ•˜๊ธฐ

์•„์ง ๊ฐœ๋ฐœ๋˜์ง€ ์•Š์€ ๋ชจ๋“ˆ์ด ํ•„์š”ํ•œ๋ฐ, ๊ธฐ๋Šฅ์€ ์ปค๋…• ์ธํ„ฐํŽ˜์ด์Šค์กฐ์ฐจ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์ œ์•ฝ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ์˜ ๊ตฌํ˜„์ด ๋Šฆ์–ด์ง€๋Š”๊ฑธ ํƒํƒ์น˜ ์•Š๊ฒŒ ์—ฌ๊ธด๋‹ค.

์˜ˆ์‹œ

  • ์ €์ž๋Š” ๋ฌด์„ ํ†ต์‹  ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.
  • ๊ทธ ํŒ€ ์•ˆ์˜ ํ•˜๋ถ€ ํŒ€์œผ๋กœ โ€œ์†ก์‹ ๊ธฐโ€๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒ€์ด ์žˆ์—ˆ๋Š”๋ฐ ๋‚˜๋จธ์ง€ ํŒ€์›๋“ค์€ ์†ก์‹ ๊ธฐ์— ๋Œ€ํ•œ ์ง€์‹์ด ๊ฑฐ์˜ ์—†์—ˆ๋‹ค.
  • โ€œ์†ก์‹ ๊ธฐโ€ํŒ€์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜๋‹ค. ํ•˜์ง€๋งŒ ์ €์ž๋Š” โ€œ์†ก์‹ ๊ธฐโ€ํŒ€์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์‹  โ€œ์›ํ•˜๋Š”โ€ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. [์ง€์ •ํ•œ ์ฃผํŒŒ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ด ์ŠคํŠธ๋ฆผ์—์„œ ๋“ค์–ด์˜ค๋Š” ์ž๋ฃŒ๋ฅผ ์•„๋‚ ๋กœ๊ทธ ์‹ ํ˜ธ๋กœ ์ „์†กํ•˜๋ผ]
  • ์ด๋ ‡๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•จ์œผ๋กœ์จ ๋ฉ”์ธ ๋กœ์ง์„ ๋” ๊น”๋”ํ•˜๊ฒŒ ์งค ์ˆ˜ ์žˆ์—ˆ๊ณ  ๋ชฉํ‘œ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.(์ฐธ์กฐ 1)

public interface Transimitter {
    public void transmit(SomeType frequency, OtherType stream);
}
 
public class FakeTransmitter implements Transimitter {
    public void transmit(SomeType frequency, OtherType stream) {
        // ์‹ค์ œ ๊ตฌํ˜„์ด ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋”๋ฏธ ๋กœ์ง์œผ๋กœ ๋Œ€์ฒด
    }
}
 
// ๊ฒฝ๊ณ„ ๋ฐ–์˜ API
public class RealTransimitter {
    // ์บก์Šํ™”๋œ ๊ตฌํ˜„
    ...
}
 
public class TransmitterAdapter extends RealTransimitter implements Transimitter {
    public void transmit(SomeType frequency, OtherType stream) {
        // RealTransimitter(์™ธ๋ถ€ API)๋ฅผ ์‚ฌ์šฉํ•ด ์‹ค์ œ ๋กœ์ง์„ ์—ฌ๊ธฐ์— ๊ตฌํ˜„.
        // Transmitter์˜ ๋ณ€๊ฒฝ์ด ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ์ด ๋ถ€๋ถ„์— ํ•œ์ •๋œ๋‹ค.
    }
}
 
public class CommunicationController {
    // TransmitterํŒ€์˜ API๊ฐ€ ์ œ๊ณต๋˜๊ธฐ ์ „์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.
    public void someMethod() {
        Transmitter transmitter = new FakeTransmitter();
        transmitter.transmit(someFrequency, someStream);
    }
 
    // TransmitterํŒ€์˜ API๊ฐ€ ์ œ๊ณต๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.
    public void someMethod() {
        Transmitter transmitter = new TransmitterAdapter();
        transmitter.transmit(someFrequency, someStream);
    }
}
  • Adapter Pattern์œผ๋กœ API ์‚ฌ์šฉ์„ ์บก์Šํ™”ํ•ด API๊ฐ€ ๋ฐ”๋€” ๋•Œ ์ˆ˜์ •ํ•  ์ฝ”๋“œ๋ฅผ ํ•œ๊ณณ์œผ๋กœ ๋ชจ์•˜๋‹ค.
  • API์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‚˜์˜จ ๋‹ค์Œ ๊ฒฝ๊ณ„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ์šฐ๋ฆฌ๊ฐ€ API๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๊นจ๋—ํ•œ ๊ฒฝ๊ณ„

  • ์ข‹์€ ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ์€ ๋ณ€๊ฒฝ์ด ์ƒ๊ธธ ๊ฒฝ์šฐ ๋งŽ์€ ์žฌ์ž‘์—… ์—†์ด ๋ณ€๊ฒฝ์„ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋””์ž์ธ์ด๋‹ค.
  • ๊ฒฝ๊ณ„์— ์œ„์น˜ํ•˜๋Š” ์ฝ”๋“œ๋Š” ๊น”๋”ํžˆ ๋ถ„๋ฆฌํ•œ๋‹ค.
  • ๊ธฐ๋Œ€์น˜๋ฅผ ์ •์˜ํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋„ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐ€๋Šฅํ•œ ์ค„์—ฌ ๊ฒฝ๊ณ„๋ฅผ ๊ด€๋ฆฌํ•˜์ž.