{"id":36169,"date":"2023-06-04T11:18:01","date_gmt":"2023-06-04T02:18:01","guid":{"rendered":"https:\/\/8gfg.shop\/blog\/?p=36169"},"modified":"2023-06-04T11:18:01","modified_gmt":"2023-06-04T02:18:01","slug":"java-design-patterns-ensuring-interface-compatibility-with-the-adapter-pattern","status":"publish","type":"post","link":"https:\/\/8gfg.shop\/blog\/development\/java-design-patterns-ensuring-interface-compatibility-with-the-adapter-pattern","title":{"rendered":"\uc790\ubc14 \ub514\uc790\uc778 \ud328\ud134: \uc5b4\ub311\ud130 \ud328\ud134\uc73c\ub85c \uc778\ud130\ud398\uc774\uc2a4 \ud638\ud658\uc131 \ud655\ubcf4\ud558\uae30"},"content":{"rendered":"
<\/p>\n
\uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c\uc5d0\uc11c, \ub514\uc790\uc778 \ud328\ud134\uc740 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud55c \uc77c\ubc18\uc801\uc778 \ud574\uacb0\ucc45\uc785\ub2c8\ub2e4. \ub514\uc790\uc778 \ud328\ud134\uc740 \uacf5\uc2dd\uc801\uc778 \uc5b8\uc5b4\uc5d0\uc11c\ub294 \uc544\ub2c8\uc9c0\ub9cc, \uac1c\ubc1c\uc790\ub4e4 \uc0ac\uc774\uc5d0\uc11c \ub110\ub9ac \uc0ac\uc6a9\ub418\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \uae00\uc5d0\uc11c\ub294 \uc790\ubc14 \ub514\uc790\uc778 \ud328\ud134 \uc911 \uc5b4\ub311\ud130 \ud328\ud134\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n
\uc5b4\ub311\ud130 \ud328\ud134\uc740 \ud638\ud658\ub418\uc9c0 \uc54a\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud568\uaed8 \uc791\ub3d9\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 \ub514\uc790\uc778 \ud328\ud134\uc785\ub2c8\ub2e4. \uc774 \ud328\ud134\uc740 \uae30\uc874\uc758 \ucf54\ub4dc\ub97c \uc7ac\uc0ac\uc6a9\ud558\uba74\uc11c\ub3c4 \uc0c8\ub85c\uc6b4 \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc218 \uc788\ub3c4\ub85d \ud569\ub2c8\ub2e4. \uc5b4\ub311\ud130 \ud328\ud134\uc740 \uc77c\ubc18\uc801\uc73c\ub85c \ub450 \uac00\uc9c0 \uc778\ud130\ud398\uc774\uc2a4 \uc0ac\uc774\uc5d0\uc11c \uc791\ub3d9\ud569\ub2c8\ub2e4. \uc774 \ud328\ud134\uc740 "Wrapper \ud328\ud134"\uc774\ub77c\uace0\ub3c4 \ubd88\ub9bd\ub2c8\ub2e4.<\/p>\n
\uc5b4\ub311\ud130 \ud328\ud134\uc740 \ub2e4\ub978 \ud328\ud134\uacfc \ud568\uaed8 \uc0ac\uc6a9\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \uc5b4\ub311\ud130 \ud328\ud134\uc740 \ub370\ucf54\ub808\uc774\ud130 \ud328\ud134\uc5d0\uc11c\ub3c4 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub370\ucf54\ub808\uc774\ud130 \ud328\ud134\uc740 \uac1d\uccb4\uc5d0 \ucd94\uac00\uc801\uc778 \uae30\ub2a5\uc744 \ub3d9\uc801\uc73c\ub85c \ucd94\uac00\ud558\uae30 \uc704\ud55c \ud328\ud134\uc785\ub2c8\ub2e4. \ub370\ucf54\ub808\uc774\ud130 \ud328\ud134\uacfc \uc5b4\ub311\ud130 \ud328\ud134\uc744 \ud568\uaed8 \uc0ac\uc6a9\ud558\uba74, \uac1d\uccb4\uc5d0 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc744 \ucd94\uac00\ud558\uba74\uc11c\ub3c4 \ud638\ud658\uc131 \ubb38\uc81c\ub97c \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\uc5b4\ub311\ud130 \ud328\ud134\uc740 \uc778\ud130\ud398\uc774\uc2a4 \ud638\ud658\uc131 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \uc778\ud130\ud398\uc774\uc2a4 \ud638\ud658\uc131 \ubb38\uc81c\uc758 \uc608\uc2dc\uc785\ub2c8\ub2e4.<\/p>\n
\uc5b4\ub311\ud130 \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74, \ud074\ub798\uc2a4 X\uc640 Y\ub97c \ud568\uaed8 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c\ub294 X\uc640 Y\ub97c \ud638\ud658\ub418\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub85c \ubcc0\uacbd\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub54c, \uc5b4\ub311\ud130 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n
\uc5b4\ub311\ud130 \ud074\ub798\uc2a4\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\uace0, \ud638\ud658\ub418\uc9c0 \uc54a\ub294 \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \uac10\uc2f8\uc11c, \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud1b5\ud574 \ud638\ud658\uc131\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \ud568\uc73c\ub85c\uc368, \uae30\uc874\uc758 \ud074\ub798\uc2a4\ub97c \uc218\uc815\ud558\uc9c0 \uc54a\uace0\ub3c4 \uc0c8\ub85c\uc6b4 \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\uc5b4\ub311\ud130 \ud328\ud134\uc740 \uc138 \uac00\uc9c0 \uc8fc\uc694 \uc694\uc18c\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4. \uc774\ub4e4 \uc694\uc18c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n
<\/p>\n
Adaptee \ud074\ub798\uc2a4\ub294 Target \uc778\ud130\ud398\uc774\uc2a4\uc640 \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Adapter \ud074\ub798\uc2a4\ub294 Adaptee \ud074\ub798\uc2a4\ub97c \uac10\uc2f8\uc11c, Target \uc778\ud130\ud398\uc774\uc2a4\uc640 \ud638\ud658\uc131\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574, Adaptee \ud074\ub798\uc2a4\ub97c Target \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\uc5b4\ub311\ud130 \ud328\ud134\uc740 \ub450 \uac00\uc9c0 \ubc29\uc2dd\uc73c\ub85c \uad6c\ud604\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uccab \ubc88\uc9f8 \ubc29\ubc95\uc740 \ud074\ub798\uc2a4 \uc5b4\ub311\ud130 \ud328\ud134\uc774\uace0, \ub450 \ubc88\uc9f8 \ubc29\ubc95\uc740 \uac1d\uccb4 \uc5b4\ub311\ud130 \ud328\ud134\uc785\ub2c8\ub2e4.<\/p>\n
\ud074\ub798\uc2a4 \uc5b4\ub311\ud130 \ud328\ud134\uc740 \ub2e4\uc911 \uc0c1\uc18d\uc744 \uc0ac\uc6a9\ud558\uc5ec Target \uc778\ud130\ud398\uc774\uc2a4\uc640 Adaptee \ud074\ub798\uc2a4\ub97c \ub3d9\uc2dc\uc5d0 \uc0c1\uc18d\ud558\ub294 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4dc\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. \uc774 \ud074\ub798\uc2a4\ub294 Target \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\uba74\uc11c, Adaptee \ud074\ub798\uc2a4\uc758 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
<\/p>\n
\ud074\ub798\uc2a4 \uc5b4\ub311\ud130 \ud328\ud134\uc740 \ub2e4\uc911 \uc0c1\uc18d\uc744 \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0, Java\uc640 \uac19\uc740 \uc5b8\uc5b4\uc5d0\uc11c\ub294 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n
\uac1d\uccb4 \uc5b4\ub311\ud130 \ud328\ud134\uc740 Target \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\ub294 \ud074\ub798\uc2a4\uc640 Adaptee \ud074\ub798\uc2a4\ub97c \uac01\uac01 \ub9cc\ub4dc\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. Adapter \ud074\ub798\uc2a4\ub294 Target \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\uba74\uc11c, Adaptee \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \uac10\uc2f8\uc11c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n
<\/p>\n
\uac1d\uccb4 \uc5b4\ub311\ud130 \ud328\ud134\uc740 \uc0c1\uc18d\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c, \ud074\ub798\uc2a4 \uc5b4\ub311\ud130 \ud328\ud134\uacfc \ub2ec\ub9ac Java\uc640 \uac19\uc740 \uc5b8\uc5b4\uc5d0\uc11c \uc9c0\uc6d0\ub429\ub2c8\ub2e4.<\/p>\n
\ub2e4\uc74c\uc740 \uc790\ubc14\uc5d0\uc11c \uc5b4\ub311\ud130 \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\ub294 \uc608\uc2dc\uc785\ub2c8\ub2e4.<\/p>\n
public interface MediaPlayer {\n public void play(String audioType, String fileName);\n}\n\npublic interface AdvancedMediaPlayer { \n public void playVlc(String fileName);\n public void playMp4(String fileName);\n}\n\npublic class VlcPlayer implements AdvancedMediaPlayer{\n @Override\n public void playVlc(String fileName) {\n System.out.println(\"Playing vlc file. Name: \"+ fileName); \n }\n\n @Override\n public void playMp4(String fileName) {\n \/\/ do nothing\n }\n}\n\npublic class Mp4Player implements AdvancedMediaPlayer{\n\n @Override\n public void playVlc(String fileName) {\n \/\/ do nothing\n }\n\n @Override\n public void playMp4(String fileName) {\n System.out.println(\"Playing mp4 file. Name: \"+ fileName); \n }\n}\n\npublic class MediaAdapter implements MediaPlayer {\n\n AdvancedMediaPlayer advancedMusicPlayer;\n\n public MediaAdapter(String audioType){\n if(audioType.equalsIgnoreCase(\"vlc\") ){\n advancedMusicPlayer = new VlcPlayer(); \n }else if (audioType.equalsIgnoreCase(\"mp4\")){\n advancedMusicPlayer = new Mp4Player();\n } \n }\n\n @Override\n public void play(String audioType, String fileName) {\n if(audioType.equalsIgnoreCase(\"vlc\")){\n advancedMusicPlayer.playVlc(fileName);\n }else if(audioType.equalsIgnoreCase(\"mp4\")){\n advancedMusicPlayer.playMp4(fileName);\n }\n }\n}\n\npublic class AudioPlayer implements MediaPlayer {\n MediaAdapter mediaAdapter; \n\n @Override\n public void play(String audioType, String fileName) { \n\n \/\/inbuilt support to play mp3 music files\n if(audioType.equalsIgnoreCase(\"mp3\")){\n System.out.println(\"Playing mp3 file. Name: \"+ fileName); \n } \n\n \/\/mediaAdapter is providing support to play other file formats\n else if(audioType.equalsIgnoreCase(\"vlc\") || audioType.equalsIgnoreCase(\"mp4\")){\n mediaAdapter = new MediaAdapter(audioType);\n mediaAdapter.play(audioType, fileName);\n }\n\n else{\n System.out.println(\"Invalid media. \"+ audioType + \" format not supported\");\n }\n }\n}<\/code><\/pre>\n\uc704 \uc608\uc81c\ub294 \uc624\ub514\uc624 \ud30c\uc77c\uc744 \uc7ac\uc0dd\ud558\ub294 \ud504\ub85c\uadf8\ub7a8\uc785\ub2c8\ub2e4. MediaPlayer \uc778\ud130\ud398\uc774\uc2a4\ub294 mp3 \ud30c\uc77c\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uadf8\ub7ec\ub098, AdvancedMediaPlayer \uc778\ud130\ud398\uc774\uc2a4\ub294 vlc\uc640 mp4 \ud30c\uc77c\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574, MediaAdapter \ud074\ub798\uc2a4\uac00 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n
MediaAdapter \ud074\ub798\uc2a4\ub294 AdvancedMediaPlayer \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud569\ub2c8\ub2e4. \uc774 \ud074\ub798\uc2a4\ub294 vlc\uc640 mp4 \ud30c\uc77c\uc744 \uc9c0\uc6d0\ud558\ub294 VlcPlayer\uc640 Mp4Player \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \uac10\uc2f8\uc11c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. AudioPlayer \ud074\ub798\uc2a4\ub294 MediaPlayer \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\uba74\uc11c, MediaAdapter \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec vlc\uc640 mp4 \ud30c\uc77c\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4.<\/p>\n
\uacb0\ub860<\/h2>\n
\uc5b4\ub311\ud130 \ud328\ud134\uc740 \ud638\ud658\uc131 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud55c \ub514\uc790\uc778 \ud328\ud134\uc785\ub2c8\ub2e4. \uc774 \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74, \ud638\ud658\ub418\uc9c0 \uc54a\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud568\uaed8 \uc791\ub3d9\ud560 \uc218 \uc788\ub3c4\ub85d \ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c\ub294 \uae30\uc874\uc758 \ud074\ub798\uc2a4\ub97c \uc218\uc815\ud558\uc9c0 \uc54a\uace0\ub3c4 \uc0c8\ub85c\uc6b4 \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc790\ubc14\uc5d0\uc11c\ub294 \uac1d\uccb4 \uc5b4\ub311\ud130 \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc5b4\ub311\ud130 \ud328\ud134\uc744 \uad6c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud328\ud134\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub098 \ud504\ub808\uc784\uc6cc\ud06c\uc5d0\uc11c \ubc1c\uc0dd\ud558\ub294 \ud638\ud658\uc131 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub294\ub370 \uc720\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"
\uc790\ubc14 \ub514\uc790\uc778 \ud328\ud134: \uc5b4\ub311\ud130 \ud328\ud134\uc73c\ub85c \uc778\ud130\ud398\uc774\uc2a4 \ud638\ud658\uc131 \ud655\ubcf4\ud558\uae30.<\/p>\n","protected":false},"author":1,"featured_media":33704,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1957],"tags":[2735,2365,2188,2584,5925,5979,3414],"class_list":["post-36169","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-adapter","tag-media","tag-public","tag-system","tag-5925","tag-5979","tag-3414"],"acf":[],"_links":{"self":[{"href":"https:\/\/8gfg.shop\/blog\/wp-json\/wp\/v2\/posts\/36169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/8gfg.shop\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/8gfg.shop\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/8gfg.shop\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/8gfg.shop\/blog\/wp-json\/wp\/v2\/comments?post=36169"}],"version-history":[{"count":1,"href":"https:\/\/8gfg.shop\/blog\/wp-json\/wp\/v2\/posts\/36169\/revisions"}],"predecessor-version":[{"id":36377,"href":"https:\/\/8gfg.shop\/blog\/wp-json\/wp\/v2\/posts\/36169\/revisions\/36377"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/8gfg.shop\/blog\/wp-json\/wp\/v2\/media\/33704"}],"wp:attachment":[{"href":"https:\/\/8gfg.shop\/blog\/wp-json\/wp\/v2\/media?parent=36169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/8gfg.shop\/blog\/wp-json\/wp\/v2\/categories?post=36169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/8gfg.shop\/blog\/wp-json\/wp\/v2\/tags?post=36169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}