μ±ν° 1 μ¬λμ μ¬λν κΈ°μ
μ€νλ§ νλ μμν¬μ κ°λ μ OOP νλ μμν¬μ΄λ€
μ€νλ§ μΌκ°ν IoC/DI, AOP, PSA
μλ° μμμΌ ν κ²
- OOP κ°λ
- μλ° μΈμ΄μ λ¬Έλ²
- μλ°κ° OOP κ°λ μ ꡬνν λ°©μ
μ±ν° 2 μλ°μ μ μ°¨μ /ꡬ쑰μ νλ‘κ·Έλλ°
main() λ©μλ(νλ‘κ·Έλ¨μ΄ μ€νλλ μμμ )κ° μ€νλ λ Tλ©λͺ¨λ¦¬μλ μ΄λ€ μΌμ΄ μΌμ΄λλμ§?
- JREκ° νλ‘κ·Έλ¨ μμ main() λ©μλ νμΈ
- μμ κ²½μ°, JVM λΆν
- JVMμ λͺ©μ νμΌμ λ°μ μ€ν
- JVMμ μ μ²λ¦¬ κ³Όμ μν
- java.lang ν¨ν€μ§λ₯Ό T λ©λͺ¨λ¦¬μ μ€νν± μμμ λ°°μΉ
- κ°λ°μκ° μμ±ν λͺ¨λ ν΄λμ€μ μν¬νΈ ν¨ν€μ§λ₯Ό μ€νν± μμμ λ°°μΉ
λ©ν° μ€λ λμ λ©ν° νλ‘μΈμ€λ?
λ©ν° μ€λ λ(Multi Thread)
- λ©ν° μ°λ λμ Tλ©λͺ¨λ¦¬ λͺ¨λΈμ μ€ν μμμ μ€λ λ κ°μλ§νΌ λΆν ν΄μ μ¬μ©
- μ°Έκ³ λ‘, μλΈλ¦Ώμ μμ²λΉ μ€λ λλ₯Ό μμ±
λ©ν° νλ‘μΈμ€(Multi Process)
- λ€μμ λ°μ΄ν° μ μ₯ μμ, μ¦ λ€μμ T λ©λͺ¨λ¦¬λ₯Ό κ°μ§
μ€νν± : ν΄λμ€λ€μ λμ΄ν°
μ€ν : λ©μλμ λμ΄ν°
ν : κ°μ²΄μ λμ΄ν°
μ±ν° 3 μλ°μ κ°μ²΄ μ§ν₯
κ°μ²΄μ§ν₯μ 4λ νΉμ±
- μΊ‘μν(μ 보 μλ), μμ(μ¬μ¬μ©), μΆμν(λͺ¨λΈλ§), λ€νμ±(μ¬μ©νΈμ)
UML νκΈ°λ²μμ ν΄λμ€ λ©€λ²(static)λ λ°μ€μ κ·Έμ΄ νκΈ°
ν΄λμ€ λ©€λ² = static λ©€λ² = μ μ λ©€λ²
-> JVM ꡬλ μ T λ©λͺ¨λ¦¬μ μ€νν± μμμ λ°λ‘ λ°°μΉλκΈ° λλ¬Έμ κ°μ²΄μ μ‘΄μ¬ μ¬λΆμ κ΄κ³μμ΄ μΈ μ μμ
LSP(리μ€μ½νμ μΉν μμΉ)
-> νμ ν΄λμ€λ μμ ν΄λμ€λ€
κ°μ²΄μ ν΄λμ€λ₯Ό μ λνλ΄λλ‘ λ³μλͺ μμ±
ex) Bird aBird λλ Bird theBird
μΈν°νμ΄μ€λ be able to "무μμ ν μ μλ" νν ννλ‘ λ§λ λ€
ex) Serializable, Cloneable, Comparable, Runnable
μμ ν΄λμ€λ νμ ν΄λμ€μ νΉμ±(μμ± + λ©μλ)μ μμν΄ μ£Όκ³ ,
μΈν°νμ΄μ€λ ν΄λμ€κ° '무μμ ν μ μλ€' λΌκ³ νλ κΈ°λ₯μ ꡬννλλ‘ κ°μ ν¨
-> μμ ν΄λμ€λ λ¬Όλ €μ€ νΉμ±μ΄ λ§μ μλ‘ μ’κ³ (LSP 리μ€μ½ν μΉν μμΉ)
-> μΈν°νμ΄μ€λ ꡬνμ κ°μ ν λ©μλμ κ°μκ° μ μμλ‘ μ’μ (ISP μΈν°νμ΄μ€ λΆν μμΉ)
νμ ν΄λμ€μ μΈμ€ν΄μ€κ° μμ±λλ©΄ μμ ν΄λμ€μ μΈμ€ν΄μ€λ ν¨κ» μμ±λ¨
μ±ν° 4 μλ°κ° νμ₯ν κ°μ²΄ μ§ν₯
JUnit @BeforeClass
-> static λΈλ‘ (p.157)
μΈν°νμ΄μ€λ μΆμ λ©μλμ μ μ μμλ§ κ°μ§ μ μμ
-> public static final / public abstract
κ·Όλ° μλ° 8λΆν° λλ€ μκΈ°κ³ μ΄μ λν΄νΈ λ©μλλΌκ³ νλ ꡬμ λ©μλμ μ μ μΆμ λ©μλ μ§μν¨
μ±ν° 5 κ°μ²΄ μ§ν₯ μ€κ³ 5μμΉ
SOLID
- SRP(Single Responsibility Principle): λ¨μΌ μ±
μμ μμΉ
- μ΄λ€ ν΄λμ€λ₯Ό λ³κ²½ν΄μΌ νλ μ΄μ λ μ€μ§ νλλΏμ΄μ΄μΌ νλ€.
- λΆκΈ°μ²λ¦¬λ₯Ό μν ifλ¬Έμ΄ λ©μλμμ 보μ΄λ©΄ SRPλ₯Ό μλ°ν κ²μ΄ μλμ§ μμ¬ν΄λ΄μΌ ν¨
- OCP(Open Closed Principle): κ°λ°© νμ μμΉ
- μμ μ νμ₯μλ μ΄λ € μκ³ , μ£Όλ³μ λ³νμλ λ«νμμ΄μΌ νλ€.
- μ’μ μ: JDBC, μ€νλ§ νλ μ μν¬
- LSP(Liskov Substitution Principle): 리μ€μ½ν μΉν μμΉ
- μλΈ νμ μ μΈμ λ μμ μ κΈ°λ° νμ μΌλ‘ κ΅μ²΄ν μ μμ΄μΌ νλ€.
- ISP(Interface Segregation Principle): μΈν°νμ΄μ€ λΆλ¦¬ μμΉ
- ν΄λΌμ΄μΈνΈλ μμ μ΄ μ¬μ©νμ§ μλ λ©μλμ μμ‘΄ κ΄κ³λ₯Ό λ§ΊμΌλ©΄ μ λλ€.
- DIP(Dependency Inversion Principle): μμ‘΄ μμ μμΉ
- μμ λ³΄λ€ λ³νκΈ° μ¬μ΄ κ²μ μμ‘΄νμ§ λ§λΌ.
- λ³νκΈ° μ¬μ΄ κ²μ μμ‘΄νλ κ²μ μΆμνλ μΈν°νμ΄μ€λ μμ ν΄λμ€λ₯Ό λ§λ€μ΄ λ³νκΈ° μ¬μ΄ κ²μ λ³νμ μν₯λ°μ§ μκ² νλ κ²
SRPμ ISPλ κ°μ λ¬Έμ μ λν λ€λ₯Έ ν΄κ²°λ°©λ²μ΄λΌκ³ λ³Ό μ μλλ° νΉλ³ν κ²½μ°κ° μλλ©΄ λ¨μΌ μ± μ μμΉμ μ μ©νλ κ²μ΄ μ’λ€.
μ±ν° 6 μ€νλ§μ΄ μ¬λν λμμΈ ν¨ν΄
λμμΈ ν¨ν΄μ κ°μ²΄ μ§ν₯μ νΉμ± μ€ μμ(extends), μΈν°νμ΄μ€(interface/implements), ν©μ±(κ°μ²΄λ₯Ό μμ±μΌλ‘ μ΄μ©)μ μ΄μ©ν¨.
μ΄ 8κ°μ§μ ν¨ν΄
1. Adapter Pattern
- μλ‘ λ€λ₯Έ λ μΈν°νμ΄μ€ μ¬μ΄μ ν΅μ μ΄ κ°λ₯νκ² νλ κ²
- ODBC/JDBCκ° μ΄λν° ν¨ν΄μ μ΄μ©ν΄ λ€μν λ°μ΄ν°λ² μ΄μ€ μμ€ν μ λ¨μΌν μΈν°νμ΄μ€λ‘ μ‘°μν μ μλλ‘ ν΄μ€
- SOLID μ€ OCP νμ©ν μ€κ³ ν¨ν΄
- ν©μ±μ μ¬μ©
2. Proxy Pattern
- μ μ΄ νλ¦μ μ‘°μ νκΈ° μν λͺ©μ μΌλ‘ μ€κ°μ λ리μλ₯Ό λλ ν¨ν΄
- λ리μλ μ€μ μλΉμ€μ κ°μ μ΄λ¦μ λ©μλ ꡬν. μΈν°νμ΄μ€ μ¬μ©
- λ리μλ μ€μ μλΉμ€μ λν μ°Έμ‘° λ³μλ₯Ό κ°μ§(ν©μ±)
- λ리μλ μ€μ μλΉμ€μ κ°μ μ΄λ¦μ κ°μ§ λ©μλλ₯Ό νΈμΆνκ³ , κ·Έ κ°μ ν΄λΌμ΄μΈνΈμκ² λλ €μ€
- λ리μλ μ€μ μλΉμ€μ λ©μλ νΈμΆ μ νμ λ³λμ λ‘μ§ μν κ°λ₯
- SOLID μ€ OCP λ° DIP μ¬μ©
3. Decorator Pattern
- νλ‘μ ν¨ν΄κ³Ό ꡬν λ°©λ² λμΌ. λ¨, λ°μ½λ μ΄ν° ν¨ν΄μ ν΄λΌμ΄μΈνΈκ° λ°λ λ°νκ°μ μ₯μμ λ§μ ν
4. Singleton Pattern
- ν΄λμ€μ μΈμ€ν΄μ€(κ°μ²΄)λ₯Ό νλλ§ λ§λ€μ΄μ μ¬μ©ν μ μκ² ν¨
- νμν 쑰건
- 1. newλ₯Ό μ€νν μ μλλ‘ μμ μμ private μ κ·Ό μ μ΄μ μ§μ
- 2. μ μΌν λ¨μΌ κ°μ²΄λ₯Ό λ°νν μ μλ μ μ λ©μλκ° νμν¨
- 3. μ μΌν λ¨μΌ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μ μ°Έμ‘° λ³μκ° νμν¨ -> μ°Έμ‘°νλ λ¨μΌ κ°μ²΄λ₯Ό λ°ννλ getInstance() μ μ λ©μλλ₯Ό κ°μ§
- 4. λ¨μΌ κ°μ²΄λ μ°κΈ° κ°λ₯ν μμ±μ κ°μ§ μλ κ²μ΄ μ’μ
5. Template Method Pattern
- μμ ν΄λμ€μ 견본 λ©μλμμ νμ ν΄λμ€κ° μ€λ²λΌμ΄λ©ν λ©μλλ₯Ό νΈμΆνλ ν¨ν΄
6. Factory Method Pattern
- μ€λ²λΌμ΄λλ λ©μλκ° κ°μ²΄λ₯Ό μμ±ν΄μ λ°ννλ λ©μλ
7. Strategy Pattern
- μ λ΅ ν¨ν΄μ ꡬμ±νλ μμ
- 1. μ λ΅ λ©μλλ₯Ό κ°μ§ μ λ΅ κ°μ²΄
- 2. μ λ΅ κ°μ²΄λ₯Ό μ¬μ©νλ 컨ν μ€νΈ(μ λ΅ κ°μ²΄μ μ¬μ©μ/μλΉμ)
- 3. μ λ΅ κ°μ²΄λ₯Ό μμ±ν΄ 컨ν μ€νΈμ μ£Όμ νλ ν΄λΌμ΄μΈνΈ(μ 3μ, μ λ΅ κ°μ²΄μ 곡κΈμ)
- ν νλ¦Ώ λ©μλ ν¨ν΄κ³Ό μ μ¬νλ°, κ°μ λ¬Έμ μ λν΄ μμμ μ΄μ©νλ ν νλ¦Ώ λ©μλ ν¨ν΄κ³Ό, κ°μ²΄ μ£Όμ μ ν΅ν μ λ΅ ν¨ν΄ μ€μμ μ ννμ¬ μ μ© κ°λ₯. νμ§λ§, μλ°μ κ²½μ°, λ¨μΌ μμλ§μ΄ κ°λ₯νκΈ° λλ¬Έμ μμμ μ νμ΄ μμ΄ μ λ΅ ν¨ν΄μ΄ λ λ§μ΄ μ¬μ©λ¨
8. Template Callback Pattern
- μ λ΅ ν¨ν΄μ λ³ν
- μ€νλ§ DIμμ μ¬μ©
- μ λ΅μ μ΅λͺ λ΄λΆ ν΄λμ€λ‘ μ μν΄μ μ¬μ©
λ΄λΆν΄λμ€λ outer class μμ ꡬνλ¨. λ΄λΆ ν΄λμ€λ μΈλΆ ν΄λμ€μ λ΄μ©μ μ¬μ©ν μ μλ€. μ¬μ§μ΄ private ν λ©μλλ λ³μλ μ¬μ© κ°λ₯. λ΄λΆ ν΄λμ€λ outer classμ μμ±νλ€. νμ§λ§ μ΄μ λλ€κ° λ΄λΆν΄λμ€μ μν μ λ μ½κΈ° μ½κ³ λ κ°κ²°ν λ°©λ²μΌλ‘ λ체ν μ μλ€.
μ°Έκ³ μλ£
https://zdnet.co.kr/view/?no=00000039134727
https://www.nextree.co.kr/p6960/
// TODO
μΆμ²νλ μ± : Taeyo's ASP, MS-SQL, ν λΉμ μ€νλ§
λΆλ‘B λλ€ κ³΅λΆ
'λ μ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λ°₯ λ¨Ήμ¬μ£Όλ κ²½μ ν (0) | 2024.10.19 |
---|---|
νλ‘κ·Έλλ¨Έμ κΈΈ, λ©ν μκ² λ¬»λ€ (0) | 2024.08.29 |
μ¬ν μννΈμ¨μ΄ (2) | 2024.01.25 |
μ€νλ§ μΈ μ‘μ (3ν) (0) | 2023.03.18 |
ν€λ νΌμ€νΈ λμμΈ ν¨ν΄ (0) | 2022.11.05 |
λκΈ