π SRP Single Responsibility Principle λ¨μΌ μ± μ μμΉ
ν΄λμ€λ νλμ μΌμλ§ μ± μμ§λ€.
μ¦, 1κ°μ ν΄λμ€μ νλμ μν λ§ κ°μ ΈμΌνλ€.
μ€κ³μ€μΈ νλ‘κ·Έλλ°μ ν΄λμ€κ° μ¬λ¬κ°μ§ μν μ κ°μ§κ³ μλ€λ©΄ κ²ν ν,
λΆνμν νλλ λ©μλλ₯Ό μ κ±°ν΄μΌνλ€.
μλ₯Όλ€μ΄ FileReader(String str)λ‘ μ°μ΄λ€κ° -> FileReader(File file)λ‘ λ§€κ°λ³μ κ°μ²΄λ₯Ό λ°κΎΈλ©΄
μΈλΆμμ μ°μ΄κ³ μλ FileReaderλ λ³κ²½μ΄λμκΈ°λλ¬Έμ,
FTP Clientμ FileReader λν μμ ν΄μ€μΌνλ€.
.
.
μ΄ λ°μλ, FTP Clientλ λ무 λ§μ κΈ°λ₯μ κ°μ§κ³ μλ€.
κ°κ°μ λΆλ¦¬μν¬ νμκ° μλ€.
κ·Έλ κ² λλ©΄ λ€λ₯Έ μλ‘μ΄ λͺ¨λ (Local File Reader, HttpClient)μ΄
μΆκ° λ° μμ λλλΌλ μν₯ λ°μ§ μκΈ° λλ¬Έμ μ μ§λ³΄μ, μ¬νμ©μ΄ μ¬μμ§λ€.
π OCP Open Closed Principle κ°λ°© νμ μμΉ(μ€ν/ν΄λ‘μ¦μμΉ)
μμ μ νμ₯μλ μ΄λ €μκ³ μ£Όλ³μ λ³ν λν΄μλ λ«νμμ΄μΌνλ€.
μ 곡λλ κΈ°λ₯μ νμ₯ν μ μμ§λ§(μ€ν), μμ μ μν₯μ λ°μ§ μλ (νμμ±)μμ κ³ λ €νλ€.
λ€νμ±μ μλ‘,
μνΌν΄λμ€μ κ·Έ μλΈ ν΄λμ€κ° λ―Έλμ μ΄λ€ νμ₯κ³Ό μμ λ λ°©μ(λ©μλ λ΄μ© λ³κ²½ λ±)μ ν΄λ
μ¬μ©μ μΈ‘μ κ·Έ μμ μ λν΄ μν₯μ λ°μ§ μμμΌ νλ€.
νμ§λ§, μμ μ΄ μκΈ°λ©΄ κ·Έμ λ°λ₯Έ λ³νλ λ°λμ μκΈ΄λ€.
μ΄ λ¬Έμ λ₯Ό μ΄λ»κ² ν΄κ²°νλ?
κ°μ²΄λ₯Ό μμ±νκ³ , μ°κ΄κ΄κ³λ₯Ό λ§Ίμ΄μ£Όλ λ³λμ 쑰립, μ€μ μκ° νμνλ€.
μμν΄λμ€ λλ μΈν°νμ΄μ€λ₯Ό μ€κ°μ λ μΌλ‘μ¨,
μμ μ λ³νμ λν΄μλ νμμ μ΄μ§λ§, μΈν°νμ΄μ€λ μΈλΆμ λ³νμ λν΄μ νμ₯μ κ°λ°©ν΄μ€ μ μλ€.
λνμ μΌλ‘ JDBCμ Mybatis, Hibernate λ± JAVAμμλ Streamμμ μ°Ύμλ³Ό μ μλ€.
μ΄ν리μΌμ΄μ μ μ₯μμλ μΈλΆμ μΌλ‘ λ§μ Databaseκ° μμ μ μλ€.
Databaseκ° λμ΄λ μλ‘ κ³μ λ³κ²½λλ μν©μ΄ μμ μ μλλ°,
μ΄λ₯Ό λ°©μ§νκΈ° μν΄μ JDBC μΈν°νμ΄μ€κ° μλ€.
μ΄ν리μΌμ΄μ λ΄λΆμ μΌλ‘λ ν νλμ ν΅λ‘μΈ JDBC μΈν°νμ΄μ€λ§μ κ°μ§κ³ μμ§λ§,
JDBC μΈν°νμ΄μ€ μΈλΆμ μΌλ‘λ Nκ° μ΄μμΌλ‘ νμ₯ν μ μλ€.
π LSP(Liskov Substitution Principle) 리μ€μ½ν μΉνμμΉ
μλΈνμ
μ μΈμ λ μμ μ κΈ°λ°(μμ) νμ
μΌλ‘ κ΅μ²΄ν μ μμ΄μΌνλ€
νμ§λ§ μ¬κΈ°μ νμ ν΄λμ€κ° μ€μνκ² μ§μΌμΌν κ²μ
μμ μ μμ νμ (μΈν°νμ΄μ€)μ κ·μ½μ λ€ μ§μΌμΌνλ€λ μ μ΄λ€.
λ€νμ±μ μ§μνκΈ° μν μμΉ, μΈν°νμ΄μ€λ₯Ό ꡬνν ꡬν체λ λ―Ώκ³ μ¬μ©νλ €λ©΄, μ΄ μμΉμ΄ νμνλ€.
λ¨μν μ»΄νμΌ ν¨μ€λ₯Ό λμ΄μλ μ΄μΌκΈ°λ€.
μλ₯Όλ€μ΄, μλμ°¨ μΈν°νμ΄μ€μ μμ μ μμΌλ‘ κ°λΌλ κΈ°λ₯μ΄λ€.
νμ§λ§ μ΄ κΈ°λ₯μ νμν΄λμ€μμ λ€λ‘ κ°κ² ꡬννλ©΄ LSPκ° μλ°λλ€.
μμ κΈ°λ₯μ λ리λλΌλ λ°λμ μμΌλ‘ κ°μΌνλ€.
μΆκ° ) μμλ νμλ₯Ό ν¬κ΄νλ μΌλ°μ κ°λ μ κ°μ§κ³ μμ΄μΌ νλ€.
ν¬μ λ₯ - μΈκ° μ κ°λ μμ μΈκ°μ μΈμ λ ν¬μ λ₯μ μνλ κ²μ λ μ¬λ¦¬λ©΄ λλ€.
μνΌν΄λμ€μμ ꡬν κ°λ₯ν κ²μ μλΈν΄λμ€λ‘ λ체 μλμ΄ κ°λ₯νμ§ κ³ λ €ν΄μΌνλ€.
π ISP (Interface Segregation Principle) μΈν°νμ΄μ€ λΆλ¦¬μμΉ
ν΄λΌμ΄μΈνΈλ μμ μ΄ μ¬μ©νμ§ μλ λ©μλμ μμ‘΄ κ΄κ³λ₯Ό λ§ΊμΌλ©΄ μλλ€.
ν΄λΌμ΄μΈνΈκ° μνμ§ μλ λ©μλλ₯Ό κ°μν΄μλ μλλ€λ μλ―Έμ΄λ€. μΈν°νμ΄μ€μ μ μλμ΄ μλ κ²μ ꡬννλ ν΄λμ€μμ λͺ¨λ ꡬνν΄μΌ νλ©°, κ·Έ μμ μλ§μ§ μμ λ©μλκ° ν¬ν¨λ κ²½μ°, μ€κ³κ° λ§κ°μ§ κ°λ₯μ±μ΄ μλ€.
νλ‘μ νΈ μꡬ μ¬νκ³Ό μ€κ³μ λ°λΌμ SRP(λ¨μΌ μ± μ μμΉ) / ISP(μΈν°νμ΄μ€ λΆλ¦¬μμΉ)λ₯Ό μ ννλ€.
μ§λλΌλ κ°μ²΄λ μλ λ보μλ΄, μλμ°¨ μ μ©κΈΈ μλ΄, μμ κ±° μ μ©κΈΈ μλ΄, μ§νμ² λ Έμ λ±λ± λ§μ κΈ°λ₯μ΄μμ μ μλ€.
μ΄λ μ§νμ² μ΄νμ λ§λ€ λ, μ§λλ₯Ό μμλ°μΌλ©΄ λ€λ₯Έ νμμλ μλμ°¨ μ μ©κΈΈ μλ΄κΉμ§ ꡬνν΄μΌνλ λΆνμμ±μ΄ μκΈ΄λ€. λ°λΌμ λ보μλ΄, μλμ°¨ μ μ©κΈΈ μλ΄μ λ°λ₯Έ μΈν°νμ΄μ€λ₯Ό κ°κ° λ§λ€μλ κ²μ΄ μΈν°νμ΄μ€ λΆλ¦¬μμΉμ΄λ€.
π DIP (Dependency Inversion Principle)μμ‘΄ μμ μμΉ
μμ λ³΄λ€ λ³νκΈ° μ¬μ΄ κ²μ μμ‘΄νμ§ λ§μμΌνλ€.
κΈ°λ³Έ μν μ μμ‘΄ν΄μΌμ§, ꡬ체νμ μμ‘΄νλ©΄ μλλ€λ κ²μ΄λ€.
(μνΌ ν΄λμ€λ μλΈ ν΄λμ€μ μμ‘΄νλ€.)
μ¬λμ μ·μ μμ‘΄ν μ μλ€.
μ¬μ±μ·, λ΄ μ·, λ¨μ±μ·μ΄ μλλΌ, 'μ·'μ μμ‘΄νλ€.
μ΄λ Open Closed Principle κ°λ°© νμ μμΉκ³Ό λΉμ·ν μ리μ΄λ€.
μλ SOLID λ κ°μ²΄ μ§ν₯ 4λ νΉμ±μ κΈ°λ°ν¨μΌλ‘μ¨ μλ‘ μ μ¬ν λͺ¨μκ³Ό μλ―Έλ₯Ό λ΄κ³Ό μλ€.
κ°μ²΄ μ§ν₯μ ν΅μ¬μ λ€νμ±μ΄λ€.
νμ§λ§ λ€νμ± λ§μΌλ‘λ μ½κ² λΆνμ κ°μ λΌμ°λ― κ°λ°ν μ μλ€.
ꡬν κ°μ²΄λ₯Ό λ³κ²½ν λ ν΄λΌμ΄μΈνΈ μ½λλ ν¨κ» λ³κ²½λλ μν©μ΄ μ¨λ€.
λ€νμ± λ§μΌλ‘λ OCP, DIPλ₯Ό μ§ν¬ μ μλ€.
λκ°κ° λ νμνλ€λ λ§μ΄λ€.
κ·Έκ² λκΉ.
λ΅μ μ€νλ§μ μλ€.
DI, μμ‘΄μ± μ£Όμ μ΄λ€.
μ΄μ¨λ ,
μ΄λ€ μμΉμ΄λ λ°νμλ "μν μ λͺ νν ν΄μΌνλ€"λ μκ°μ νμλ‘ κ°μ ΈμΌ νλ€.
π POJO JAVAλ?
POJO(Plain Old Java Object)
μμν μλ° μ€λΈμ νΈλ₯Ό λ»νλ€.
1. νΉμ κ·μ½μ μ’
μλμ§ μλλ€.
νΉμ Library, Moduleμμ μ μλ ν΄λμ€λ₯Ό μμλ°μμ ꡬννμ§ μμλ λλ€.
POJOκ° λκΈ° μν΄μλ μΈλΆμ μμ‘΄μ±μ λμ§ μκ³ , μμν JAVAλ‘ κ΅¬μ±μ΄ κ°λ₯ν΄μΌνλ€.
2. νΉμ νκ²½μ μ’
μλμ§ μλλ€.
λ§μΌ νΉμ λΉμ¦λμ€ λ‘μ§μ μ²λ¦¬νλ λΆλΆμ
μΈλΆ μ’ μμ μΈ HTTP REQUEST, SESSION λ± POJOλ₯Ό μλ°°ν κ²μΌλ‘ κ°μ£Όνλ€.
λν λ§μ΄ μ¬μ©νκ³ λ μμ§λ§ @Annotation κΈ°λ°μΌλ‘ μ€μ νλ λΆλΆλ
μμ°νλ POJOλΌκ³ λ³Ό μ μλ€.
POJO Framework
Spring, Hibernate
νλμ μλΉμ€λ₯Ό κ°λ°νκΈ° μν΄μλ
μμ€ν
μ 볡μ‘ν¨ , λΉμ¦λμ€ λ‘μ§μ 볡μ‘ν¨ λ± λ€μν μ΄λ €μμ λ§μ΄νκ² λλ€.
μμ λ νλ μ μν¬λ κ°μ²΄μ§ν₯μ μΈ μ€κ³λ₯Ό νκ³ μμΌλ©°, λν POJOλ₯Ό μ§ν₯νκ³ μλ€.
κ·Έλ¬λ―λ‘ κ°λ°μκ° μλΉμ€ λ‘μ§μ μ§μ€νκ³ μ΄λ₯Ό POJOλ‘ μ½κ² κ°λ° ν μ μλλ‘ μ§μνκ³ μλ€.
λ€μ μ§λ¬Έλ€μ μ κΈ°μ΅ν΄λ³΄μ.
μμ μ μ½λμ if/else , switchκ° λ무νκ³ μμ§μμκ°?
μ±
μκ³Ό μν μ΄ λ€λ₯Έ μ½λ νλμ ν΄λμ€μ λ€ λ€μ΄κ° μμ§ μμκ°?
μ μ°¨μ§ν₯μ μΌλ‘ νκ°μ νμΌμ λͺ¨λ μ½λλ₯Ό λ£κ³ μμ§ μμκ°?
λ΄κ° λ§λ κ°μ²΄κ° μ¬μ¬μ©μ΄ κ°λ₯νκ°?
'μ΄λ‘ > Study' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ°Έμ‘°μλ£ν reference data type (0) | 2021.07.19 |
---|---|
μμ±μ Constructor (0) | 2021.07.19 |
κ°μ²΄ μ§ν₯ μΈμ΄μ λ©λͺ¨λ¦¬ ꡬ쑰μ νΉμ§ OOP Memory (0) | 2021.07.15 |
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° Object-Oriented Programming(OOP)μ΄λ (0) | 2021.07.15 |
[JAVA] κ°μ²΄μ§ν₯μμμ 물리 κ°μ²΄μ κ°λ κ°μ²΄ / μμ§λμ κ²°ν©λ (0) | 2021.06.03 |