- data νμ μ, λ°μ΄ν° ν΄λμ€μ μ₯μ
- ν¨μνμ μΌλ‘ μ»λ μ½λμ μμ
- νκ·Έ ν΄λμ€ vs. ν΄λμ€ κ³μΈ΅ (sealed, abstractνμ μ)
1. μ± μμ κΈ°μ΅νκ³ μΆμ λ΄μ©
data νμ μ, λ°μ΄ν°λ€μ νκΊΌλ²μ μ λ¬ν΄μΌ ν λ μ¬μ©νλ ν΄λμ€μ λΆμ΄μλ κ²μ νμΈν μ μλ€. μ΄ νμ μλ₯Ό λΆμ΄λ©΄ μλμ ν¨μλ€μ΄ μλμΌλ‘ μμ±λλ€.
- toString : λ‘κ·Έ μΆλ ₯ λ° λλ²κ·Έ μ νμ©
- equals, hashCode
- copy : immuatable λ°μ΄ν° ν΄λμ€λ₯Ό λ§λ€ λ νΈλ¦¬, κΈ°λ³Έ μμ±μ νλ‘νΌν°κ° κ°μ μλ‘μ΄ κ°μ²΄λ₯Ό 볡μ
- componentN : μμΉλ₯Ό κΈ°λ°μΌλ‘ κ°μ²΄λ₯Ό ν΄μ (μμΉλ₯Ό μλͺ» μ§μ νμ¬ ν΄μ ν λ, λ€μν λ¬Έμ κ° λ°μν μ μμ)
μ½νλ¦°μ ννμΈ Pair, Triple : ννμ SerializableκΈ°λ°μΌλ‘ μμ±λμ΄ toStringμ μ¬μ©ν μ μλ μ λ€λ¦ λ°μ΄ν° ν΄λμ€μ΄λ€.
ννμ μ¬μ©νλ κ²½μ°
- κ°μ κ°λ¨νκ² μ΄λ¦μ λΆμΌ λ
- νμ€ λΌμ΄λΈλ¬λ¦¬μμ λ³Ό μ μλ κ²μ²λΌ 미리 μ μ μλ aggregateλ₯Ό ννν λ
μ΄ κ²½μ°λ€μ μ μΈνκ³ λ 무쑰건 λ°μ΄ν° ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
λ°μ΄ν° ν΄λμ€μ μ₯μ
- ν¨μμ λ¦¬ν΄ νμ
μ΄ λ λͺ
νν΄ μ§λ€.
- λ¦¬ν΄ νμ
μ΄ λ μ§§μμ§λ©°, μ λ¬νκΈ° μ¬μμ§λ€.
- μ¬μ©μκ° λ°μ΄ν° ν΄λμ€μ μ ν μλ κ²κ³Ό λ€λ₯Έ μ΄λ¦μ νμ©ν΄ λ³μλ₯Ό ν΄μ νλ©΄, κ²½κ³ κ° μΆλ ₯λλ€.
λ°μ΄ν° ν΄λμ€λ μ½νλ¦°μμ ν° λΉμ© μμ΄ μ¬μ©ν μ μλ μ’μ λꡬμ΄λ―λ‘ μ κ·Ήμ μΌλ‘ νμ©ν κ².
λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μλ ν¨μ νμ
μ κ°λ
μ΄ μμ΄ SAM μΈν°νμ΄μ€λ₯Ό νμ©νλ€.
SAM Interface : Single-Abstract Method Interface (μ°μ° λλ μ‘μ
μ μ λ¬ν λ λ©μλκ° νλλ§ μ‘΄μ¬νλ μΈν°νμ΄μ€)
ν¨μ νμ
μΌλ‘ μ»λ μ½λμ μμ
- λλ€ ννμ λλ μ΅λͺ
ν¨μλ‘ μ λ¬
- λλ€ ννμ μ¬μ© μ destructure argumentλ μ¬μ© κ°λ₯
- ν¨μ λ νΌλ°μ€ λλ μ νλ ν¨μ λ νΌλ°μ€λ‘ μ λ¬
- μ μΈλ ν¨μ νμ
μ ꡬνν κ°μ²΄λ‘ μ λ¬
- νμ
λ³μΉμ ν΅ν΄ ν¨μ νμ
λ μ΄λ¦μ λΆμΌ μ μλ€.
SAMμ μ¬μ©ν΄μΌ νλ κ²½μ°, μ½νλ¦°μ΄ μλ λ€λ₯Έ μΈμ΄μμ μ¬μ©ν ν΄λμ€λ₯Ό μ€κ³ν λ.
javaμμλ μΈν°νμ΄μ€κ° λ λͺ
ννκΈ° λλ¬Έμ ν¨μ νμ
μΌλ‘ λ§λ€μ΄μ§ ν΄λμ€λ μλ°μμ νμ
λ³μΉκ³Ό IDEμ μ§μμ μ λλ‘ λ°μ μ μλ€.
μμ(constant) λͺ¨λλ₯Ό νκ·ΈλΌκ³ λΆκ·Έλ‘ μ΄λ¬ν νκ·Έλ₯Ό ν¬ν¨ν ν΄λμ€λ₯Ό νκ·Έ ν΄λμ€λΌκ³ ν¨.
νκ·Έ ν΄λμ€μ λ¬Έμ
- μλ‘ λ€λ₯Έ μ±
μμ ν ν΄λμ€μ νκ·Έλ‘ κ΅¬λΆν΄μ λ£λλ€λ κ²μμλΆν° μμνλ€.
- ν ν΄λμ€μ μ¬λ¬ λͺ¨λλ₯Ό μ²λ¦¬νκΈ° μν μμ©κ΅¬κ° μΆκ°λλ€.
- μ¬λ¬ λͺ©μ μΌλ‘ μ¬μ©ν΄μΌ νλ―λ‘ νλ‘νΌν°κ° μΌκ΄μ μ΄μ§ μκ² μ¬μ©λκ³ λ λ§μ νλ‘νΌν°κ° νμνλ€.
- μμκ° μ¬λ¬ λͺ©μ μ κ°μ§κ³ , μ¬λ¬ λ°©λ²μΌλ‘ μ€μ ν μ μλ κ²½μ°μλ μνμ μΌκ΄μ±κ³Ό μ νμ±μ μ§ν€κΈ° μ΄λ ΅λ€.
- ν©ν 리 λ©μλλ₯Ό μ¬μ©ν΄μΌ νλ κ²½μ°κ° λ§λ€.
κ·Έλμ μΌλ°μ μΌλ‘ sealed ν΄λμ€λ₯Ό λ§μ΄ μ¬μ©νλ€.
ν ν΄λμ€μ μ¬λ¬ λͺ¨λλ₯Ό λ§λλ λ°©λ² λμ μ, κ°κ°μ λͺ¨λλ₯Ό μ¬λ¬ ν΄λμ€λ‘ λ§λ€κ³ νμ
μμ€ν
κ³Ό λ€νμ±μ νμ©.
sealed νμ μ
- μΈλΆ νμΌμμ μΆκ°μ μΈ μλΈ ν΄λμ€λ₯Ό λ§λλ νμ μ체λ₯Ό μ ννλ€.
- μΈλΆμμ μΆκ°μ μΈ μλΈ ν΄λμ€λ₯Ό λ§λ€ μ μμΌλ―λ‘, νμ
μ΄ μΆκ°λμ§ μμ κ²μ΄ 보μ₯λλ€.
- whenμ μμ elseλ₯Ό λ°λ‘ λ§λ€ νμκ° μλ€.
- ν΄λμ€μ μλΈ ν΄λμ€λ₯Ό μ μ΄νκΈ° μν΄μλ sealed νμ μλ₯Ό μ¬μ©νλ€.
abstract νμ μ
- λ€λ₯Έ κ°λ°μκ° μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄μ μ¬μ©ν μ μλ€.
- κ³μΈ΅μ μλ‘μ΄ ν΄λμ€κ° μΆκ°λ μ μλ μ¬μ§λ₯Ό λ¨κΈ°κΈ° λλ¬Έμ μμκ³Ό κ΄λ ¨λ μ€κ³λ₯Ό ν λ μ¬μ©νλ€.
μν ν¨ν΄(status pattern)
- κ°μ²΄μ λ΄λΆ μνκ° λ³νν λ, κ°μ²΄μ λμμ΄ λ³νλ μννΈμ¨μ΄ λμμΈ ν¨ν΄.
- νλ‘ νΈμνΈ μ»¨νΈλ‘€λ¬, νλ μ ν°, λ·° λͺ¨λΈμ μ€κ³ν λ λ§μ΄ μ¬μ©λλ€.
- μν ν¨ν΄μ μ¬μ©νμ¬ νλ‘μ νΈμ μ μ© μ μλ‘ λ€λ₯Έ μνλ₯Ό λνλ΄λ ν΄λμ€ κ³μΈ΅κ΅¬μ‘°λ₯Ό λ§λ€κ² λλ©°, νμ¬ μνλ₯Ό λνλ΄κΈ° μν μ½κ³ μΈ μ μλ νλ‘νΌν°λ λ§λ€κ² λλ€. λ°λΌμ μνλ λ λ§μ μ±
μμ κ°μ§ ν° ν΄λμ€μ΄λ©° λ³κ²½λ μ μλ€.
- (νμ
κ³μΈ΅) νκ·Έ ν΄λμ€λ³΄λ€λ sealed ν΄λμ€ κ³μΈ΅μΌλ‘ λ§λ€μ΄μ§λ©°, μ΄λ₯Ό immutable κ°μ²΄λ‘ λ§λ€κ³ λ³κ²½ν΄μΌ ν λλ§λ€, state νλ‘νΌν°λ₯Ό λ³κ²½νλ©° viewμμ ν΄λΉ λ³νλ₯Ό observe νλλ‘ νλ€.
μ½νλ¦°μμλ νκ·Έ ν΄λμ€λ³΄λ€ νμ κ³μΈ΅μ μ¬μ©νλ κ²μ΄ λ μ’κ³ μ΄λ¬ν νμ κ³μΈ΅μ sealed ν΄λμ€λ₯Ό μ¬μ©νλ€. μ΄ κ²μ μν ν¨ν΄κ³Όλ λ€λ₯΄λ―λ‘ κ΅¬λ³μ ν΄μΌ νλ€. νμ κ³μΈ΅κ³Ό μν ν¨ν΄μ μ€μ§μ μΌλ‘ ν¨κ» μ¬μ©λλ νλ ₯ κ΄κ³μ μλ€.
'π» κ°λ°μ μ΄μΌκΈ° > βοΈ μ λ¦¬λ ΈνΈ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
2λΆ μ½λμ€κ³ > 4μ₯ μΆμν μ€κ³ (0) | 2022.09.27 |
---|---|
2λΆ μ½λμ€κ³ > 6μ₯ ν΄λμ€ μ€κ³ > equals, hashCode, compareTo / νμ₯ν¨μ (0) | 2022.09.27 |
2λΆ μ½λμ€κ³ > 6μ₯ ν΄λμ€ μ€κ³ > μμ보λ€λ μ»΄ν¬μ§μ μ μ¬μ©νλΌ (0) | 2022.09.01 |
2λΆ μ½λμ€κ³ > 3μ₯ μ¬μ¬μ©μ± (0) | 2022.07.27 |
[TIL] 8μ₯ νλ‘μ νΈ μ μ , 9μ₯ μ€μ©μ£Όμ νλ‘μ νΈ (0) | 2022.06.25 |