μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Python
- μλ°
- κΉλ―Έκ²½μλ§νμμ
- μΉνΌλΈλ¦¬μ±
- λ°°μμ λ°°μ
- λκ°
- μ€λΈμ
- λ°μν
- μλ°μ€ν¬λ¦½νΈ
- μ±
- μ½λ©
- Java
- κ°μ΄ν μ’ λκ°λΉ
- νλ‘κ·Έλλ°
- λ°μ΄ν°λ² μ΄μ€
- νμ΄μ¬
- Kλ°°ν°λ¦¬λ 볼루μ
- html
- css
- database
- JavaScript
- ν°μ€ν 리μ±λ¦°μ§
- μΉ΄νλκ°
- λ μ
- μ 리νΈλ¦¬νΈ
- κ°λ°
- μνμ£Ό
- μ€λΌν΄
- μν
- νμ²μ 리νΈλ¦¬νΈ
- Today
- Total
JiYoung Dev π₯
κΈ°μ λ©΄μ μ€λΉ 5. Java μ§λ¬Έ μ 리 λ³Έλ¬Έ
π μλ° μΈμ΄μ νΉμ§
1. JVM μμμ λμκ°κΈ° λλ¬Έμ μ΄μ체μ μ λ 립μ
2. κ°μ²΄μ§ν₯μΈμ΄
3. λ©ν°μ°λ λ©μ μ§μ
4. λμ λ‘λ©μ μ§μ
5. κ°λΉμ§ 컬λ ν°κ° μμ΄ μλμΌλ‘ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μ§ν
π JDKμ JREμ μ°¨μ΄μ
JRE Java Runtime Enviromentλ‘ μλ°λ‘ λ§λ€μ΄μ§ νλ‘κ·Έλ¨μ μ€ννκΈ° μν΄ νμν λΌμ΄λΈλ¬λ¦¬μ API κ·Έλ¦¬κ³ JVMμ ν¬ν¨νκ³ μμ
JDKλ Java Development kitλ‘ μλ°λ₯Ό κ°λ°νλ λ° νμν λΌμ΄λΈλ¬λ¦¬μ javadoc, javacμ κ°μ κ°λ° λꡬμ JREλ₯Ό ν¬ν¨νλ κ°λ
π JVMμ΄λ?
JVMμ΄λ Java Virtual MachineμΌλ‘ λ°μ΄νΈ μ½λμ class νμΌλ‘ μ»΄νμΌλ νμΌμ CPUκ° μ½μ μ μλ λ°μ΄λ리 μ½λλ‘ λ³νμμΌ ν΄λΉ νλ‘κ·Έλ¨μ μ΄μ체μ μμμ μ€νν μ μλλ‘ ν΄μ£Όλ κ°μλ¨Έμ
π μλ°μ μ€ν λ°©μ(μ»΄νμΌ κ³Όμ )
1. μλ° νλ‘κ·Έλ¨μ μ€ννλ©΄ JVMμ OSλ‘λΆν° λ©λͺ¨λ¦¬λ₯Ό ν λΉ λ°μ
2. *.java νμΌμ javacλ₯Ό ν΅ν΄ λ°μ΄νΈ μ½λμ *.class νμΌλ‘ μ»΄νμΌ
3. μ»΄νμΌλ νμΌμ JVMμ ν΄λμ€ λ‘λλ‘ μ λ¬
3. ν΄λμ€ λ‘λλ λμ μΌλ‘ νμν ν΄λμ€λ€μ λ‘λ© λ° λ§ν¬νμ¬ λ°μ΄νΈ μ½λλ₯Ό λ°νμ λ°μ΄ν° μμμ λ°°μΉ
4. JVMμ μ€νμμ§μ μλ JIT μ»΄νμΌλ¬μ μΈν°ν리ν°κ° λ°νμ λ°μ΄ν° μμμ λ‘λ©λ λ°μ΄νΈ μ½λλ₯Ό λ°μ΄λ리 μ½λλ‘ μ€ν
< JVMμ ꡬ쑰μ μν >
- ν΄λμ€ λ‘λ(Class Loader)
: JVM λ΄λ‘ ν΄λμ€ νμΌ(*.class)μ λμ μΌλ‘ λ‘λνκ³ , λ§ν¬λ₯Ό ν΅ν΄ λ°°μΉνλ μμ μ μννλ λͺ¨λ
- λ°νμ λ°μ΄ν° μμ(Runtime Data Area)
1) JVMμ λ©λͺ¨λ¦¬ μμμΌλ‘ μ ν리μΌμ΄μ μ μ€νν λ μ¬μ©λλ λ°μ΄ν°λ€μ μ μ¬νλ μμ
2) λ©μλ μμ(Method Area), ν(Heap Area), μ€ν(Stack), PC λ μ§μ€ν°(PC registers), λ€μ΄ν°λΈ λ©μλ(Native Method Stacks) μμμΌλ‘ λλ¨
: κΈ°κ³μ΄λ‘ μμ±λ νλ‘κ·Έλ¨μ μ€νμν€λ μμ
- μ€ν μμ§(Execution Engine)
1) ν΄λμ€ λ‘λλ₯Ό ν΅ν΄ λ°νμ λ°μ΄ν° μμμ λ°°μΉλ λ°μ΄νΈ μ½λλ₯Ό λͺ λ Ήμ΄ λ¨μλ‘ μ½μ΄μ μ€ν
2) μΈν°ν리ν°μ JIT μ»΄νμΌλ¬ λκ°μ§ λ°©μμ νΌν©νμ¬ λ°μ΄νΈ μ½λλ₯Ό μ€ν
π GC(κ°λΉμ§ μ½λ ν°)λ?
1. κ°λΉμ§ μ½λ ν°(Garbage Collector)λ κ°λΉμ§ 컬λ μ (Garbage Collection)μ μννλ κ°μ²΄μ λλ€. μλ°μμλ JVMμ μ€ν μμ§μ μ‘΄μ¬
2. κ°λΉμ§ 컬λ μ μ΄λ, μλ°μ λ©λͺ¨λ¦¬ κ΄λ¦¬ λ°©λ² μ€ νλλ‘ JVMμ ν μμμ λμ μΌλ‘ ν λΉλ λ©λͺ¨λ¦¬ μ€ λμ΄μ μ¬μ©νμ§ μλ λ©λͺ¨λ¦¬λ₯Ό μ£ΌκΈ°μ μΌλ‘ μ κ±°νλ νλ‘μΈμ€
π GCκ° νμν μ΄μ
κ°λΉμ§ 컬λ ν°κ° μλ κ²½μ°, μ§μ μ΄μ체μ λ‘ λΆν° λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°κ³ λμ΄μ μ¬μ©νμ§ μλ λ©λͺ¨λ¦¬λ λ°νμ ν΄μ€μΌ νλ λ²κ±°λ‘μμ΄ μμ. μ€μ λ‘ λ°ννμ§ μκ³ μμ μ κ³μ νλ€λ³΄λ©΄ νλ‘μΈμ€κ° μ μ μ»€μ Έ μ΄μ체μ λ‘ λΆν° μκ·Έλμ λ°μ μ£½κ²λλ νμμ΄ λ°μν μ μμ. μ΄λ¬ν μμ μμ λ²μ΄λ μ μκ² ν΄μ£Όλ―λ‘ κ°λΉμ§ 컬λ ν°λ₯Ό μ¬μ©
π GC λμ λ°©μ
1. κ°μ²΄κ° μμ±λλ©΄ ν μμμ Young Generationμ Eden μμμ ν λΉ
2. Eden μμμ΄ κ°λμ°¨λ©΄ MinorGCκ° μΌμ΄λ νμνλ λ©λͺ¨λ¦¬λ₯Ό μ²λ¦¬ν¨
3. MinorGCλ Mark and Sweep λ°©μμΌλ‘ νμμλ λ©λͺ¨λ¦¬λ₯Ό μλ³ν΄ ν΄μ νλ λ°©μμΌλ‘ μ§νλ¨
4. MinorGCμμ μ΄μλ¨μ κ°μ²΄λ S0 νΉμ S1 μμμΌλ‘ μ΄λνκ³ ageλ₯Ό λΆμ¬λ°μ
5. S0μ΄ κ°λμ°¨λ©΄ S1μΌλ‘ μ΄λ, S1μ΄ κ°λμ°¨λ©΄ S0μΌλ‘, μμμ μ€κ°λ©΄μ ageκ° κ³μ μ¦κ°
6. νΉμ ageκ° λμΌλ©΄ Old Generation μμμΌλ‘ μ΄λ
7. Old Generationμ΄ κ°λμ°¨λ©΄ MajorGCκ° μΌμ΄λ κ°λΉμ§λ₯Ό μ²λ¦¬ν¨
π λ©ν°μ€λ λλ?
νλμ νλ‘μΈμ€ λ΄μμ 2κ° μ΄μμ μ€λ λκ° μ‘΄μ¬νμ¬ λμμ μ¬λ¬ μμ μ μννλ κ²μΌλ‘ λ§ν¨
μ€λ λ(thread) : μ΄λ ν νλ‘κ·Έλ¨ λ΄μμ, νΉν νλ‘μΈμ€ λ΄μμ μ€νλλ νλ¦μ λ¨μ
π λ©ν°μ€λ λλ₯Ό μ¬μ©νλ μ΄μ
1. μ¬μ©μ μλ΅μ± ν₯μ : μ±κΈ μ€λ λ νλ‘μΈμ€μ κ²½μ° νλμ μμ μ΄ μμ ν λλ ν λ€μ μμ μ μ§νν μ μμ. λ°λ©΄, λ©ν° μ€λ λλ νλμ νλ‘κ·Έλ¨ μμμ μ±ν μ νλ μ¬μ§μ λ€μ΄ λ°λ λ± λμμ μ¬λ¬ μμ μ μνν μμ.
2. μμμ μ¬μ©μ ν¨μ¨μ± ν₯μ : νλ‘μΈμ€μ μ€ν μμμ μ μΈν ν, λ°μ΄ν°, μ½λ μμ, μλ°μμλ ν, λ©μλ μμμ 곡μ νκΈ° λλ¬Έμ μμμ μμ±κ³Ό κ΄λ¦¬μ μ€λ³΅μ μ΅μνν μ μμ
<νλ‘μΈμ€μ μμ ꡬ쑰>
1. TEXT : μ½λ μμμΌλ‘ νλ‘κ·Έλλ¨Έκ° μμ±ν μ½λκ° CPUκ° ν΄μ κ°λ₯ν κΈ°κ³μ΄ ννλ‘ μ μ₯λμ΄ μμ
2. DATA : μ½λκ° μ€νλλ©΄μ μ¬μ©νλ μ μ λ³μλ κ°μ’ λ°μ΄ν°κ° λͺ¨μ¬ μμ
3. HEAP : μμ±μ, μΈμ€ν΄μ€μ κ°μ λμ μΌλ‘ ν λΉλλ λ°μ΄ν°λ€μ΄ μ‘΄μ¬λλ 곡κ°μΌλ‘ μ¬μ©μμ μν΄ λ©λͺ¨λ¦¬ 곡κ°μ΄ λμ μΌλ‘ ν λΉλκ³ ν΄μ λ¨
4. STACK : μ§μ λ³μμ νΈμΆν ν¨μκ° μ’ λ£λλ©΄ λλμμ¬ μμμ μΈ μλ£λ₯Ό μ μ₯νλ λ 립μ μΈ κ³΅κ°
Q. νλ‘μΈμ€ μμꡬ쑰μ μ΄λ μμμμ JVMμ 6κ°μ§ μμλ€μ΄ λ§λ€μ΄μ§λ κ²μΌκΉ?
JVMμ 6κ°μ§ μμλ€μ Runtime Data Areaμμ μκ³ , μ΄ Runtime Data Areaλ OSκ° ν΄λΉ λ©λͺ¨λ¦¬μκ² ν λΉν΄μ€(κ·Έλ¬λ ν΄λΉ νλ‘μΈμ€μ Heap)μμ, κ³ λ‘ νλ‘μΈμ€μ Heap μμ μμ JVMμ΄ Runtime Data Areaλ₯Ό λ§λ€μ΄ 6κ°μ§ μμμΌλ‘ μͺΌκ°μ΄ μ¬μ©νλ κ²μμ μ μ μμμ΅λλ€. (GC κ°μ κ²½μ°λ JVMμ Heapμμλ§ κ΄λ¦¬)
JVMμ λ°μ΄ν° μμκ³Ό νλ‘μΈμ€ μμ ꡬ쑰μ μ°¨μ΄μ λν κΈ : https://dkswnkk.tistory.com/440
[Java] JVMμ λ©λͺ¨λ¦¬ ꡬμ±μμμ μμμ κ΄ν κ³ μ°°
μλ‘ μμ© νλ‘κ·Έλ¨μ΄ μ€νλλ©΄, JVMμ μμ€ν μΌλ‘λΆν° νλ‘κ·Έλ¨μ μννλλ° νμν λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°κ³ JVMμ μ΄ λ©λͺ¨λ¦¬λ₯Ό μ©λμ λ°λΌ μ¬λ¬ μμμΌλ‘ λλμ΄ κ΄λ¦¬ν©λλ€. κ·Έλ μ§λ§ μ¬κΈ°μ μ¬
dkswnkk.tistory.com
JVMμμμ μ€λ λμ λ©λͺ¨λ¦¬ ꡬμ±
μλ° νλ‘κ·Έλ¨ μ€ν → JVM νλ‘μΈμ€ μμ λ° main thread μμ±
JVMμ νλ‘μΈμ€λ₯Ό μ€ννλ©΄μ OSλ‘λΆν° Runtime Data Area λ©λͺ¨λ¦¬λ₯Ό ν λΉ λ°μ
JVM Runtime Data Area ꡬμ±
1. Method Area : ν΄λμ€ μ 보, μ μ λ³μ λ± JVM νλ‘μΈμ€κ° μμλ λ λ°μ΄ν°κ° ν λΉ
2. Heap : λμ μΌλ‘ λ°μ΄ν°κ° ν λΉλλ μμμΌλ‘ λ νΌλ°μ€ νμ κ°μ²΄ μμ±μ μ€μ κ°μ²΄κ° μ¬λΌκ°λ λ©λͺ¨λ¦¬ μμ
3. PC(Program Counter) Register
- ν΄λΉ μ€λ λμμμ λͺ λ Ή νλ¦μ μΆμ νκ³ κ΄λ¦¬
- νμ¬ μνμ€μΈ JVM λͺ λ Ήμ μ£Όμ μ μ₯,
- μ°μ°μ μν΄ νμν νΌμ°μ°μλ₯Ό μμλ‘ μ μ₯
4. Stack
- λ©μλ νΈμΆμ νΈμΆλ λ©μλλ₯Ό μν frame μμ±
- λ©μλ scope λ΄μμ λ°μνλ μ§μλ³μ, 맀κ°λ³μ, 리ν΄κ° λ±μ΄ frameμ μ μ₯λ¨
- λ©μλ scopeκ° λ¦¬ν΄λλ©΄ frameμ ν λΉλμλ λ³μλ€κ³Ό frameμ λ°νλ¨
- λ©μλ λ΄μμ λ©μλλ₯Ό νΈμΆνλ κ²½μ°, νΈμΆλ λ©μλ frameμ΄ λ°λ‘ μμ μκΈ°λ©΄μ μ€ν νλ¦μ΄ ν΄λΉ λ©μλλ‘ λμ΄κ°
5. Native Methd Stack : μλ°κ° μλ λ€λ₯Έ μΈμ΄λ₯Ό JNIλ₯Ό ν΅ν΄ μ€ννκΈ° μν μ½λ 곡κ°
JVMμ μ€λ λ μ’ λ₯
1. λ°λͺ¬ μ€λ λ
- λ°λͺ¬ μ€λ λλ λ€λ₯Έ λΉλ°λͺ¬ μ€λ λκ° μλ€λ©΄ λμμ μ€μ§ν¨
- JVMμ κ°λΉμ§ 컬λ μ , λͺ¨λν°λ§ λ± μ ν리μΌμ΄μ μ΄μ©μ μν΄ μ¬μ©νλ€κ° μ£Όμ μ€λ λκ° μ’ λ£λλ©΄ ν¨κ» μ’ λ£
2. λΉλ°λͺ¬ μ€λ λ
- νλ‘κ·Έλ¨ μ€ν μ§μ μ μΈ main thread(static void main(String[] args)λ λΉλ°λͺ¬ μ€λ λλ‘ μμ±
- μ΄ μ€λ λκ° λμμ μ€μ§νκ±°λ μ’ λ£νλ©΄ λ€λ₯Έ λ°λͺ¬ μ€λ λλ€λ ν¨κ» μ€μ§
μ°Έκ³ μλ£ : https://velog.io/@kangyun9957/JVM-%EA%B4%80%EC%A0%90%EC%9D%98-%EC%8A%A4%EB%A0%88%EB%93%9C
JVM κ΄μ μ μ€λ λ
μλ° μ± μ€ν => JVM νλ‘μΈμ€ μμ λ° main thread μμ±JVMμ νλ‘μΈμ€λ₯Ό μ€ννλ©΄μ OSλ‘λΆν° Runtime Data Area λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°μ΅λλ€.Method AreadJVM μ€λ λμ μ’ λ₯\-λ°λͺ¬ μ€λ λλ°λͺ¬ μ€λ λλ λ€λ₯Έ λΉλ°
velog.io
π μλ°μ λμμ±(곡μ μμ μ κ·Ό) μ΄μ
- λμΌν νλμ λ°μ΄ν°μ λν΄ 2κ° μ΄μμ μ€λ λκ° λμμ μ μ΄ν λ λνλλ λ¬Έμ λ‘,
νλμ μΈμ μ΄ λ°μ΄ν°λ₯Ό μμ μ€μΌ λ λ€λ₯Έ μΈμ μμ μμ μ μ λ°μ΄ν°λ₯Ό μ‘°νν΄ λ‘μ§μ μ²λ¦¬ν¨μΌλ‘μ¨
λ°μ΄ν°μ μ ν©μ±μ΄ κΉ¨μ§λ κ²
- ν΄λΉ μμμ μ¬μ©ν λ λκΈ°ν νμ
π μλ° λ°μ΄ν° νμ μ€ κΈ°λ³Ένκ³Ό μ°Έμ‘°νμ μ°¨μ΄
1. κΈ°λ³Έν νμ μ κ° μ체λ₯Ό μ€ν μμμ μ μ₯νλ λ°λ©΄ μ°Έμ‘°νμ κ°μ΄ μλ κ°μ΄ μ μ₯λ μ£Όμλ₯Ό μ€ν μμμ μ μ₯νκ³ μ€μ κ°μ ν μμμ μ μ₯
2. κΈ°λ³Ένμ nullμ κ°μ§ μ μμΌλ μ°Έμ‘°νμ nullκ°μ κ°μ§ μ μμ(κΈ°λ³Ένμ defautκ°μ΄ μ ν΄μ Έ μμ. int - 0, double - 0.0, char - '0', boolean - false)
π μλ°μ μμ νμ μ’ λ₯μ ν¬κΈ°
1. μ μν - byte(1byte), short(2byte), int(4byte), long(8byte)
2. μ€μν - float(4byte), double(8byte)
3. λ¬Έμν - char(2byte)
4. λ Όλ¦¬ν - boolean(1byte)
π μλ°μμ λμΌν Stringμ μλ‘ λ§λ€λλ§λ€ κ°μ²΄κ° μμ±λλκ°? (μ : String a = Apple; String b= Apple; μ κ²½μ° κ³΅κ°μ΄ μλ‘ ν λΉλλμ§)
Stringμ μμ±ν λ μμμ κ°μ΄ 리ν°λ΄λ‘ μμ±νλ κ²½μ° Heap μμμ String poolμ κ°μ΄ μ μ₯λ¨
String b μμ 리ν°λ΄λ‘ μμ±νκ³ , aλ₯Ό μ μΈν λ "Apple"μ String poolμ μ μ₯νμμΌλ―λ‘ Heap μμμλ μλ‘ κ³΅κ° ν λΉμ΄ λμ§ μκ³ , κΈ°μ‘΄μ μ μ₯λ λ¬Έμμ΄μ μ¬μ¬μ©ν¨. λ§μ½ newλ₯Ό ν΅ν΄ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νκ² λλ€λ©΄ κ·Έλμλ λ³λμ Heap 곡κ°μ ν λΉνκ² λ¨
Java String Pool ( == String Constant Pool)
Javaμμ λ¬Έμμ΄ λ¦¬ν°λ΄μ μ μ₯νλ λ 립λ μμ
μμ€μ½λμμ 리ν°λ΄("Hello")λ‘ μ μΈλ λ¬Έμμ΄μ΄ μ μ₯λλ 곡κ°μΌλ‘ λμ μΌλ‘ μμ±λ λ¬Έμμ΄μ μ μ₯λμ§ μμ
κ·Έλ¦¬κ³ ν λ² μ μ₯λ λ¬Έμμ΄μ μμ€μ½λμμ λμΌν λ¬Έμμ΄μ λν΄ μ¬μ¬μ©νμ¬ λ©λͺ¨λ¦¬λ₯Ό μ μ½νλ μν μ ν¨
String str = "Hello"; //String poolμ μ μ₯ String str2 = new String("Hello") //heap μμμ μ μ₯β
String poolμ μ μ₯λ λ¬Έμμ΄μ λͺ¨λ κ°μ κ°μ²΄λ₯Ό μ¬μμ©ν¨String str = "Hello"; //String poolμ μ μ₯ String str2 = "Hello"; //String poolμ μ μ₯ String str3 = new String("Hello"); //λ³λμ heap μμμ μ μ₯ System.out.println(str == str2); //true System.out.println(str == str3); //false System.out.pringln(str.equals(str3)); //true
μ°Έκ³ μλ£ : https://deveric.tistory.com/123
[Java] λ§μ΄ ν·κ°λ €νλ String constant poolκ³Ό Runtime Constant pool, Class file constant pool
String Constant Poolκ³Ό Constant Pool μ΄ λ κ°μ§λ μμ ν λ€λ₯Έ κ°λ μ λλ€. μ©μ΄κ° λΉμ·ν ννμ΄κΈ° λλ¬Έμ μ΄ λ κ°μ§λ₯Ό νΌμ©νμ¬ ν·κ°λ¦¬λ κ²½μ°κ° λ§μ΅λλ€λ§, μ μ₯λλ μμΉλΆν° μ μ₯νλ λ°μ΄ν°μ
deveric.tistory.com
π μ£Όμκ° λΉκ΅(==)μ κ° λΉκ΅(equals)μ μ°¨μ΄μ κ³Ό Stringμ ==λ‘ λΉκ΅νλ©΄ μλλ μ΄μ
- μ£Όμκ° λΉκ΅λ ν΄λΉ λ³μμ λ°μ΄ν°κ° μ‘΄μ¬νλ μ£Όμκ° κ°μμ§λ₯Ό νμΈ
- κ° λΉκ΅λ ν΄λΉ λ³μμ μ€μ λ°μ΄ν°λ₯Ό λΉκ΅νλ κ²
λ§μ½
String a = "a";
String b = "a";
μ΄ κ²½μ° String poolμ μν΄ λ³μ aμ bλ κ°μ μ£Όμμ κ°μ κ°μ§κ³ μμΌλ
String a = "a";
String b = new String("a");
μμ κ°μ΄ λμ μΌλ‘ κ°μ²΄κ° μμ±λλ κ²½μ°μ λ³μ bκ° κ°μ§λ 리ν°λ΄ "a"λ String poolμ΄ μλ λ³λμ ν μμμ μ μ₯λκΈ° λλ¬Έμ μ£Όμκ°μ΄ λ€λ¦. λ°λΌμ μ£Όμκ°μΌλ‘ λΉκ΅νκ² λλ©΄ false, κ°μΌλ‘ λΉκ΅νλ©΄ trueκ° λμ΄
π Javaμ μΈκ°μ§ λ³μμ λν΄ JVM λ©λͺ¨λ¦¬μ μ°κ΄μ§μ΄ μ€λͺ
1. ν΄λμ€ λ³μ : ν΄λμ€ λ΄μ μ μΈλ λ³μ μ€ static ν€μλλ₯Ό λΆμΈ λ³μλ‘ JVMμ λ©μλ μμμ μ μ₯λ¨. λ°λΌμ ν΄λμ€κ° λ‘λ©λμμ λ μμ±λκ³ νλ‘κ·Έλ¨ μ’ λ£κΉμ§ μ¬μ©μ΄ κ°λ₯νλ©°, μΈμ€ν΄μ€κ° λ³μλ₯Ό 곡μ ν μ μμ
- μ°Έμ‘° μλ£ν : κΈ°λ³Έ μλ£νκ³Ό μ€νΈλ§μ μ μΈν μ°Έμ‘° μλ£νμ κ²½μ° ν΄λμ€ λ³μμ ν λΉλ κ°μ²΄λ heapμ μμ±ν΄λκ³ referenceλ₯Ό runtime constant poolμ μ μ₯
2. μΈμ€ν΄μ€ λ³μ(κΈ°λ³Έ/μ°Έμ‘° μλ£ν) : ν΄λμ€ λ΄μ μ μΈλ λ³μλ‘ JVMμ Heap μμμ μ μ₯λ¨. μΈμ€ν΄μ€κ° μμ±λμμ λ μμ±, λ¨, Heap μμμ μ μ₯λ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ νΌλ°μ€ λ³μμ κ²½μ° Stack μμμ μ μ₯. μΈμ€ν΄μ€ λ³μλ λ©λͺ¨λ¦¬ νΈμΆμ΄ λλλ μμ λμ§ μκ³ μ μ§λλ©° GCμ μν΄ λ©λͺ¨λ¦¬ κ΄λ¦¬λ¨
3. μ§μ λ³μ : λ©μλ λ΄μ μμ±λκ±°λ μ λ¬λ λ³μ
- κΈ°λ³Έ μλ£ν : Stackμ μ μ₯, λ©μλκ° μ’ λ£λλ©΄ κ·Έλλ‘ μλ©Έ
- μ°Έμ‘° μλ£ν : λ°°μ΄, ν΄λμ€ κ°μ²΄ λ± new μ°μ°μλ‘ μμ±λ μ°Έμ‘° μλ£νμ κ²½μ°, μ€μ κ°μ²΄λ Heapμ μ μ₯λκ³ , Heapμ μ μ₯λ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ referenceκ° stackμ μ μ₯
λ³μ(Variable) : λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν΄ ν λΉλ°μ λ©λͺ¨λ¦¬ 곡κ°
λ³μ μ μΈ μμΉμ λ°λΌ 3κ°μ§λ‘ ꡬλΆν μ μμ : μ§μ λ³μ, ν΄λμ€ λ³μ, μΈμ€ν΄μ€ λ³μ
public class Example{ int level; //μΈμ€ν΄μ€ λ³μ static int cream; //ν΄λμ€ λ³μ void attack(){ int score; //μ§μλ³μ } }β
1. μΈμ€ν΄μ€ λ³μ
- ν΄λμ€ λ΄μ μ μΈλ λ³μ
- μΈμ€ν΄μ€ μμ± μλ§λ€ λ§€λ² μλ‘μ΄ λ³μκ° μμ±λ¨
- ν΄λμ€ λ³μμ λ¬λ¦¬ 곡μ λμ§ μμ
2. ν΄λμ€ λ³μ
- ν΄λκ° λ©λͺ¨λ¦¬μ μ¬λΌκ° λ μμ± (static ν€μλλ‘ μ μΈ)
- μ²μ JVMμ΄ μ€νλμ΄ ν΄λμ€κ° λ©λͺ¨λ¦¬μ μ¬λΌκ° λ ~ νλ‘κ·Έλ¨μ΄ μ’ λ£λ λκΉμ§ μ μ§
- λμΌν ν΄λμ€μ λͺ¨λ κ°μ²΄λ€μ μν΄ κ³΅μ λ¨
3. μ§μ λ³μ
- λ©μλ λΈλ μμ μ μΈλ λ³μ
- λ©μλ νΈμΆ μμ ~ λ©μλ μ’ λ₯ μμ λμ μ μ§
μ°Έκ³ μλ£ : https://8iggy.tistory.com/230, https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD%EC%8A%A4%ED%83%9D-%ED%9E%99
Java κ°μ²΄μ λ³μ λ°μ΄ν°μ μ μ₯
μ½κΈ° μ λΆνμν μ½λλ μλͺ» μμ±λ λ΄μ©μ λν μ§μ μ μΈμ λ νμν©λλ€. κ°μΈμ μΌλ‘ μ¬μ©ν΄λ³΄λ©΄μ λ°°μ΄ μ μ μ 리ν κΈμ λλ€. λ¬Έμ μ κΈ° λ³μ μ μ₯μ λν΄ λ¬Όμ΄λ³΄λ©΄ μΌλ μ§μ/λ§€κ° λ³μ
8iggy.tistory.com
β κ·Έλ¦ΌμΌλ‘ 보λ μλ° μ½λμ λ©λͺ¨λ¦¬ μμ(μ€ν & ν)
μλ°μ λ©λͺ¨λ¦¬ μμ μ΄λ² ν¬μ€ν μμ μλ°(JAVA)λ₯Ό μ¬μ©νλ μ μ₯μμ μμμΌ ν λ©λͺ¨λ¦¬ ꡬ쑰 λ° νΉμ§μ λν΄μ μμλ³΄λ €κ³ νλ€. μλ° νλ‘κ·Έλ¨μ΄ μ€νλλ©΄ JVM(μλ° κ°μ λ¨Έμ )μ OSλ‘λΆν° λ©λͺ¨
inpa.tistory.com
π Staticμ΄λ?
- static ν€μλκ° λΆμ΄ ν΄λμ€ λ‘λ©μ μμ±λλ λ³μ νΉμ λ©μλ
- JVMμ λ©μλ μμμ μ μ₯
- ν΄λμ€ λ‘λ© νλΆν° νλ‘κ·Έλ¨ μ’ λ£λ λκΉμ§ μ¬μ© κ°λ₯
- λμΌ ν΄λμ€μ λͺ¨λ κ°μ²΄λ€μ 곡μ λλ©° μΈμ€ν΄μ€ μμ± μμ΄ λ°λ‘ μ¬μ© κ°λ₯
- νλ‘κ·Έλ¨ λ΄μμ 곡ν΅μΌλ‘ μ¬μ©λλ λ°μ΄ν°λ₯Ό κ΄λ¦¬ν λ, main λ©μλμ κ°μ΄ νλ‘κ·Έλ¨ μ€ν νλΆν° μ’ λ£κΉμ§ κ°λΉμ§ 컬λ ν°μμν΄ μ 리λμ§ μκ³ μ€νμ΄ λμ΄μΌ ν λ μ¬μ©
π κ°μ²΄κ° JVM λ©λͺ¨λ¦¬μ μ μ₯λ λ μ΄λμ μ μ₯λλκ°?
κ°μ²΄λ JVMμ ν μμμ μ μ₯λκ³ , κ°μ²΄κ° μ μ₯λ κ°μ κ°μ§λ λ νΌλ°μ€ λ³μλ μ€ν μμμ μ μ₯
π μμ±μ
μλ°μμ κ°μ²΄λ₯Ό μμ±λ λ μλμΌλ‘ νΈμΆλλ νΉμν λ©μλλ‘ μΈμ€ν΄μ€ λ³μλ₯Ό μνλ κ°μΌλ‘ μ΄κΈ°νν μ μμ
1. ν΄λμ€μ μ΄λ¦κ³Ό λ©μλλͺ μ΄ κ°μ
2. λ°ννμ μ΄ μμ
3. 맀κ°λ³μ 쑰건μ λ°λΌ μ¬λ¬κ° μμ±ν μ μμ (μ€λ²λ‘λ©)
4. μμ±μλ ν΄λμ€μ 1κ°λ μμ΄μΌ νλ©°, μμ±κ° μ½λκ° μμΌλ©΄ μ»΄νμΌλ¬κ° κΈ°λ³Έ μμ±μλ₯Ό μλμΌλ‘ μμ±
(** μμ±μ μ½λκ° νλλΌλ μμΌλ©΄, μ»΄νμΌλ¬λ κΈ°λ³Έ μμ±μκ° μλλΌλ μλμΌλ‘ μμ±νμ§ μμ)
π μ€λ²λΌμ΄λ©κ³Ό μ€λ²λ‘λ©μ 무μμ΄λ©° μ΄λ€ μ°¨μ΄μ μ΄ μλκ°?
μ€λ²λ‘λ©(Overloading)μ 맀κ°λ³μμ κ°μ, μ νμ λ€λ₯΄κ² νμ¬ λμΌν λ©μλλ₯Ό μ¬λ¬κ° μ¬μ©νλ κ²
μ€λ²λΌμ΄λ©(Overriding)μ μμ ν΄λμ€κ° κ°μ§κ³ μλ λ©μλλ₯Ό νμ ν΄λμ€κ° μ¬μ μνμ¬ μ¬μ©νλ κ²
π μΆμ ν΄λμ€μ μΈν°νμ΄μ€μ μ°¨μ΄
- μΆμ ν΄λμ€λ μ£Όλ‘ μμμ λ°μμ κΈ°λ₯μ νμ₯νλλ° λͺ©μ μ΄ μκ³ , μΈν°νμ΄μ€λ λμΌν μ€ν κΈ°λ₯μ 보μ₯νκΈ° μν΄ μ£Όλ‘ μ¬μ©.
- μΆμν΄λμ€λ μΌλ° λ©μλ μ μκ° κ°λ₯νλ©°, extends ν€μλλ₯Ό ν΅ν΄ μμ. λ€μ€μμμ΄ λΆκ°λ₯νλ©° λ³μμ μ κ·Όμ νμ μ¬μ©μ μ ν μμ.
- μΈν°νμ΄μ€λ κ·Έ μΈν°νμ΄μ€λ₯Ό ꡬννλ λͺ¨λ ν΄λμ€μ λν΄ νΉμ ν λ©μλκ° λ°λμ μ‘΄μ¬νλλ‘ κ°μ ν¨. static, defalut λ©μλλ₯Ό μ μν μ μκ³ , implements ν€μλλ₯Ό ν΅ν΄ μμ. λν λ€μ€ μμμ΄ κ°λ₯νλ©° μ κ·Όμ νμλ public, λ³μλ static final μμλ§ μ¬μ© κ°λ₯.
< μΆμ ν΄λμ€ vs μΈν°νμ΄μ€ >
곡ν΅μ
1. κ°μ²΄λ₯Ό μμ±(μΈμ€ν΄μ€ν) ν μ μλ€.
2. μΆμ λ©μλλ₯Ό ν¬ν¨νλ€.
3. μμλ°λ ν΄λμ€μμλ μΆμ λ©μλλ₯Ό λ°λμ μ¬μ μνμ¬ κ΅¬νν΄μΌ νλ€.
μ°¨μ΄μ
μ°Έκ³ μλ£ :
νλͺ© μΆμ ν΄λμ€ μΈν°νμ΄μ€ κ°λ κ³Ό λͺ©μ μμ λ°μμ κΈ°λ₯μ νμ₯μν€λλ° λͺ©μ ꡬν κ°μ²΄μ λμΌν μ€ν κΈ°λ₯μ 보μ₯νκΈ° μν λͺ©μ μΌλ° λ©μλ μΌλ° λ©μλ μ μκ° κ°λ₯ μΌλ° λ©μλ μ μ λΆκ°λ₯
(Java 8 μ΄ν static, default λ©μλ μ μ κ°λ₯)μμ ν€μλ extends implements λ€μ€ μμ λΆκ°λ₯ κ°λ₯ μ¬μ© κ°λ₯ λ³μ μ ν μμ staic final(μμ) μ¬μ© κ°λ₯ μ κ·Ό μ νμ μ ν μμ public
1. https://hahahoho5915.tistory.com/70
2. https://devlog-wjdrbs96.tistory.com/370
[Java] μΈν°νμ΄μ€μ μΆμ ν΄λμ€ μ°¨μ΄λ 무μμΌκΉ?
μΈν°νμ΄μ€μ μΆμ ν΄λμ€ μ°¨μ΄λ? μ΄λ² κΈμμλ μΈν°νμ΄μ€μ μΆμ ν΄λμ€μ μ°¨μ΄μ λν΄μ μ 리ν΄λ³΄κ² μ΅λλ€. μ€μ λ‘ μ΄ μ§λ¬Έμ λ©΄μ μμλ μμ£Ό λ¬Όμ΄λ³΄λ μ§λ¬Έμ΄κ³ , μ½κ° μλ― λ§λ― νλ°
devlog-wjdrbs96.tistory.com
π μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ μ΄μ
1. λ€μ€ μμμ΄ νμν λ
2. ꡬν λ΄μ©μ λ€λ₯΄λ νΉμ κΈ°λ₯μ 보μ₯νκ³ μΆμ λ μ¬μ©
3. νμ μ μΈν°νμ΄μ€λ₯Ό μμ±νμ¬ κΈ°λ₯μ 보μ₯νκ³ λ©μλλͺ λ±μ 미리 μ ν μ μμ
μ°Έκ³ μλ£
https://mungto.tistory.com/314
μλ°(Java) - Interfaceλ 무μμΈκ°(μ μ, μ¬μ©μ΄μ , μμ )?
1. μΈν°νμ΄μ€λ? μΈν°νμ΄μ€λ μλ°μμ ν΄λμ€λ€μ΄ ꡬνν΄μΌνλ λμμ μ§μ νλ μ©λλ‘ μ¬μ©λλ μΆμ μλ£νμ΄λ€. class λμ interfaceλΌλ ν€μλλ₯Ό μ΄μ©νμ¬ μ μΈν μ μμΌλ©° λ©μλ μκ·Έ
mungto.tistory.com
π μμΈ μ²λ¦¬ (Exception Handling)
- νλ‘κ·Έλ¨ μ€νμ λ°μν μ μλ μκΈ°μΉ λͺ»ν μμΈμ λ°μμ λλΉν μ½λλ₯Ό μμ±νλ νμ
- μμΈ λ°μμΌλ‘ μΈν μ€νμ€μΈ νλ‘κ·Έλ¨μ κ°μμ€λ° λΉμ μ μ’ λ£λ₯Ό λ§κ³ , μ μμ μΈ μ€νμνλ₯Ό μ μ§νλ κ²
- μ’ λ₯
1) try ~ catch : μμΈμ λν μ΅μ’ μ μΈ μ± μμ μ§κ³ μ²λ¦¬νλ λ°©μ
2) throws : λ°μν μμΈμ μ± μμ νΈμΆνλ μͺ½μ΄ μ± μμ§λλ‘ νλ λ°©μ (μ£Όλ‘ νΈμΆνλ μͺ½μ μμΈλ₯Ό λ³΄κ³ ν λ μ¬μ©ν¨)
< μλ° μ€λ₯(Error)μ μμΈ(Exception) >
1. μ€λ₯(Error)
- νλ‘κ·Έλ¨μ΄ μ€ν μ€ μ΄λ€ μμΈμ μν΄μ μ€μλμ νκ±°λ λΉμ μμ μΌλ‘ μ’ λ£λλ κ²½μ°
- μμ€ν μ΄ μ’ λ£λμ΄μΌ ν μμ€κ³Ό κ°μ΄ μμ΅ν μ μλ μ¬κ°ν λ¬Έμ λ‘ κ°λ°μ 미리 μμΈ‘νμ¬ λ°©μ§ν μ μμ
1) μ»΄νμΌ μλ¬ : νλ‘κ·Έλ¨ μ½λ μμ± μ€ λ°μνλ λ¬Έλ²μ μ€λ₯, μ»΄νμΌ μμ μ λ°μνλ μμΈ
2) λ°νμ μλ¬ : μ€νμ€μΈ νλ‘κ·Έλ¨μ΄ μλνμ§ μμ λμμ νκ±°λ νλ‘κ·Έλ¨μ΄ μ€μ§λλ μ€λ₯, νλ‘κ·Έλ¨ μ€νμ λ°μ
2. μμΈ(Exception)
- κ°λ°μκ° κ΅¬νν λ‘μ§μμ λ°μν μ€μλ μ¬μ©μμ μν₯μ μν΄ λ°μ.
- κ°λ°μκ° λ―Έλ¦¬ μμΈ‘νμ¬ λ°©μ§ν μ μμΌλ―λ‘ μν©μ λ§λ μμΈ μ²λ¦¬κ° νμ
1) Checked Exception
- μμΈ μ²λ¦¬κ° νμμ΄λ©°, μ²λ¦¬νμ§ μμΌλ©΄ μ»΄νμΌλμ§ μμ
- μ»΄νμΌ λ¨κ³μμ λͺ ννκ² Exception 체ν¬κ° κ°λ₯ν¨
- μμΈ λ°μμ νΈλμμ μ roll-backνμ§ μκ³ μμΈλ₯Ό λμ Έμ€
- JVM μΈλΆμ ν΅μ ν λ μ£Όλ‘ μ°μ
2) Unckecked Exception
- Runtime Exception νμμ λͺ¨λ μμΈ
- NullPointerException, IndexOutOfBoundException λ±
- μ€νκ³Όμ μ€ μ΄λ ν νΉμ λ Όλ¦¬μ μν΄ λ°κ²¬
- μμΈ λ°μμ νΈλμμ μ roll-back
- λͺ μμ μΈ μμΈμ²λ¦¬λ₯Ό νμ§ μμλ λ¨
μ°Έκ³ μλ£ : https://velog.io/@jipark09/Java-Error%EC%99%80-Exception-%EC%B0%A8%EC%9D%B4
[Java] Errorμ Exception μ°¨μ΄
javaλ μ€λ₯κ° λ°μνκ±°λ λ°μν μ¬μ§κ° μλ μ¬λ¬μν©μ λν μμΈλ₯Ό λ§λ€μ΄λμλ€. μ°λ¦¬μκ² μ΅μν IllegalArgumentExceptionμ λΉλ‘―ν΄ μμΈμ μ°ΎκΈ° νλ NullPointerExceptionλ μλ€. λν, νμΌ μ²λ¦¬λ₯Ό
velog.io
π μλ° 8, 11, 17μ νΉμ (곡ν΅μ & μ°¨μ΄μ )
Java 8
- 2030λ κΉμ§ μ§μ
- μ€λΌν΄μ΄ μλ°λ₯Ό μΈμν ν μΆμν 첫λ²μ§Έ LTS λ²μ
- 32bitλ₯Ό μ§μνλ λ§μ§λ§ 곡μ Java λ²μ
- Oracle JDK(μ λ£)μ OpenJDK(무λ£)λ‘ λλ¨
- μλ‘μ΄ λ μ§μ μκ° API(LocalDateTime λ±)
- λλ€μ(Lamda), Stream API
- PermGen μμ μμ
- Static Link JNI Library
Java 11
- 2026λ 9μκΉμ§ μ§μ
- Oracle JDKμ OpenJDK ν΅ν©
- Oracle JDKκ° κ΅¬λ ν μ λ£ λͺ¨λΈλ‘ μ ν
- λλ€ μ§μ λ³μ μ¬μ©λ² λ³κ²½
- Third Party JDKλ‘μ μ΄μ νμ
- HTTP ν΄λΌμ΄μΈνΈ νμ€ν κΈ°λ₯
Java 17
- 2029λ 9μκΉμ§ μ§μ(κ°μ₯ μ΅μ LTS λ²μ )
- λ΄μΈ ν΄λμ€(Sealed Class) μ μ μΆκ°
- ν¨ν΄ λ§€μΉ ν리뷰 λ¨κ³
- Incubator (Foreign Function & Memory API)
- μ ν M1 λ° μ΄ν νλ‘μΈμ νμ¬ μ νκ΅°μ λν μ μ μ§μ
- λμ μμ± API μΆκ°
- Spring Boot 3.0μ μ΅μλ²μ
π μλ° λΆλ³ κ°μ²΄
- κ°μ²΄ μμ± μ΄ν λ΄λΆμ μνκ° λ³νμ§ μλ κ°μ²΄ (ex. String, Integer, Boolean λ±)
- μμ νμ μ κ²½μ° final ν€μλλ₯Ό ν΅ν΄ μμ± κ°λ₯
- μ°Έμ‘° νμ μΌ κ²½μ° μΆκ°μ μΈ μμ μ΄ νμ
1) κ°μ²΄ : νλμ μ°Έμ‘° λ³μλ λΆλ³ κ°μ²΄λ‘ λ³κ²½(private final), setter λ―Έμ¬μ©
2) λ°°μ΄ : λ°°μ΄μ λ°μ copyνμ¬ μ μ₯νκ³ , getterλ₯Ό cloneμΌλ‘ λ°ν(λ°©μ΄μ 볡μ¬)
π λΆλ³ κ°μ²΄λ finalμ μ¬μ©ν΄μΌ νλ μ΄μ
1. Threadμ μμ ν΄ λκΈ°νλ₯Ό κ³ λ €νμ§ μμλ λ¨
- 곡μ μμμ΄ λΆλ³μ΄λ―λ‘ νμ λμΌν κ°μ λ°ννκΈ° λλ¬Έ
2. μ€ν¨ μμμ μΈ λ©μλλ₯Ό λ§λ€ μ μμ
- κ°λ³ κ°μ²΄λ₯Ό ν΅ν΄ μμ μ νλ λμ€ μμΈκ° λ°μνλλΌλ λ©μλ νΈμΆ μ μ μνλ₯Ό μ μ§ν μ μμ΄ μμΈ λ°μ μ κ³Ό λκ°μ μνλ‘ λ€μ λ‘μ§μ μ²λ¦¬ν μ μμ
3. λΆμν¨κ³Όλ₯Ό νΌν΄ μ€λ₯λ₯Ό μ΅μν ν μ μμ
- λΆλ³ κ°μ²΄μ κ°μ μμ ν μ μμΌλ―λ‘ λ€λ₯Έ λ©μλκ° νΈμΆλμ΄λ κ°μ²΄μ μνκ° μ μ§λμ΄ μμ μκ² κ°μ²΄λ₯Ό λ€μ μ¬μ©ν μ μμ
4. λ©μλ νΈμΆ μ νλΌλ―Έν° κ°μ΄ λ³νμ§ μμμ 보μ₯ν μ μμ
5. κ°λΉμ§ 컬λ μ μ μ±λ₯μ λμΌ μ μμ
μ°Έκ³ μλ£. https://mangkyu.tistory.com/131
[Java] λΆλ³ κ°μ²΄(Immutable Object) λ° finalμ μ¬μ©ν΄μΌ νλ μ΄μ
ν΄λ¦°μ½λλ₯Ό μ½μ΄λ, μ΄νν°λΈ μλ°λ₯Ό μ½μ΄λ, κ°λ°μ μνλ νμ μκΈ°λ₯Ό λ€μ΄λ νμ μ’μ μ½λλ₯Ό μκΈ°ν λλ©΄ λΆλ³μ κ°μ²΄λ₯Ό νμ°μ μΌλ‘ μ νκ² λλ κ² κ°μ΅λλ€. κ·Έλμ μ΄λ²μλ λΆλ³μ κ°
mangkyu.tistory.com
π μ λ€λ¦(Generic)μ΄λ?
ν΄λμ€ λ΄λΆμμ μ¬μ©ν λ°μ΄ν° νμ μ μΈλΆμμ μ§μ νλ κΈ°λ²
- μ»΄νμΌμ νμ 체ν¬λ₯Ό ν μ μμ (μλ¬λ₯Ό μ¬μ μ λ°©μ§)
- νμ λ³ν λΆνμ
- λΉμ·ν κΈ°λ₯μ μ§μνλ κ²½μ° μ½λμ μ¬μ¬μ©μ±μ΄ λμμ§
** JDK 1.7λΆν°λ μμ μ μΈλ νμ μΌλ‘ μ»΄νμΌλ¬μμ μΆμΈ‘μ΄ κ°λ₯νμ¬ λ€μ μμ±μμμ μ λ€λ¦μ μλ΅ν μ μμ
νμ νλΌλ―Έν°
E - Element (컬λ μ ν΄λμ€μ κ°μ΄ λ°°μ΄ κΈ°λ°μΌλ‘ λμ΄ μλ ꡬ쑰μλ Eκ° μ΄μΈλ¦Ό)
K - Key
N - Number
V - Value
T - Type
? - μμΌλμΉ΄λ (μμ μλ νμ / νλΌλ―Έν°μ κ°μ νμ μ΄ λͺ ννμ§ μμ λ)
π μ κ·Ό μ νμ(Access Modifier)μ μ’ λ₯μ μ€λͺ
λ³μ λλ λ©μλμ μ κ·Ό λ²μλ₯Ό μ€μ ν΄μ£ΌκΈ° μν΄ μ¬μ©νλ μμ½μ΄
1. public : μ κ·Ό μ νμ΄ μμ (κ°μ νλ‘μ νΈ λ΄ μ΄λμλ μ¬μ© κ°λ₯)
2. private : ν΄λΉ ν΄λμμμλ§ μ¬μ© κ°λ₯
3. protected : ν΄λΉ ν¨ν€μ§ λ΄, λ€λ₯Έ ν¨ν€μ§μμ μμλ°μ μμ ν΄λμ€μμ μ κ·Ό κ°λ₯
4. default : ν΄λΉ ν¨ν€μ§ λ΄μμλ§ μ κ·Ό κ°λ₯
π ν΄λμ€(Class)μ κ°μ²΄(Object)
ν΄λμ€
- κ°μ²΄λ₯Ό μ μν μ€κ³λλ‘ κ°μ²΄λ₯Ό μμ±νλλ° μ¬μ©
κ°μ²΄
- ν΄λμ€μ μν΄ μ μλκ³ μ€κ³λ λ΄μ©μ κΈ°λ°μΌλ‘ μμ±
- μμ±λ κ°μ²΄λ₯Ό μΈμ€ν΄μ€λΌκ³ ν¨
π μλ°μμ nullμ μμ νκ² λ€λ£¨λ λ²
μλ°μμ κ°μ₯ λ§μ΄ λ°μνλ μ€λ₯λ NPE(NullPointException)μΌλ‘ μ¬λ¬ λ°©λ²μ΄ μμΌλ Optionalμ μ¬μ©ν μ μμ
Optionalμ λ©μλλ₯Ό ν΅ν΄ null μ¬λΆλ₯Ό νμΈνκ³ κΈ°λ³Έ κ°μΌλ‘ μ€μ νκ±°λ μμΈλ₯Ό λ°μμμΌ μ²λ¦¬ν μ μμ
Optional ν΄λμ€
- Java 8μ λμ λ Optional λ©μλλ₯Ό μ¬μ©νμ¬ κ°μ μ‘΄μ¬ μ¬λΆλ₯Ό 체ν¬νκ³ κ°μ΄ μλ κ²½μ°μ λν κΈ°λ³Έμ²λ¦¬λ₯Ό ν μ μμ
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
String str = "Hello, World!";
// Optional κ°μ²΄ μμ±
Optional<String> optionalStr = Optional.of(str);
// κ°μ μ‘΄μ¬ μ 무 νμΈ
boolean isPresent = optionalStr.isPresent();
System.out.println("κ°μ μ‘΄μ¬ μ 무: " + isPresent); // μΆλ ₯: κ°μ μ‘΄μ¬ μ 무: true
// κ° μΆμΆ
String value = optionalStr.get();
System.out.println("κ°: " + value); // μΆλ ₯: κ°: Hello, World!
// κ° λ³κ²½
optionalStr = optionalStr.map(s -> s.toUpperCase());
value = optionalStr.get();
System.out.println("λ³κ²½λ κ°: " + value); // μΆλ ₯: λ³κ²½λ κ°: HELLO, WORLD!
// κ°μ΄ μ‘΄μ¬νμ§ μμ λ λ체 κ° μ€μ
String defaultValue = "Default Value";
String result = optionalStr.orElse(defaultValue);
System.out.println("κ°μ΄ μ‘΄μ¬νμ§ μμ λ λ체 κ°: " + result); // μΆλ ₯: κ°μ΄ μ‘΄μ¬νμ§ μμ λ λ체 κ°: HELLO, WORLD!
// κ°μ΄ μ‘΄μ¬νμ§ μμ λ μμΈ λ°μ
String nonNullValue = optionalStr.orElseThrow(IllegalStateException::new);
System.out.println("κ°μ΄ μ‘΄μ¬νμ§ μμ λ μμΈ λ°μ: " + nonNullValue);
}
Javaμ Optional μλ£κ΅¬μ‘°: Null μμ μ±κ³Ό κ°μ μ‘΄μ¬ μ 무λ₯Ό νννλ ν΄λμ€
Javaμμλ μ½λ μμ± μ NullPointerException λ±μ μμΈλ₯Ό λ°©μ§νκ³ , κ°μ μ‘΄μ¬ μ 무λ₯Ό νννκΈ° μν΄ Optionalμ΄λΌλ νΉλ³ν μλ£κ΅¬μ‘°λ₯Ό μ 곡ν©λλ€. Optionalμ null κ° μ²λ¦¬λ₯Ό μμ νκ² λ€λ£° μ μλλ‘
velog.io
π 컬λ μ νλ μμν¬
- λ€μμ λ°μ΄ν°λ₯Ό μ½κ³ ν¨κ³Όμ μΌλ‘ κ΄λ¦¬ν μ μλ νμ€νλ λ°©λ²μ μ 곡νλ ν΄λμ€μ μ§ν©
- λ°μ΄ν°λ₯Ό μ μ₯νλ μλ£ κ΅¬μ‘°μ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ μκ³ λ¦¬μ¦μ ꡬ쑰ννμ¬ ν΄λμ€λ‘ ꡬνν΄ λμ κ²
List : μμκ° μλ λ°μ΄ν°μ μ§ν©, λ°μ΄ν°μ μ€λ³΅ νμ©
- ArrayList
1) λ°°μ΄μ μ΄μ©νλ ν΄λμ€λ‘ μΈλ±μ€λ₯Ό μ΄μ©ν΄ λ°°μ΄μ μμμ λΉ λ₯΄κ² μ κ·Όν μ μμ → O(1)
2) λ°°μ΄κ³Ό λ€λ₯΄κ² λ°°μ΄μ μΆκ°νκ³ μμ νλ λ©μλκ° μ‘΄μ¬ → O(N)
3) λ°μ΄ν° μΆκ°μ λ ν° μ©λμ μμ λ°°μ΄μ λ§λ€μ΄ 볡μ¬
- LinkedList
1) μ°κ²°λ λ Έλλ€μ μ§ν©μΌλ‘ κ° λ Έλλ λ°μ΄ν°μ ν¬μΈν°λ‘ μ΄λ£¨μ΄μ§
2) λ°μ΄ν° μΆκ°μ μλ‘μ΄ λ°μ΄ν° λ ΈνΈλ₯Ό λ§λ€κ³ μ΄μ λ Έλμ ν¬μΈν°λ₯Ό μ λ Έλλ₯Ό κ°λ¦¬ν€κ² λ§λ¦
3) κ° λ Έλλ μ, λ€μ λ ΈνΈμ μμΉλ₯Ό μ μ₯
4) νμμ μ΅λ O(N), μ½μ /μμ μ O(1) 볡μ‘λλ₯Ό κ°μ§
- Stack(LIFO)
- Queue(FIFO)
Set : μμ μλ λ°μ΄ν°μ μ§ν©μΌλ‘ λ°μ΄ν°μ μ€λ³΅μ νμ©νμ§ μμ
- HashSet, TreeSet
Map : ν€μ κ°μ ν μμΌλ‘ μ΄λ£¨μ΄μ§λ λ°μ΄ν°μ μ§ν©μΌλ‘ μμκ° μμ
- ν€λ μ€λ³΅μ νμ©νμ§ μμ§λ§, κ°μ μ€λ³΅μ νμ©
- HashMap, TreeMap, HashTable, Properties
μ°Έκ³ μλ£.
ArrayList, LinkedListμ νΉμ§κ³Ό μ°¨μ΄
μ€λ³΅μ νμ©νκ³ μμλ₯Ό μ μ§νλ©° μΈλ±μ€λ‘ μμλ€μ κ΄λ¦¬νλ€λ μ μμ Arrayμ λΉμ·νμ§λ§ ArrayListλ λ°°μ΄κ³Ό λ€λ₯΄κ² λ°°μ΄μ μΆκ°νκ³ μμ νλ λ©μλκ° μ‘΄μ¬λ°μ΄ν° μΆκ°μ λ ν° μ©λμ μμ
velog.io
π Listμ Mapμ μ°¨μ΄
Listλ μμκ° μκ³ μ€λ³΅μ νμ©νμ§λ§, Mapμ key-value μμΌλ‘ μ΄λ£¨μ΄μ§ μ§ν©μΌλ‘ μμκ° μμ
π Java λ°μ΄ν° νμ μ€λͺ (Array, ArrayList, Map, LinkedList, HashMap)
1. Array λ°°μ΄ : λμΌν λ°μ΄ν° νμ μ μ§ν©
2. ArrayList : μλ° μ»¬λ μ νλ μμν¬μμ List μΈν°νμ΄μ€μ μνλ©° μμκ° μκ³ , μ€λ³΅μ΄ νμ©λλ©°, λ°°μ΄κ³Ό λ¬λ¦¬ μ½μ , μμ λ©μλκ° μ‘΄μ¬ν¨. μλ£ νμμ μ©μ΄
3. LinkedList : ArrayListμ λ¨μ μ 보μνκΈ° μν΄ λ±μ₯ν κ²μΌλ‘ μ°κ²°λ λ Έλ κ°μ μ§ν©μ μλ―Έν¨. λ Έλλ λ°μ΄ν°μ ν¬μΈν°λ₯Ό ν¬ν¨ν΄ ν¬μΈν°λ λ Έλμ μ, λ€ μμΉλ₯Ό μ μ₯. μ½μ , μμ κ° λΉλ²ν κ²½μ°μ μ¬μ©νλ©΄ μ’μ
4. Map: key-value μμ μ§ν©μΌλ‘ μμκ° μλ λ°μ΄ν° νμ
5. HashMap : ν΄μ±(Hashing)λ 맡(Map)μΌλ‘ ν΄μ±μ μ¬μ©νμ¬ λ§μ μμ λ°μ΄ν°λ₯Ό κ²μνλλ° λ°μ΄λ μ±λ₯μ 보μ
π μ΄λ Έν μ΄μ (Anotation)
- μμ€ μ½λμ μΆκ°ν΄μ μ¬μ©ν μ μλ λ©ν λ°μ΄ν°μ μΌμ’ μΌλ‘ @ κΈ°νΈλ₯Ό μμ λΆμ¬ μ¬μ©
- λ©ν λ°μ΄ν°λ μ ν리μΌμ΄μ μ΄ μ²λ¦¬ν΄μΌν λ°μ΄ν°κ° μλλΌ μ»΄νμΌ κ³Όμ κ³Ό μ€ν κ³Όμ μμ μ½λλ₯Ό μ΄λ»κ² μ²λ¦¬ν΄μΌ νλμ§ μλ €μ£ΌκΈ° μν μΆκ° μ 보
π μ§λ ¬ν(Serialization) & μμ§λ ¬ν(Deserialization)
μ§λ ¬ν : μλ° μμ€ν λ΄λΆμμ μ¬μ©λλ κ°μ²΄ λλ λ°μ΄ν°λ₯Ό μΈλΆμ μμ€ν μμλ μ¬μ©ν μ μλλ‘ λ°μ΄νΈ ννλ‘ λ°μ΄ν°λ₯Ό λ³ννλ κΈ°μ
μμ§λ ¬ν : μ§λ ¬νλ λ°μ΄ν°λ₯Ό λ€μ μλ° κ°μ²΄μ ννλ‘ λ§λλ κ³Όμ
π MVC ꡬ쑰λ
- Model - View - Controllerλ‘ GUI κΈ°λ°μ μ ν리μΌμ΄μ κ°λ°μ μ¬μ©λ λμμΈ ν¨ν΄
- νλ©΄κ³Ό λ°μ΄ν° μ²λ¦¬λ₯Ό λΆλ¦¬ν΄ μ½λ κ°μ μ’ μμ±μ μ€μ΄κ³ κ΅¬μ± μμ κ°μ μν μ λͺ ννκ² ν¨μΌλ‘μ¨ μ½λ λΆλ¦¬κ° μ½κ³ νμ μ μ©μ΄νκ² ν¨
- Model : λ°μ΄ν° μ²λ¦¬ μμ (λ°μ΄ν°λ² μ΄μ€ μ°λμ μν DAO, λ°μ΄ν° ꡬ쑰λ₯Ό νννλ DOλ‘ κ΅¬μ±)
- View : νλ©΄μ λ΄λΉνλ λΆλΆ (JSP λ±)
- Controller : μ¬μ©μ μμ²μ μ²λ¦¬. 컨νΈλ‘€λ¬λ νΉμ λ·°λ₯Ό μ§μ ν΄μΌ νκΈ° λλ¬Έμ λ·°μ μ’ μκ΄κ³κ° λ°μν μ λ°μ μλ ꡬ쑰. λ°λΌμ 컨νΈλ‘€λ¬μ μν μ΄ μ»€μ§λ―λ‘ Serviceλ¨μ΄ μκΉ.
π DAO, DTO, VO
DAO(Data Access Object)
- DBμ λ°μ΄ν°μ μ κ·ΌνκΈ° μν κ°μ²΄
- μ§μ DBμ μ κ·Όνμ¬ λ°μ΄ν°λ₯Ό μ½μ , μμ , μ‘°ν
- νμ¬ λ§μ΄ μ°μ΄λ MyBatis λ±μ μ¬μ©ν κ²½μ° μ»€λ₯μ νκΉμ§ μ 곡νλ―λ‘ DAOλ₯Ό λ³λλ‘ λ§λλ κ²½μ°λ λλ―λ€.
DTO(Data Transfer Object)
- κ³μΈ΅ κ°(Controller, View, Business Layer) λ°μ΄ν° κ΅νμ μν Java Bean
- λ‘μ§μ κ°μ§μ§ μλ λ°μ΄ν° κ°μ²΄λ‘ getter/setter λ©μλλ§ κ°μ§ ν΄λμ€
VO(Value Object)
- Read-Only μμ±μ κ°μ§ κ° μ€λΈμ νΈ(λΆλ³)