Week 2
: λλ¦ κ³΅λΆλ ν κ² κ°μλ°
βοΈ μ€λμ μ λ² μ£Όμ μ μμ§ λͺ»νλ κ²μ λν λ΅λ³ μκ°κ³Ό μ± μ μ½μΌλ©° μλ‘κ² κ³΅λΆν κ²λ€μ λν μ΄μΌκΈ°λ€μ λλμκ³ , νΌλλ°±μΌλ‘λ μ΄λ€ ν μ£Όλ₯Ό 보λλμ§, ν μ£Όλ₯Ό λ³΄λΈ κ²°κ³Όλ‘ λ©ν λ§μμ μ΄λ€ κ²μ λλΌκ³ μ»μλμ§ κΈ°λ‘νλ € νλ€.
Q : κ°μ΄μ μμ μΉκ³ , μ΄λ² μ£Όλ μ΄μ¬ν μ΄μλκ°?
A : λΆλλ½μ§λ§ μ΄μ¬ν μ΄μ§ λͺ»νλ€. λ€μ³€λ€λ νκ³λ‘ μ£Όλ§μλ λ°λμ μ΄μ μΉ¨λμμ λμ€μ§ μμλ€.
λλ¦ λ°μ±μ μλ―Έλ‘ μΆν΄κ·Ό μ€μ μ± μ μ½μΌλ € λ Έλ ₯νμ§λ§ ν κΈμλ μ½νμ§ μμλ€. μ¬μ€μ μ€ν¨μ ν μ£ΌλΌκ³ μκ°λλ€.
1. Reference Type / Primitive Type
- Reference Type
Reference Type μ λν΄μ μ λλ‘ μ€λͺ νμ§ μκ³ κ°μκΈ° String ν΄λμ€μ λν μ€λͺ μ μμν¨. κ·Έλ λ€κ³ String ν΄λμ€μ λν΄ μ λλ‘ μ€λͺ νμ§λ λͺ»ν¨. λΉ΅μ .
- Primitive Type
κ·Έλ₯ 'κΈ°λ³Έ μλ£ν' μ΄λΌκ³ λ§ νμΉκ³ Wrapper ν΄λμ€λ₯Ό μ€λͺ νλ 맀μ§μ μ μ¬νλ€. κ·Έλ λ€κ³ Wrapper ν΄λμ€μ μ μλ μ νν λ§νμ§ λͺ»νλ€. -100μ .
βοΈ λ€μ μ 리νκΈ°
π Primitive Type
- κΈ°λ³Έ μλ£νμΌλ‘ λ€μκ³Ό κ°μ μ νμ νμ
λ€μ΄ μ‘΄μ¬νλ€.
λ Όλ¦¬ν - boolean
λ¬Έμν - char
μ μν - byte, short, int, long
μμν - float, double - 리ν°λ΄λ‘ μ μΈλλ©° μ»΄νμΌ μ, JVMμ μν΄ Stack λ©λͺ¨λ¦¬μ μμ±λλ€.
- κ° νμ
λ³λ‘ λ©λͺ¨λ¦¬μ μμ±λλ ν¬κΈ°κ° λ€λ₯΄λ©°, ν΄λΉ ν¬κΈ°λ₯Ό λ²μ΄λ κ²½μ° λ©λͺ¨λ¦¬μμ ν¬κΈ°κ° μ»€μ Έ κ·Έ μ΄μμ κ°μΌλ‘ λμ΄κ°μ§ μκ³ μ΅λκ°μ μ΄κ³Όν κ²½μ° μ΅μκ°μΌλ‘, μ΅μκ° λ―Έλ§μΌ κ²½μ° μ΅λκ°μΌλ‘ κ°μ΄ λ³κ²½λλ Overflow / Underflow νμμ΄ λ°μνλ€.
λλ¬Έμ μ μν νμ μ ν¬κΈ°λ₯Ό κ³ λ €νμ§ μκ³ μ€κ³ν κ²½μ° μλͺ»λ κ°μΌλ‘ μΈν΄ μλΉμ€μ λ¬Έμ κ° λ°μ ν μ μλ€. - double κ³Ό float νμ
μ κ·Όμ¬κ°μ λ΄λ €μ£Όλ λΆλμμνμ
μΌλ‘ ν΄λΉ νμ
μΌλ‘ μ°μ° μ, μ νν κ°μ΄ λμΆλμ§ μμ μ μλ€.
λλ¬Έμ μ νν μ€μ κ³μ°μ μν΄μλ BigDecimal ν΄λμ€λ₯Ό μ΄μ©νλ κ²μ΄ μ’λ€. - κΈ°λ³Έ μλ£νμ λΆλ³μ μμΉμ΄ μ μ©λμ΄ λ€λ₯Έ κ°μ κ°μ§ λ³μλ‘ μ¬μ μνκ±°λ λ€λ₯Έ κ°μΌλ‘ μ΄κΈ°ννμ§ μλ μ΄μ μ²μ μ μΈλμμ λ κ°μμ λ³νμ§ μλλ€.
(Pass by Value μμΉμ΄ μ μ©λμ΄ λ©μλμ λ§€κ° λ³μλ‘ μ λ¬λκ±°λ ν λ, νΈμΆλ λ©μλκ° ν΄λΉ λ³μλ₯Ό μ°Έμ‘°νλ κ²μ΄ μλλΌ λμΌν κ°μ λ³μλ₯Ό Stack λ©λͺ¨λ¦¬μ μλλ€. μ¦, μΈμλ‘ μ λ¬λ μλ³Έ λ³μλ₯Ό 볡μ¬νλ€λ μλ―Έλ€.) - Java 8 λΆν° Autoboxing / Unboxing μ΄ μ§μλμ΄,
(κΈ°λ³Έ μλ£ν -> Wrapper Class), (Wrapper Class -> κΈ°λ³Έ μλ£ν)μΌλ‘ μλνλ³νμ΄ μνλλ€.
π Reference Type
- μ°Έμ‘° μλ£νμΌλ‘ λͺ¨λ μ°Έμ‘° μλ£νμ java.lang.Object ν΄λμ€λ₯Ό μμ λ°λλ€.
- μ°Έμ‘° μλ£νμ μ»΄νμΌ μ, JVMμ μν΄ Heap λ©λͺ¨λ¦¬ μμμ κ°μ μ μ₯ ν μ μλ μμμ ν λΉ λ°μΌλ©°, ν λΉ λ°μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό Stack λ©λͺ¨λ¦¬μ λ³μμ ν¨κ» μ μ₯νλ€.
- μ°Έμ‘° μλ£νμ κΈ°λ³Έ μλ£νκ³Ό λ€λ₯΄κ² λ³νλ μμ±μ κ°μ§λ©°, κ°μ΄ μ¬μ μ λκ±°λ μ΄κΈ°ν λ κ²½μ° Heap λ©λͺ¨λ¦¬μ μ‘΄μ¬νλ κΈ°μ‘΄μ κ°μ Stack λ©λͺ¨λ¦¬μμ λμ΄μ μ°Έμ‘°νμ§ μμ λ, Garbage Collector(μ΄ν GC)μ μν΄ λ©λͺ¨λ¦¬ μμμ μ¬λΌμ§λ€.
λ€λ§, String ν΄λμ€μ Wrapper ν΄λμ€λ λΆλ³μ μμΉμ΄ μ μ©λλλ°, λ©ν° μ€λ λ νκ²½μμ λμΌμ±μ 보μ₯νκΈ° μν΄μμ΄λ©°, java.utilμ μν ν΄λμ€λ€μ λ§€κ° λ³μλ‘ κΈ°λ³Έ μλ£νμ΄ μλ μ°Έμ‘° μλ£νλ§μ μΈμλ‘ λ°κΈ° λλ¬Έμ΄λ€. - νΈμΆλ λ©μλμ λ§€κ° λ³μλ‘ μ λ¬λ λ, Pass by Reference μμΉμ μν΄ κ°μ΄ 볡μ¬λλ κ²μ΄ μλλΌ ν΄λΉ κ°μ΄ ν λΉλμ΄ μλ Heap λ©λͺ¨λ¦¬ μ£Όμλ₯Ό κΈ°μ‘΄ λ³μμ ν¨κ» μ°Έμ‘°νλ€.
(μ¦, μ°Έμ‘° μλ£νμ΄ μλ‘μ΄ λ³μλ‘ ν λΉλ λ, Heap λ©λͺ¨λ¦¬μ μλ‘κ² κ°μ΄ μμ±λλκ² μλλΌ ν΄λΉ κ°μΌλ‘ μ μλ λͺ¨λ λ³μκ° κΈ°μ‘΄μ Heap λ©λͺ¨λ¦¬μ ν λΉλ κ°μ μ£Όμλ₯Ό μ°Έμ‘°νλ€.) - String
- String ν΄λμ€μ κ²½μ° λ€λ₯Έ μ°Έμ‘° μλ£νκ³Ό λ¬λ¦¬ λΆλ³μ μμΉμ΄ μ μ©λλ€.
- 리ν°λ΄λ‘ μ μΈλ String ν΄λμ€μ κ²½μ°, String Poolμ ν΄λΉ κ°μ΄ μ μ₯λλ©° λ§μ½ κ°μ λ¬Έμμ΄λ‘ μλ‘μ΄ λ³μκ° μ μΈλλ©΄ intern() λ©μλκ° μλμΌλ‘ νΈμΆλμ΄ κ°μ₯ λ¨Όμ String Poolμμ κ°μ λ¬Έμμ΄μ΄ μ‘΄μ¬νλμ§ νμ
νκ³
λ§μ½ μ‘΄μ¬νλ€λ©΄ ν΄λΉ κ°μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό, μ‘΄μ¬νμ§ μλλ€λ©΄ String Poolμ μλ‘κ² κ°μ ν λΉνκ³ ν λΉλ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό Stackμ μ μ₯νλ€. - String ν΄λμ€λ μμ±μλ₯Ό ν΅ν΄μλ μ΄κΈ°ν ν μ μλλ°, μ΄ λ 리ν°λ΄λ‘ μ΄κΈ°ν λ String ν΄λμ€μλ λ¬λ¦¬ Heap λ©λͺ¨λ¦¬μ ν΄λΉ κ°μ ν λΉ λ°κ³ , λ©λͺ¨λ¦¬ μ£Όμλ₯Ό Stackμ μ μ₯νλ€.
- μμ±μλ₯Ό ν΅ν΄ μ΄κΈ°νλ String λ³μλ€μ λκ°μ λ¬Έμμ΄μ΄λΌκ³ ν΄λ,
Heap λ©λͺ¨λ¦¬μ ν λΉλ μμμ΄ κ° λ³μλ§λ€ λ€λ₯΄κΈ° λλ¬Έμ λλ±λΉκ΅μ°μ°μ(==)λ‘ λΉκ΅ νμ λ falseκ° λ¦¬ν΄λλ€.
(μ¦, λκ°μ λ¬Έμμ΄μ΄ Heap λ©λͺ¨λ¦¬μ μ¬λ¬ κ° μλ€λ μλ―Έμ΄λ€.)
μ΄λ λλ±λΉκ΅μ°μ°μκ° κ°μ²΄λ₯Ό λΉκ΅ ν λ κ°μ²΄μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό λΉκ΅νκΈ° λλ¬ΈμΈλ°, λ¬Έμμ΄ μ체λ₯Ό λΉκ΅νκΈ° μν΄μλ String ν΄λμ€μμ μ¬μ μλ equals() λ©μλλ₯Ό νΈμΆ ν΄μΌνλ€. - String ν΄λμ€λ μ°Έμ‘° ν΄λμ€ μ€ μ μΌνκ² + μ°μ°μ μν ν μ μλ€.
JDK 1.7 μ΄μ μλ + μ°μ° μ, κΈ°μ‘΄ λ¬Έμμ΄ + μλ‘μ΄ λ¬Έμμ΄μ Heap λ©λͺ¨λ¦¬μ μλ‘κ² ν λΉ λ°μ κΈ°μ‘΄μ λ¬Έμμ΄ κ°μ μ°λ κΈ°κ° λμ΄ λ©λͺ¨λ¦¬ μ λ¬Έμ κ° λ§μλλ°, ν΄λΉ λ²μ λΆν° μ»΄νμΌ μ μλμΌλ‘ + μ°μ°μ StringBuilder ν΄λμ€μ append() λ©μλλ‘ μΉνν΄ κΈ°μ‘΄μ Heap λ©λͺ¨λ¦¬μ μ‘΄μ¬νλ κ°μ μ¬μ¬μ©νλλ‘ λ³κ²½λμλ€.
(λ€λ§ forλ¬Έμ΄λ ifλ¬Έμ μ€μ½ν μμμ + μ°μ°μ νκ±°λ μ€λ°κΏμ΄ μΌμ΄λ + μ°μ°μ κΈ°μ‘΄μ λ°©μμΌλ‘ μ°μ°λλ€.)
2. Garbage Collector
GCκ° Stack λ©λͺ¨λ¦¬μμ μ°Έμ‘°νμ§ μλ Heap λ©λͺ¨λ¦¬μ ν λΉλ κ°μ μμμ μ²λ¦¬νλ μ λλ‘ μμ£Ό κ°λ¨νλ§ μκ³ μμλ€.
Hλκ»μ μμ²λκ² μ€λͺ νμ€ λ, λλ μ μ λ§ μ€μν GCλ μ°Ύμλ³΄μ§ μμμκΉ νλ©° νννλ€.
πβοΈ : Stringκ³Ό Reference Type 곡λΆνμλ©΄μ GCμ λν΄μλ 곡λΆνμ ¨κ² μ£ ?
π : (μͺ½νλ¦Ό 80, 무μμ 20) μλ¨, κ·Έλ₯ Stack λ©λͺ¨λ¦¬μμ μ°Έμ‘°νμ§ μλ κ°λ€μ GCκ° μμμ μ²λ¦¬ν΄μ£Όλ μ λλ‘λ§ μκ³ μμ΅λλ€.
μ¬μ€ GCλ μ λ§ μ€μν λΆλΆμ΄μκ³ ,
μΈμ κ° λ μ§λ λͺ¨λ₯΄μ§λ§ μ±λ₯ νλμ μν΄μλΌλ©΄ 무쑰건 μμμΌ νλ μμμΈλ°λ μ΄λ ΅λ€λ μ΄μ λ‘ λ±νμ νλ λ, λ°μ±νλ€.
βοΈ μλμ λ§ν¬λ₯Ό ν΅ν΄ μ‘°κΈ λ μ¬ν νμ΅μ ν΄λ³΄μ!
- Java Referenceμ GC (d2.naver.com/helloworld/329631)
- Java Garbage Collection (d2.naver.com/helloworld/1329)
3. Polymorphism (λ€νμ±)
μ λ³Έμ§μ λ§νμ§ λͺ»νκ³ μ΄λμ λΉλμ΄ μ€λͺ νλ €κ³ νλκ±ΈκΉ!?
μΈκ°κ³Ό λ, Hλ κ·Έλ¦¬κ³ λ©ν λμ λΆλͺ¨μ μμ ν΄λμ€μ λΉμ ν΄μ μ€λͺ νλλ° λ€μ λ€μ΄λ΄λ λ©μ²νκΈ° μ§μ΄ μλ€!
νμ€ : νμ μ λ°λΌμ νλμ΄ λ°λ μ μλ κ²μ μλ―Ένλ€.
(μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ©μ μΈκΈνλ©° λ€νμ±μ λν΄ μ€λͺ )
βοΈ λ€μ μ 리νκΈ°
π λ€νμ±μ΄λ
- κ°μ²΄ μ§ν₯μ νΉμ§ μ€ νλλ‘, μ¬λ¬ ννλ‘ μ μΈνμ¬ νμ
μ λ°λΌ νλμ΄ λ°λ μ μλ κ²μ μλ―Ένλ€.
μ΄λ¬ν λ€νμ±μ νμ©ν λνμ μΈ μλ‘ OverLoading κ³Ό OverRiding μ΄ μ‘΄μ¬νλ©°, λ€νμ±μ ν΅ν΄ κΈ°λ₯μ νμ₯μ΄λ μ μΈλ νμ μ λ³κ²½ μμ΄ κ°μ²΄μ μ£Όμ λ§μΌλ‘ μμ μ΄ κ°λ₯νλ€. λν, μμμ΄λΌλ λ€νμ±μ νΉμ§ μ€ νλλ₯Ό μ΄μ©νμ¬ μ€λ³΅ μ½λλ₯Ό μ€μΌ μ μλ€λ μ΄μ μ΄ μ‘΄μ¬νλ€.
π OverLoading
- λ©μλ μμ±μ μλ‘, λ§€κ° λ³μμ κ°λ§ λ€λ₯΄κ² νμ¬ κ°μ μ΄λ¦μ κ°μ§ λ©μλμ§λ§ κ°κ° λ€λ₯Έ νλμ νκ²λ ꡬννλ κ²μ OverLoadingμ΄λΌ νλ€.
- μμ±μμ κ²½μ°λ κ°λ₯νλ°, μμ±μ μμ± μ λ§€κ° λ³μλ₯Ό λ€λ₯΄κ² λ§λλ κ²λ λ€νμ±μ΄λΌκ³ λ³Ό μ μλ€.
π OverRiding
- λ§ κ·Έλλ‘ μ¬λΌνλ μλ¨μ΄μ²λΌ μμ λ°λ λΆλͺ¨ ν΄λμ€μ μ μΈλ λ©μλλ₯Ό μμ ν΄λμ€μμ μ¬μ μνλ κ²μ μλ―Ένλ€.
(+ μμμ κ°λ κΉμ§ λ€μΌλ‘ μ±κ²¨κ°λ©΄ μ’λ€.)
π ν¨μν μΈν°νμ΄μ€
- μμ§ μ λͺ¨λ₯΄λ λΆλΆμ΄λ€. μ λ§ν¬λ₯Ό ν΅ν΄ 곡λΆνμ!
3. κ°μ²΄λ₯Ό μμ± ν λ, λΆλͺ¨ νΉμ μμμΌλ‘ μμ±νλ λ°©λ²μ λν΄
ArrayList μ LinkedList λ₯Ό ν΅ν΄ μ€λͺ νλ€.
λ³΄ν΅ List<T> list = new ArrayList<>(); μ κ°μ λ°©μμ μ£Όλ‘ μ¬μ©νλλ°, κ°μ₯ ν° μ΄μ λ μ²μλΆν° μ΄λ κ² λ°°μμ μμ μ΅μλ€.
νμ§λ§ λ€νμ±κ³Ό μ°κ²°ν΄μ λ΅λ³ λ리μλ©΄,
λΆλͺ¨ ν΄λμ€λ‘ κ°μ²΄λ‘ μμ± νμ λ μ»λ μ΄μ μ λ€λ₯Έ μμ ν΄λμ€λ‘ λ³κ²½μ΄ μμνκΈ° λλ¬Έμ μ΄λ κ² μ¬μ©νλ κ² κ°λ€.
βοΈ SOLID λ²μΉ μ€,
리μ€μ½ν μΉν λ²μΉμ΄ μ‘΄μ¬νλλ° ν΄λΉ μ§λ¬Έμ μ΄ λ¦¬μ€μ½ν μΉν λ²μΉμ μ΄κΈλλ λ°©λ²μΈκ°?
(λ©ν λκ»μ 꼬리 μ§λ¬ΈμΌλ‘ λμ Έμ£Όμ
¨μ.)
4. System.out.println() / Log
μ€λ¬΄μμ System.out.println() μ¬μ©νλ€κ° μμ²λκ² μλ¨Ήμ κ²½νμ΄ μλ€.
μμ λΆν° μ Logλ‘ μ°μ΄λ³΄λΌκ³ νλμ§ κΆκΈνμ§λ§ κ²μκΉμ§ κΆκΈνμ§ μμλ€.
κ·Έλμ μ΄μ λ μ¬μ ν λͺ¨λ₯Έλ€!
κ·Έλ¦¬κ³ ν΄λΉ μ§λ¬Έμμ μΈλͺ¨μλ λ΅λ³μ νλ€.
νμ¬μμ μ°μ§ λ§λΌκ³ ν΄μ μμΌλ€λ λ₯.. μ μ΄ λ°©μ μ΄λ€.
μ§λ¬Έμ μμ ν΄λΉνλ λ§λ§νλ μ΅κ΄μ λ€μ¬μΌκ² λ€!
5. ν΄λμ€μ μΈν°νμ΄μ€μ μ°¨μ΄
λͺ μΈμμ λΉλμ΄ λ΅λ³νλ€. (μ’μ λΉμ κ° μλλΌλ©΄ λ³λ‘ μ’μ§ λͺ»ν μ΅κ΄)
μΈν°νμ΄μ€μλ λ©μλ μ μΈλ§ νκ³ , μΈν°νμ΄μ€λ₯Ό implements νλ ν΄λμ€κ° μΈν°νμ΄μ€μ λ§λ€μ΄μ§ λ©μλλ₯Ό Override νμ¬ μ¬μ μνλ€.
κ·Έλμ ν΄λμ€μμ μ°¨μ΄κ° λλ°?
μ§λ¬Έμ λ κ°μ μ°¨μ΄λ₯Ό λ¬Όμ΄λ³΄κ³ μλ€. μΈν°νμ΄μ€μ νΉμ§μ΄ μλλΌ. μμ μ μ νν νμ νμ.
πβοΈ : λμ μ°¨μ΄μ μ μνλ₯Ό κ°μ§ μ μλλ, μλλμ μ°¨μ΄μΈλ° Java 8 μ΄νμλ μΈν°νμ΄μ€λ μνλ₯Ό κ°μ§ μ μμκΉμ?
μΈμμ, μ²μ μμλλ° κ΄ν μͺ½νλ¦΄κΉ μλ μ² νλ€.
λ μ λ§ μμ’μ μ΅κ΄μ΄ λμλ€. λͺ¨λ₯΄λ©΄ λͺ¨λ₯Έλ€κ³ ν΄μΌ νλλ° λ¬΄μ¨ κ²λ©μ΄ λ€μ΄μ μκΎΈ κ±°μ§λ§μ νλμ§ λͺ¨λ₯΄κ² λ€!
βοΈ ν΄λμ€, μΈν°νμ΄μ€, Abstract ν΄λμ€μ μ¬μ© μ©λ,
Java 8 μμ Default Method,
μΈν°νμ΄μ€μ νλ‘μμ κ΄κ³
π μ λ°μ μΌλ‘ ν‘μ€μμ€μ΄ λ§μ λ©ν λ§ μκ°μ΄λΌκ³ λκΌλ€. κ·Έ λ§νΌ λ΄κ° μ λλ‘ μ€λͺ ν μ μμλ μ§λ¬Έμ΄ μμλ€λ μλ―Έμ΄λ€.
λ, μ§λ¬Έμ μμ μ μ νν νμ νμ§ μλ λ΄ κ³ μ§μ μΈ λ¬Έμ κ° μμ£Ό κ΄μ°°λμλλ° μ΄λ»κ² νλ©΄ μ΄λ₯Ό κ³ μΉ μ μμκΉ?
λ§μ κ³ λ―Όμ΄ λλ 2μ£Όμ°¨ λ©ν λ§μ΄λ€. μ€λμ κΈ°μ μΌλ‘ λ λ§μ μκ°μ 곡λΆμ ν¬μν΄μΌκ² λ€.