{"id":25207,"date":"2023-04-29T11:07:16","date_gmt":"2023-04-29T02:07:16","guid":{"rendered":"https:\/\/m9js.shop\/blog\/?p=25207"},"modified":"2023-04-29T18:18:08","modified_gmt":"2023-04-29T09:18:08","slug":"java-interfaces-and-design-principles-an-example-of-solid-principles","status":"publish","type":"post","link":"https:\/\/m9js.shop\/blog\/development\/java-interfaces-and-design-principles-an-example-of-solid-principles","title":{"rendered":"Java \uc778\ud130\ud398\uc774\uc2a4\uc640 \ub514\uc790\uc778 \uc6d0\uce59: SOLID \uc6d0\uce59 \uc608\uc2dc\ub85c \uc0b4\ud3b4\ubcf4\uae30"},"content":{"rendered":"
SOLID \uc6d0\uce59\uc740 \uac1d\uccb4 \uc9c0\ud5a5 \ub514\uc790\uc778\uc758 \uae30\ubcf8 \uc6d0\uce59 \uc911 \ud558\ub098\ub85c, \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ub514\uc790\uc778\uc744 \ubcf4\ub2e4 \uacac\uace0\ud558\uace0 \ud655\uc7a5 \uac00\ub2a5\ud558\uac8c \ub9cc\ub4dc\ub294 \ubc29\ubc95\ub860\uc785\ub2c8\ub2e4. \uc774\ubc88 \uae00\uc5d0\uc11c\ub294 SOLID \uc6d0\uce59 \uc911\uc5d0\uc11c\ub3c4 \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc5f0\uad00\ub41c \uc6d0\uce59\uc744 \uc0b4\ud3b4\ubcf4\uace0, Java\uc5d0\uc11c\uc758 \uc778\ud130\ud398\uc774\uc2a4\uc640 SOLID \uc6d0\uce59\uc758 \uad00\uacc4\ub97c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ub610\ud55c, SOLID \uc6d0\uce59\uc758 \uc608\uc2dc\ub85c \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud65c\uc6a9\ud55c \uac1d\uccb4 \uc9c0\ud5a5 \ub514\uc790\uc778\uc5d0 \ub300\ud574\uc11c\ub3c4 \ub2e4\ub8e8\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n
SOLID \uc6d0\uce59\uc740 \uac1d\uccb4 \uc9c0\ud5a5 \ub514\uc790\uc778\uc758 \ub2e4\uc12f \uac00\uc9c0 \uae30\ubcf8 \uc6d0\uce59\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. \uc774 \uc6d0\uce59\ub4e4\uc740 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ub514\uc790\uc778\uc758 \uacac\uace0\uc131, \ud655\uc7a5\uc131, \uc720\uc9c0\ubcf4\uc218\uc131\uc744 \ub192\uc774\uae30 \uc704\ud574 \uace0\uc548\ub418\uc5c8\uc2b5\ub2c8\ub2e4. SOLID \uc6d0\uce59\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n
Java\uc5d0\uc11c \uc778\ud130\ud398\uc774\uc2a4\ub294 SOLID \uc6d0\uce59 \uc911 ISP(Interface Segregation Principle)\ub97c \uad6c\ud604\ud558\uae30 \uc704\ud574 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \uc790\uc2e0\uc774 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uba54\uc11c\ub4dc\uc5d0 \uc758\uc874\ud558\uba74 \uc548 \ub418\ubbc0\ub85c, \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\ub294 \ud074\ub798\uc2a4\ub294 \ud574\ub2f9 \uc778\ud130\ud398\uc774\uc2a4\uac00 \uc81c\uacf5\ud558\ub294 \ubaa8\ub4e0 \uba54\uc11c\ub4dc\ub97c \uad6c\ud604\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uba54\uc11c\ub4dc\uc5d0 \ub300\ud574\uc11c\ub294 \uad6c\ud604\uccb4\uc5d0\uc11c \uc2e0\uacbd\uc4f0\uc9c0 \uc54a\uc544\ub3c4 \ub418\ubbc0\ub85c, \ubcf4\ub2e4 \uac04\uacb0\ud558\uace0 \uc720\uc9c0\ubcf4\uc218\uc131\uc774 \ub192\uc740 \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
public interface Animal {\n void eat();\n void sleep();\n void run();\n}<\/code><\/pre>\n\uc704\uc758 \ucf54\ub4dc\ub294 Animal \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc815\uc758\ud55c \uc608\uc2dc\uc785\ub2c8\ub2e4. Animal \uc778\ud130\ud398\uc774\uc2a4\ub294 eat(), sleep(), run() \uba54\uc11c\ub4dc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\ub294 \ud074\ub798\uc2a4\ub294 \ubc18\ub4dc\uc2dc \uc774 \uc138 \uba54\uc11c\ub4dc\ub97c \ubaa8\ub450 \uad6c\ud604\ud574\uc57c \ud569\ub2c8\ub2e4. \ub9cc\uc57d \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 eat() \uba54\uc11c\ub4dc\ub9cc \uc0ac\uc6a9\ud55c\ub2e4\uba74, \ud574\ub2f9 \uba54\uc11c\ub4dc\ub9cc \uad6c\ud604\ud55c \ud074\ub798\uc2a4\ub97c \uc81c\uacf5\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4.<\/p>\n
\uac1d\uccb4 \uc9c0\ud5a5 \ub514\uc790\uc778\uc5d0\uc11c SOLID \uc6d0\uce59\uc758 \uc608\uc2dc\ub294 \ubb34\uc5c7\uc778\uac00?<\/h2>\n
SOLID \uc6d0\uce59\uc744 \ud65c\uc6a9\ud55c \uac1d\uccb4 \uc9c0\ud5a5 \ub514\uc790\uc778\uc758 \uc608\uc2dc\ub85c\ub294 DI(Dependency Injection) \ud328\ud134\uc774 \uc788\uc2b5\ub2c8\ub2e4. DI \ud328\ud134\uc740 DIP(Dependency Inversion Principle)\ub97c \ub530\ub974\ub294 \ubc29\uc2dd\uc73c\ub85c \uac1d\uccb4 \uac04\uc758 \uc758\uc874\uc131\uc744 \ub0ae\ucd94\uace0, \uc720\uc9c0\ubcf4\uc218\uc131\uacfc \ud655\uc7a5\uc131\uc744 \ub192\uc774\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. DI \ud328\ud134\uc740 \ub2e4\uc74c\uacfc \uac19\uc774 \uad6c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
public class UserService {\n private UserRepository userRepository;\n\n \/\/ \uc0dd\uc131\uc790\ub97c \ud1b5\ud574 UserRepository \uc778\uc2a4\ud134\uc2a4\ub97c \uc8fc\uc785\ubc1b\uc74c\n public UserService(UserRepository userRepository) {\n this.userRepository = userRepository;\n }\n\n public User getUserById(int id) {\n return userRepository.getUserById(id);\n }\n}<\/code><\/pre>\n\uc704\uc758 \ucf54\ub4dc\ub294 UserService \ud074\ub798\uc2a4\uc758 \uc608\uc2dc\uc785\ub2c8\ub2e4. UserService \ud074\ub798\uc2a4\ub294 UserRepository \uc778\uc2a4\ud134\uc2a4\ub97c \ud544\uc694\ub85c \ud569\ub2c8\ub2e4. \uc774 \ub54c, \uc0dd\uc131\uc790\ub97c \ud1b5\ud574 UserRepository \uc778\uc2a4\ud134\uc2a4\ub97c \uc8fc\uc785\ubc1b\ub294 \ubc29\uc2dd\uc73c\ub85c DI \ud328\ud134\uc744 \uad6c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74 UserService \ud074\ub798\uc2a4\ub294 UserRepository \ud074\ub798\uc2a4\uc758 \uad6c\ud604 \ub0b4\uc6a9\uc744 \uc54c \ud544\uc694\uac00 \uc5c6\uc73c\uba70, UserRepository \ud074\ub798\uc2a4\uc758 \ubcc0\uacbd\uc5d0\ub3c4 \uc601\ud5a5\uc744 \ubc1b\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n
SOLID \uc6d0\uce59\uc740 \uac1d\uccb4 \uc9c0\ud5a5 \ub514\uc790\uc778\uc758 \uae30\ubcf8 \uc6d0\uce59 \uc911 \ud558\ub098\ub85c, \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ub514\uc790\uc778\uc744 \ubcf4\ub2e4 \uacac\uace0\ud558\uace0 \ud655\uc7a5 \uac00\ub2a5\ud558\uac8c \ub9cc\ub4dc\ub294 \ubc29\ubc95\ub860\uc785\ub2c8\ub2e4. Java\uc5d0\uc11c\uc758 \uc778\ud130\ud398\uc774\uc2a4\ub294 SOLID \uc6d0\uce59 \uc911 ISP(Interface Segregation Principle)\ub97c \uad6c\ud604\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud65c\uc6a9\ud55c \uac1d\uccb4 \uc9c0\ud5a5 \ub514\uc790\uc778\uc758 \uc608\uc2dc\ub85c\ub294 DI(Dependency Injection) \ud328\ud134\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c SOLID \uc6d0\uce59\uacfc \ub514\uc790\uc778 \ud328\ud134\uc744 \uc801\uadf9 \ud65c\uc6a9\ud558\uc5ec \ub354\uc6b1 \uacac\uace0\ud558\uace0 \uc720\uc9c0\ubcf4\uc218\uc131\uc774 \ub192\uc740 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub97c \uac1c\ubc1c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"
Java \uc778\ud130\ud398\uc774\uc2a4\uc640 \ub514\uc790\uc778 \uc6d0\uce59: SOLID \uc6d0\uce59 \uc608\uc2dc\ub85c \uc0b4\ud3b4\ubcf4\uae30<\/p>\n","protected":false},"author":1,"featured_media":12633,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1957],"tags":[425,2188,2563,2580],"class_list":["post-25207","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-open","tag-public","tag-responsibility","tag-user"],"acf":[],"_links":{"self":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/25207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/comments?post=25207"}],"version-history":[{"count":0,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/25207\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media\/12633"}],"wp:attachment":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media?parent=25207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/categories?post=25207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/tags?post=25207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}