-
μ€νλ§ νλ μμν¬(Spring Framework)μ λ€νμ±(Polymorphism)(1)κ°λ°/Spring Boot 2022. 2. 8. 00:00
Spring Frameworkλ₯Ό 곡λΆνλ©΄, λ°λμ μμμΌ ν κ°λ μ΄ μμ΅λλ€.
λ°λ‘, λ€νμ±(Polymorphism)μΈλ°μ.
μ΄λ² μκ°μλ μ€νλ§ νλ μ μν¬μ λ€νμ±μ λν λ€μν μ΄μΌκΈ°λ₯Ό ν΄λ³΄κ³ μ ν©λλ€.
p.s) ν΄λΉ κΈμ κΉμνλμ Spring κ°μ λ΄μ©μ ν λλ‘ κ°μΈμ΄ μ 리νκ²μ κΈ°λ‘ν©λλ€.
μκ°μ΄ λμ λ€λ©΄ ν΄λΉ κ°μ λν κΌ λ€μ΄λ³΄μ€ κ²μ μΆμ²ν©λλ€ :)
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°
λ€νμ±μ λ§νκΈ° μ μ, λ¨Όμ μ€νλ§μ νΉμ§μ λν΄μ μ΄μΌκΈ°ν΄λ³΄κ² μ΅λλ€.
μ€νλ§μ μλ° μΈμ΄ κΈ°λ°μ νλ μμν¬μ λλ€. κ·Έλ λ€λ©΄ μλ° μΈμ΄μ κ°μ₯ ν° νΉμ§μ 무μμΌκΉμ? λ€, λ§μ΅λλ€. 'κ°μ²΄ μ§ν₯ μΈμ΄' λΌλ κ²μ λλ€. μ°λ¦¬κ° μκ³ μ νλ μ€νλ§μ μ΄ κ°μ²΄ μ§ν₯ μΈμ΄κ° κ°μ§ κ°λ ₯ν νΉμ§μ μ΄λ €λ΄λ νλ μμν¬μ λλ€. μ¦, μ€νλ§μ μ’μ κ°μ²΄ μ§ν₯ μ ν리μΌμ΄μ μ κ°λ°ν μ μκ² λμμ£Όλ νλ μμν¬μΈ κ²μ λλ€.
κ·Έλ λ€λ©΄, κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ 무μμΌκΉμ?
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ»΄ν¨ν° νλ‘κ·Έλ¨μ λͺ λ Ήμ΄μ λͺ©λ‘μΌλ‘ 보λ μκ°μμ λ²μ΄λ μ¬λ¬κ°μ λ 립λ λ¨μ, μ¦ "κ°μ²΄"λ€μ λͺ¨μμΌλ‘ νμ νκ³ μ νλ κ²μ΄λ€. κ°κ°μ κ°μ²΄λ λ©μΈμ§λ₯Ό μ£Όκ³ λ°κ³ , λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μλ€. (νλ ₯)
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νλ‘κ·Έλ¨μ μ μ°νκ³ λ³κ²½μ΄ μ©μ΄νκ² λ§λ€κΈ° λλ¬Έμ λκ·λͺ¨ μννΈμ¨μ΄ κ°λ°μ λ§μ΄ μ¬μ©λλ€.μμ μ μμ λν΄μλ λ°μΌλ‘ λ΄λ €κ°λ©΄μ, μ°¨κ·Όμ°¨κ·Όν μ΄ν΄λ₯Ό ν μ μλλ‘ νμ΄λκ°κ² μ΅λλ€. κ°μ²΄ μ§ν₯μ λ€μκ³Ό κ°μ νΉμ§μ κ°μ§κ³ μμ΅λλ€.
- μΆμν
- μΊ‘μν
- μμ
- λ€νμ±μ΄λ¬ν κ°μ²΄ μ§ν₯μ νΉμ§ μ€ νλλ₯Ό λ€νμ±μ΄λΌκ³ ν μ μλλ°, κ·ΈλΌ μ΄μ 본격μ μΌλ‘ λ€νμ±μ λν΄ μ΄μΌκΈ°ν΄λ³΄λλ‘ νκ² μ΅λλ€. (μ΄λ²μκ°μ λ€νμ±μ λν μ΄μΌκΈ°λ§ μ§μ€μ μΌλ‘ λ€λ£¨κ² μ΅λλ€.)
λ€νμ±(Polymorphsim)μ΄λ?
λ€νμ±μ΄λ νλ‘κ·Έλ¨ μΈμ΄ κ° μμλ€(μμ, λ³μ, μ, κ°μ²΄, λ©μλ λ±)μ΄
λ€μν μλ£ν(type)μ μνλ κ²μ΄ νκ°λλ μ±μ§
- wikipedia -μν€νΌλμμμλ μμ λ΄μ©κ³Ό κ°μ΄ μ μνμμ΅λλ€. νμ§λ§, μ΄λ¬ν μ€λͺ μΌλ‘ λ€νμ±μ κ°λ μ΄ μ μλΏμ§ μμ΅λλ€. κ·Έλ λ€λ©΄ λ€μκ³Ό κ°μ λΉμ λ‘ νλ² μ΄ν΄ν΄λ³΄λ©΄ μ΄λ¨κΉμ? λ¨Όμ , 100% μ€μΈκ³μ κ°μ²΄ μ§ν₯μ 1:1λ‘ λ§€μΉνκΈ°λ μ΄λ ΅κ² μ§λ§, μ½κ² 'μν 'κ³Ό 'ꡬν'μΌλ‘ μΈμμ ꡬλΆνλ€κ³ μκ°ν΄λ΄ μλ€.
μ΄μ μμ μλμ°¨
μ΄μ μλ μ΄μ μ ν λ μλμ°¨λ‘ μΉμ©μ°¨, μ€ν¬μΈ μΉ΄, λ²μ€ μ€ μ΄λ€ κ²μ μ΄μ νλλΌλ μλμ°¨λ₯Ό μ΄μ νλ€λ μ μ μμ΄μ λ³νλ μ μ μμ΅λλ€. μ¬κΈ°μ μΉμ©μ°¨, μ€ν¬μΈ μΉ΄, λ²μ€λ μλμ°¨μ κΈ°λ₯μ ꡬννλ μλ¨μΌ λΏμ λλ€. μ¦, μλμ°¨κ° λ°λμ΄λ μ΄μ μμκ²λ ν° μν₯μ μ£Όμ§ μμ΅λλ€. μ΄μ²λΌ 'μ΄μ μ = ν΄λΌμ΄μΈνΈ' λΌκ³ μκ°ν΄λ³΄μμ λ, ν΄λΌμ΄μΈνΈμκ² μν₯μ μ£Όμ§ μκ³ λ κΈ°λ₯μ ꡬνν μ μλ€λ κ²μ λλ€. μ΄λ¬ν νΉμ§μ΄ λ°λ‘ 'λ€νμ±'μ λλ€.
λ‘λ―Έμ€μ λ¨μλ°°μ°
μ΄λ²μλ λ‘λ―Έμ€μ λ¨μλ°°μ°λ‘ μλ₯Ό λ€μ΄λ³΄κ² μ΅λλ€. μνμμ λ‘λ―Έμ€λΌλ μν μ λ°°μ° μ΅μ°μμ¨κ° ν΄λ, νΉμ λμΉ΄ν리μ€κ° ν΄λ (μ κ° μ’μνλ λ°°μ°λ€μ λλ€ :D, μ΄λ΄λ μ¬μ¬ ν¬μ² μ΄μ§ ν΄λ΄ λλ€^^) κ·Ή μ€μμ λ‘λ―Έμ€μ μν μ΄ λ¬λΌμ§λ κ²μ μλλλ€. μ΄ μμ 'λ‘λ―Έμ€ = ν΄λΌμ΄μΈνΈ' λΌκ³ κ°μ ν μμ ν΄λΌμ΄μΈνΈμκ² μν₯μ μ£Όμ§μκ³ λ κΈ°λ₯μ 'ꡬν = μ΅μ°μ, λμΉ΄ν리μ€' νλ€κ³ λ³Ό μ μκ² μ΅λλ€.
λ€μνλ² λ§μλ리μ§λ§, μ΄λ¬ν μμκ° 1:1λ‘ 100% λμλκΈ°λ μ΄λ ΅μ§λ§, λΉμ·ν κ°λ μΌλ‘ μ΄ν΄ν΄μ£Όμλ©΄ λκ² μ΅λλ€ :)
μν κ³Ό ꡬνμ λΆλ¦¬
μ§κΈκΉμ§ λκ°μ§ μμλ‘ μν κ³Ό ꡬνμ ꡬλΆνμ¬ μκ°ν΄λ³΄μμ΅λλ€. μ΄μ μκ° μλμ°¨λ₯Ό μ΄μ μ νλ κ²μ μμ΄μ, μ΄λ ν μλ‘μ΄ μ’ λ₯μ μ°¨κ° λμ€λλΌλ λ¨μ§ μ°¨λ§ λ°κΎΈμ΄ μ£Όλ©΄ λλ μ μ°ν΄μ§κ³ λ³κ²½λ μ©μ΄ν΄μ§κ² λλ κ²μ λλ€. λ¬Όλ‘ μ΄μ μλ μΉμ©μ°¨, μ€ν¬μΈ μΉ΄, λ²μ€ μ΄λ¬ν μ°¨κ° μ΄λ»κ² ꡬ쑰νλμ΄ λ§λ€μ΄μ‘λμ§μ λν΄ κΉμ΄ μ νμλ μμ΅λλ€. μ΄λ κ² λμ ν΄ λ³Έλ€λ©΄, μ¬λ¬κ°μ§ μ₯μ μ΄ λμ¬ μ μκ² μ΅λλ€.
- ν΄λΌμ΄μΈνΈλ λμμ μν (μΈν°νμ΄μ€)λ§ μλ©΄ λλ€.
- ν΄λΌμ΄μΈνΈλ ꡬν λμμ λ΄λΆ ꡬ쑰λ₯Ό λͺ°λΌλ λλ€.
- ν΄λΌμ΄μΈνΈλ ꡬν λμμ λ΄λΆ κ΅¬μ‘°κ° λ³κ²½λμ΄λ μν₯μ λ°μ§ μλλ€.
- ν΄λΌμ΄μΈνΈλ ꡬν λμ μ체λ₯Ό λ³κ²½ ν΄λ μν₯μ λ°μ§ μλλ€.κ·Έλ λ€λ©΄, λ€μ λ³Έλ‘ μΌλ‘ λμκ°λ³΄κ² μ΅λλ€. μλ° μΈμ΄μμλ μ΄λ¬ν λ€νμ±μ νμ©ν κ²μ λλ€. μ¦, μν = μΈν°νμ΄μ€, ꡬν = μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€(νΉμ κ°μ²΄) λ‘ μκ°ν΄λ³΄λ©΄ λ©λλ€. κ°μ²΄λ₯Ό μ€κ³ν λ μν κ³Ό ꡬνμ λΆλ¦¬νλ κ²μ λλ€. μν μ λ¨Όμ λΆμ¬νκ³ , κ·Έ μν μ μννλ ꡬν κ°μ²΄λ₯Ό λ§λ€λλ‘ νλκ²μ λλ€.
μλ°μΈμ΄μμ λ€νμ±μ μ΄λμ λ³Ό μ μμκΉμ? μ€λ²λΌμ΄λ©μ λ μ¬λ €λ³΄λ©΄ λ©λλ€. μλΉμ€μμ μΈν°νμ΄μ€μ λ©μλλ₯Ό νΈμΆνλ©΄ ν΄λΉ κΈ°λ₯μ ꡬνν μ€λ²λΌμ΄λ© λ λ©μλκ° μ€νμ΄ λ©λλ€. μ΄κ²μ λ€νμ±μΌλ‘ μΈν΄ μΈν°νμ΄μ€λ₯Ό ꡬνν κ°μ²΄λ₯Ό μ€ν μμ μ μ μ°νκ² λ³κ²½ν μ μμ΅λλ€.
μ 리νκΈ°
- μΈν°νμ΄μ€λ₯Ό ꡬνν κ°μ²΄ μΈμ€ν΄μ€λ₯Ό μ€ν μμ μ μ μ°νκ² λ³κ²½ν μ μλ€.
- λ€νμ±μ λ³Έμ§μ μ΄ν΄νλ €λ©΄ νλ ₯μ΄λΌλ κ°μ²΄μ¬μ΄μ κ΄κ³μμ μμν΄μΌνλ€.
- ν΄λΌμ΄μΈνΈλ₯Ό λ³κ²½νμ§ μκ³ , μλ²μ ꡬν κΈ°λ₯μ μ μ°νκ² λ³κ²½ν μ μλ€.μ΄λ κ² μ§κΈκΉμ§ 보μλ μν κ³Ό ꡬνμ΄λΌλ νΈλ¦¬ν 컨μ μ λ€νμ±μ ν΅ν΄ κ°μ²΄ μΈμμΌλ‘ κ°μ Έμ€κ²λλ©΄, μ μ°νκ³ λ³κ²½μ΄ μ©μ΄νλ©°, νμ₯ κ°λ₯ν μ€κ³κ° κ°λ₯ν΄μ§λλ€. ν΄λΌμ΄μΈνΈμ μν₯μ μ£Όμ§ μκ² λ³κ²½μ΄ κ°λ₯ν©λλ€. λ°λΌμ μΈν°νμ΄μ€λ₯Ό μμ μ μΌλ‘ μ μ€κ³νλ κ²μ΄ λ§€μ° μ€μν΄μ§κ² μ΅λλ€. λ§μ½, μΈν°νμ΄μ€(μν ) μμ²΄κ° λ³νλ©΄, ν΄λΌμ΄μΈνΈλ μλ² λͺ¨λμ ν° λ³κ²½μ΄ λ°μν μ μκΈ° λλ¬Έμ λλ€.
μ°λ¦¬κ° μμΌλ‘ μ¬μ©ν μ€νλ§ νλ μμν¬λ μ΄λ¬ν λ€νμ±μ κ·Ήλνν΄μ μ΄μ©ν μ μλλ‘ λμμ€λλ€. μ μ΄μ μμ (IoC), μμ‘΄κ΄κ³ μ£Όμ (DI)μ λ€νμ±μ νμ©ν΄ μν κ³Ό ꡬνμ νΈλ¦¬νκ² λ€λ£° μ μλλ‘ μ§μν©λλ€. μ¦, μ€νλ§μ μ¬μ©νλ©΄ λ§μΉ λ κ³ λΈλ 쑰립νλ―μ΄, νΉμ κ³΅μ° λ¬΄λμ λ°°μ°λ₯Ό μ ννλ―μ΄ κ΅¬νμ νΈλ¦¬νκ² λ³κ²½ν μ μκ² λ©λλ€.
λ€μμ΄μΌκΈ°
μλ°λ κ°μ²΄ μ§ν₯ μΈμ΄μ λλ€. κ°μ²΄ μ§ν₯μ ν΅μ¬μ λ€νμ±μ΄κ³ , κ·Έ λ€νμ±μ λν΄μ (=λ€νμ±μ΄ μ΄λ κ²λ μ’λ€!) μ΄λ² μκ°μ μμ보μμ΅λλ€. νμ§λ§ μ’μ κ°μ²΄ μ§ν₯ μ€κ³μλ 5κ°μ§ μμΉμ΄ μλλ°, μ΄ λ€νμ±λ§μΌλ‘λ μ΄κ²μ λͺ¨λ μΆ©μ‘±μν€κΈ°λ μ΄λ ΅μ΅λλ€. κ²°λ‘ μ λ§νμλ©΄, κ·Έλμ Spring Frameworkκ° νμνκ² λ κ²μ΄μ§μ. κ·Έλ¬ν μ΄μΌκΈ°λ₯Ό λ€μκΈμ ν¬μ€ν ν΄λ³΄λλ‘ νκ² μ΅λλ€ :)
'κ°λ° > Spring Boot' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Http Message Converter μ΄μΌκΈ°(2) (0) 2022.07.07 HTTP Message Converter μ΄μΌκΈ°(1) (0) 2022.07.07 HTTP API μλ΅ μ 리 (0) 2022.07.07 μ€νλ§μ΄ μ¬λν λμμΈ ν¨ν΄ (0) 2022.05.31 κ°μ²΄ μ§ν₯ μ€κ³ 5μμΉ - SOLID (0) 2022.05.24