Java κΈ°λ³Έ κ°λ μ λν μ§λ¬Έ
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP)μ 4κ°μ§ μ£Όμ κ°λ (μΊ‘μν, μμ, λ€νμ±, μΆμν)μ λν΄ μ€λͺ ν΄μ£ΌμΈμ. κ° κ°λ μ Javaμμμ ꡬν λ°©λ²λ κ°λ¨ν μΈκΈν΄μ£ΌμΈμ.
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ΄λ κ°μ²΄λ€μ΄ λͺ¨μ¬ μν΅νκ³ νλ ₯νμ¬ νλμ μννΈμ¨μ΄ νλ‘κ·Έλ¨μ μ΄λ£¨λ ν¨λ¬λ€μ μ λλ€
4κ°μ§ μ£Όμ κ°λ μ΄ OOPμ μλλ° μΊ‘μν,μμ,λ€νμ±,μΆμνκ° μμ΅λλ€.
κ°λ¨νκ² μΊ‘μνλ μμ±κ³Ό νμλ₯Ό ν΄λμ€λ‘ λ¬Άλ κ²μΈλ° λ°μ΄ν° 보νΈμ μλμ ν μ μμ΅λλ€. private λ©€λ² λ³μλ public μ getter/setter method μ¬μ©μ΄ μμ΅λλ€.
μμμ κΈ°μ‘΄ ν΄λμ€μ μμ±κ³Ό λ©μλλ₯Ό μλ‘μ΄ ν΄λμ€κ° μ¬μ¬μ©νλ κ²μ΄κ³ λͺ©μ μ μ½λμ μ¬μ¬μ©κ³Ό κ³μΈ΅ ꡬ쑰 ννμ μμ΅λλ€. μ£Όλ‘ extends ν€μλ μ¬μ©ν΄μ κ°λ¨ν μμμ μ¬μ©ν μ λ°©λ²μ΄ μμ΅λλ€.
βοΈ λ€νμ±μ νλμ μΈν°νμ΄μ€λ λ©μλκ° μ¬λ¬ λ€λ₯Έ λ°©μμΌλ‘ λμν νλ κ²μ΄λ©° λͺ©μ μ μ μ°μ±κ³Ό νμ₯μ±μ μκ³ μλ°μμ μ£Όλ‘ μ€λ²λΌμ΄λ©, μ€λ²λ‘λ©μΌλ‘ λ€νμ±μ μ¬μ©ν©λλ€.
μΆμνλ 볡μ‘ν μμ€ν μμ ν΅μ¬μ μΈ κ°λ μ΄λ κΈ°λ₯μ κ°μΆλ¦¬λ κ²μ΄λ©° λͺ©μ μ체λ 볡μ‘μ± κ°μμ μ€κ³μ μ μ°μ±μ λμ΄λ κ²μ λλ€ abstract classλ₯Ό μ¬μ©νκ±°λ interfaceλ₯Ό μ¬μ©νλ©΄ λ©λλ€.
- Javaμ λ©λͺ¨λ¦¬ κ΄λ¦¬ λ°©μμ λν΄ μ€λͺ ν΄μ£ΌμΈμ. νΉν κ°λΉμ§ 컬λ μ (Garbage Collection)μ μλ μ리μ JVMμ λ©λͺ¨λ¦¬ ꡬ쑰(ν, μ€ν λ±)μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
JVMμ λ©λͺ¨λ¦¬ ꡬ쑰λ ν, λ©μλ, μ€ν, νΌμ λ μ§μ€ν°, λ€μ΄ν°λΈ λ©μλ μ€νκ° μμ΅λλ€.
ν μμμ κ°μ²΄μ λ°°μ΄μ΄ μ μ₯λλ κ³³μΌλ‘ λμ μΌλ‘ μμ±λκ³ μλ©Έλλ λ°μ΄ν°λ₯Ό κ΄λ¦¬ν©λλ€. κ°λΉμ§ 컬λ μ μ μ£Όμ λμμ λλ€.
λ©μλ μμμ ν΄λμ€ κ΅¬μ‘°μ λ©μλ λ°μ΄ν°, ν΄λμ€ λ³μ, μμ λ± μ μ μΈ λ°μ΄ν°λ₯Ό μ μ₯ν©λλ€.
μ€ν μμμ λ©μλ νΈμΆ μ μμ±λλ μ€ν νλ μ, μ§μ λ³μ, λ§€κ° λ³μ λ±μ μ μ₯ν©λλ€.
νΌμ λ μ§μ€ν°λ νμ¬ μ€νμ€μΈ λͺ λ Ήμ μ£Όμλ₯Ό μ μ₯νκ³ , κ° μ€λ λλ§λ€ λ³λλ‘ μμ±λκ³ μ€λ λκ° μ’ λ£λλ©΄ μμ λ©λλ€.
λ€μ΄ν°λΈ λ©μλλ λ€μ΄ν°λΈ λ©μλ μ 보λ₯Ό μ μ₯ν©λλ€.
βοΈ -> μ νλ§ μ μ₯ ? κ·Έ μ΄μ λ μ¬λ¬κ°μ§μΈλ° κ°λΉμ§ 컬λ ν°κ° ν μμμμλ§ νλμ νλλ° ν μμμ λμ λ©λͺ¨λ¦¬ ν λΉμ΄ κ°λ₯νλ° κ°μ²΄μ ν¬κΈ°λ₯Ό μ μ₯νλλ°μ μμ΄ μμ λ‘κ³ μ΄λ‘ μΈν μλͺ μ£ΌκΈ° κ΄λ¦¬μ μ ν©νκ³ λ©ν°μ€λ λ©μ μ§μν΄ μ¬λ¬ μ€λ λκ° λμμ μ κ·Όν μ μκ³ μλ μ λ¦¬κ° λμ΄ νμ μ μ₯νλκ² μ 리ν©λλ€.
κ°λΉμ§μ»¬λ μ μ λμμ리λ κ°μ²΄ μμ± > κ°μ²΄ μ¬μ© > μ°Έμ‘° ν΄μ > κ°λΉμ§ 컬λ μ λμ > λ§νΉ > μ€μν > μμΆ >λ©λͺ¨λ¦¬ λ°ν μ΄λ£¨μ΄μ§λ©°, λ§νΉμ ν΅ν΄μ λͺ¨λ μ κ·Ό κ°λ₯ν κ°μ²΄λ₯Ό μλ³νκ³ λ§νΉ ν λ€μ μ€μν κ³Όμ μμ λ§νΉμμ μ μΈλ κ°μ²΄ λ©λͺ¨λ¦¬λ€μ μ κ±°νκ³ μμΆ κ³Όμ μμ λ¨μ κ°μ²΄λ€μ μ°μλ λ©λͺ¨λ¦¬ 곡κ°μΌλ‘ μ΄λμμΌ λ¨νΈνλ₯Ό λ°©μ§ν©λλ€.
-> 1. μλ μ€ λ°μκ°λ₯ν λ¬Έμ λ ?
- μΆμ ν΄λμ€μ μΈν°νμ΄μ€μ μ°¨μ΄μ μ 무μμΈκ°μ? κ°κ° μ΄λ€ μν©μμ μ¬μ©νλ κ²μ΄ μ ν©νμ§ μλ₯Ό λ€μ΄ μ€λͺ ν΄μ£ΌμΈμ.
μΆμ ν΄λμ€λ κΈ°λ³Έμ μΌλ‘ μμκ³Ό νμ₯νμ¬ μ¬μ©νκΈ° μν κ²μ΄λ©° μΈν°νμ΄μ€λ λμΌν μ¬μ©λ°©λ²κ³Ό λμμ 보μ₯νκΈ° μν κ²μΌλ‘ μ°¨μ΄λ₯Ό λνλ΄κ³ μμ΅λλ€.
μΆμ ν΄λμ€λ 곡ν΅μ μΈ μμ±κ³Ό κΈ°λ₯μ κ°μ§ κ΄λ ¨ ν΄λμ€λ€μ κΈ°λ³Έ νμ μ 곡νλ λ° μ ν©ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ½λ μ¬μ¬μ©μ±μ λμ΄κ³ κ΄λ ¨ ν΄λμ€λ€ κ°μ μΌκ΄μ±μ μ μ§ν μ μμ΅λλ€. μΈν°νμ΄μ€λ ν΄λμ€μ νΉμ νλμ μ μνλ λ° μ€μ μ λ‘λλ€. μλ‘ λ€λ₯Έ ν΄λμ€λ€μ΄ λμΌν λ°©μμΌλ‘ λμν΄μΌ ν λ μ¬μ©νλ©°, λ€μ€ ꡬνμ ν΅ν΄ μ μ°ν μ€κ³κ° κ°λ₯ν©λλ€. λ κ°μ§ λͺ¨λ μ½λ μ¬μ¬μ©κ³Ό λ€νμ±μ μ¦μ§μν€μ§λ§, μΆμ ν΄λμ€λ '무μμΈκ°'λ₯Ό λνλ΄λ λ°λ©΄, μΈν°νμ΄μ€λ '무μμ ν μ μλκ°'λ₯Ό λνλ λλ€
- Javaμ μμΈ μ²λ¦¬ λ©μ»€λμ¦μ λν΄ μ€λͺ ν΄μ£ΌμΈμ. Checked Exceptionκ³Ό Unchecked Exceptionμ μ°¨μ΄, κ·Έλ¦¬κ³ try-catch-finally λΈλ‘μ μ¬μ©λ²μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
μλ°μ μμΈ μ²λ¦¬ λ©μ»€λμ¦μ νλ‘κ·Έλ¨ μ€ν μ€ λ°μν μ μλ μμΈ μν©μ κ΄λ¦¬νλ λ°©λ²μ λλ€. μ£Όλ‘ try-catch λΈλ‘μ μ¬μ©ν΄ ꡬνν©λλ€.
checked μ unchecked μ°¨μ΄λ checkedλ μ»΄νμΌ μμ μ μ²λ¦¬λ₯Ό κ°μ νκ³ uncheckedλ λ°νμμ λ°μν©λλ€.
try λΈλ‘ μμΈκ° λ°μ κ°λ₯μ±μ΄ μλ μ½λλ₯Ό ν¬ν¨μν΅λλ€
catch λΈλ‘ tryλΈλ‘μμ λ°μν μμΈλ₯Ό μ²λ¦¬νλ μ½λλ₯Ό ν¬ν¨ν©λλ€ catch λΈλ‘μ μ¬λ¬κ° μμ±μ΄ κ°λ₯νλ©° λ€μν μμΈλ₯Ό μ²λ¦¬ν μ μμ΅λλ€. μμΈ νμ μ λ²μκ° μ’μ κ²λΆν° λμ μμΌλ‘ μμ±ν΄μΌ ν©λλ€.
finally λΈλ‘ μμΈ λ°μ μ¬λΆμ κ΄κ³μμ΄ νμ μ€νλλ μ½λλ₯Ό ν¬ν¨ν©λλ€. 무쑰건 μ¬μ©μ΄ μλ μ νμ μΌλ‘ μ¬μ©μ΄ κ°λ₯ν©λλ€.
1. try-with-resourcesλ 무μμΈκ°μ?
-> Java 7μμ λμ
λ κΈ°λ₯μΌλ‘, AutoCloseable μΈν°νμ΄μ€λ₯Ό ꡬνν 리μμ€λ₯Ό μλμΌλ‘ λ«μμ£Όλ ꡬ문μ
λλ€.
2. μμΈλ₯Ό 무μνλ κ²(swallowing exceptions)μ λ¬Έμ μ μ 무μμΈκ°μ?
-> λλ²κΉ
μ μ΄λ ΅κ² λ§λ€κ³ , μ μ¬μ μΈ λ²κ·Έλ₯Ό μ¨κΈΈ μ μμ΄ νλ‘κ·Έλ¨μ μμ μ±μ ν΄μΉ μ μμ΅λλ€.
- μλ°μ 컬λ μ νλ μμν¬μ λν΄ μ€λͺ ν΄μ£ΌμΈμ. List, Set, Map μΈν°νμ΄μ€μ μ£Όμ νΉμ§κ³Ό κ·Έ ꡬν ν΄λμ€λ€μ μ°¨μ΄μ μ μ€λͺ ν΄μ£ΌμΈμ.
μλ° μ»¬λ μ νλ μμν¬λ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μ²λ¦¬νκΈ° μν μΌκ΄λ ꡬ쑰μ ν΄λμ€μ μΈν°νμ΄μ€ μ§ν©μ λλ€. μΈν°νμ΄μ€μ λ€νμ±μ μ΄μ©ν κ°μ²΄ μ§ν₯μ μ€κ³λ₯Ό ν΅ν΄ νμ€νλμ΄μμ΄μ μ¬μ©λ²μ μ΅νκΈ°μ νΈνκ³ μ¬μ¬μ©μ±μ΄ λμ΅λλ€.
μ₯μ μ ?
List Listλ μμκ° μκ³ μ€λ³΅μ νμ©νλ λ°μ΄ν° ꡬ쑰μ λλ€. μ£Όμ ν΄λμ€λ‘λ ArrayListμ LinkedListκ° μμΌλ©° Array리μ€νΈλ λ΄λΆμ μΌλ‘ λμ λ°°μ΄μ μ¬μ©ν΄ λΉ λ₯Έ λλ€ μ κ·Όμ΄ κ°λ₯νμ§λ§ μ€κ° μ½μ /μμ κ° λ립λλ€.
Linked리μ€νΈλ μ΄μ€ μ°κ²° 리μ€νΈλ‘ ꡬνλμ΄ μ€κ° μ½μ /μμ κ° λΉ λ₯΄μ§λ§ λλ€ μ κ·Όμ΄ λ립λλ€.
μμκ° μ€μνκ±°λ μ€λ³΅ μμλ₯Ό νμ©ν λ μ¬μ©(μ. μ΅κ·Ό κ²μκΈ°λ‘, λκΈ°μ΄)
Set setμ μ€λ³΅μ νμ©νμ§ μλ λ°μ΄ν° ꡬ쑰μ λλ€. HashSet κ³Ό TreeSet, LinkedHashSetμ΄ μμΌλ©° ν΄μ¬μ μ ν΄μ ν μ΄λΈμ μ¬μ©ν΄ κ°μ₯ λΉ λ₯Έ κ²μκ³Ό μ½μ μ μ 곡νμ§λ§, μμλ₯Ό 보μ₯νμ§μμ΅λλ€.
νΈλ¦¬μ μ μ΄μ§ κ²μ νΈλ¦¬λ₯Ό μ¬μ©ν΄ μμλ₯Ό μ λ ¬λ μνλ‘ μ μ§ν©λλ€.
λ§ν¬λν΄μ¬μ μ ν΄μ¬μ μ λ§ν¬λ리μ€νΈ κ²°ν©νμ¬ μ½μ μμλ₯Ό μ μ§ν©λλ€ μμμ κ³ μ μ±, κ²μ μλ, μ λ ¬ νμμ± λ±μ κ³ λ €νμ¬ μ μ ν Setμ μ νν΄μΌν©λλ€.
μ€λ³΅μ νμ©μΉ μκ³ κ³ μ ν λ°μ΄ν° μ§ν©μ΄ νμν λ(μ. κ³ μ μλ³μ, λ°©λ¬Έν μΉ νμ΄μ§ URL)
Map λ§΅μ ν€-κ° μμΌλ‘ λ°μ΄ν°λ₯Ό μ μ₯νλ ꡬ쑰μ λλ€. HashMap, TreeMap, LinkedHashMap μ΄ μμΌλ©°
ν΄μ¬λ§΅μ ν΄μ ν μ΄λΈμ μ¬μ©νμ¬ λΉ λ₯Έ κ²μκ³Ό μ½μ μ μ 곡νμ§λ§ μμλ 보μ₯νμ§ μμ΅λλ€.
νΈλ¦¬λ§΅μ λ λ-λΈλ νΈλ¦¬λ₯Ό μ¬μ©ν΄ ν€λ₯Ό κΈ°μ€μΌλ‘ μ λ ¬λ μνλ₯Ό μ μ§ ν©λλ€.
λ§ν¬λν΄μ¬λλ§΅μ ν΄μ¬λ§΅μ λ§ν¬λ리μ€νΈλ₯Ό κ²°ν©ν΄ μ½μ μμλ μ κ·Ό μμλ₯Ό μ μ§ν μ μμ΅λλ€.
ν€ - κ° μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ κ²μν΄μΌ ν λ (μ. μΊμ, μ€μ μ 보, μ¬μ )
- λ©ν°μ€λ λ©μ΄λ 무μμ΄λ©°, Javaμμ μ΄λ»κ² ꡬνν μ μλμ? μ€λ λμ μλͺ μ£ΌκΈ°μ λκΈ°ν λ°©λ²μ λν΄ μ€λͺ ν΄μ£ΌμΈμ. νλμ νλ‘μΈμ€λ₯Ό λ€μμ μ€ν λ¨μλ‘ κ΅¬λΆνμ¬ μμμ 곡μ νκ³ μμμ μμ°κ³Ό κ΄λ¦¬μ μ€μμ±μ μ΅μννμ¬ μν λ₯λ ₯μ ν₯μνλκ² μ¬λ¬ κ°μ μ€λ λλ₯Ό ν΅ν΄ νλμ νλ‘κ·Έλ¨μμ λμμ μ¬λ¬ κ°μ μΌμ μνν μ μλλ‘ ν΄μ£Όλ κ²
Thread ν΄λμ€ μμκ³Ό Runnable μΈν°νμ΄μ€ ꡬν κ·Έλ¦¬κ³ Executor νλ μμν¬λ₯Ό μ¬μ©νλ 3 κ°μ§μ λ°©λ²μ΄ μμ΅λλ€. λ¨λ λμ λ¬λλΈμ μ΄μ©ν λ κ°μ§ λ°©μμ κΈ°λ³Έμ μΈ μ€λ λ μμ± λ°©λ²μ΄μ§λ§ νλ‘λμ νκ²½μμλ μ¬λ¬ νκ³μ μ΄ μμ΅λλ€
νκ³μ μ΄? 1. μ€λ λ μμ±κ³Ό μλ©Έμ μ€λ²ν€λ 2. μ€λ λ μμ μ νμ μ μ΄ 3. μμ νμ, μ€λ λ μ¬μ¬μ© λ±μ κΈ°λ₯ λΆμ¬
μ€λ λμ μλͺ μ£ΌκΈ°λ new -> runnalbe -> running -> blocked -> Dead μ μμλ‘ μ€λ λκ° μμ±λκ³ start() λ©μλ νΈμΆνλ©΄ Runnalbe μνλ‘ μ΄λνλλ° Runnalbe μνμμ μ°λ λ μ€μΌμ₯΄λ¬μ μν΄ λ¬λμνλ‘ μ΄λνκ² λλ€μ μ€λ λκ° νΉμ μ΄μ λ‘ λ¬λ μνμμ λΈλ‘μνλ‘ μ΄λνκ² λλ€. λΈλ‘ λ¨κ³λ λκΈ°ν λ©μλ νΉμ λκΈ°ν λΈλ‘μ μ€ννκΈ° μν΄ λ¨Όμ μ€νμ€μΈ μ°λ λλ₯Ό μ€ν μλ£λ₯Ό κΈ°λ€λ¦¬λ μνμ΄λ€ μ°λ λκ° μ’ λ£λλ©΄ κ·Έ μ°λ λλ λ€μ μμν μμκ² λ°λ λ¨κ³μμ μ²λ¦¬λλ€.
λκΈ°ν λ°©λ²μ Synchronized ν€μλ, Volatile ν€μλ, concurrent ν¨ν€μ§κ° μμ΅λλ€. μ±ν¬λ‘λμ΄μ¦λ ν€μλλ λ©μλλ λΈλ‘μ μ¬μ©νμ¬ ν λ²μ νλμ μ€λ λλ§ μ κ·Όν μ μκ²ν©λλ€. κ°μ₯ κΈ°λ³Έμ μΈ λ°©λ²μ λλ€.
Volatile ν€μλλ λ©ν° μ€λ λ μν©μμ νλμ μ€λ λκ° write&readνκ³ λλ¨Έμ§ μ€λ λκ° μ½λ μν©μ κ²½μ°μ μ ν©ν©λλ€.
Concurrent ν¨ν€μ§ μλ° 5μμ μΆκ°λ ν¨ν€μ§λ‘, λκΈ°νκ° νμν μν©μ μ¬μ©ν μ μλ μ νΈλ¦¬ν° ν΄λμ€λ₯Ό μ 곡ν©λλ€.
Concurrent ν¨ν€μ§ μ€λͺ
ν΄μ£ΌμΈμ
λμμ± μ»¬λ μ
- ConcurrentHashMap μ¬λ¬ μ°λ λκ° λμμ μ½κ³ μΈ μ μμΌλ©°, μ 체 λ§΅μ λ½νμ§ μκ³ νΉμ λΆλΆμλ§ λ½μ κ²λλ€.
μ€νμ νλ μμν¬
- ExecutorService μ€λ λ νμ κ΄λ¦¬νκ³ λΉλκΈ° μμ
μ€νμ λ¨μνν©λλ€.
λκΈ°ν μ νΈλ¦¬ν°
λμμ± ν
μμμ λ³μ
- Javaμ μ κ·Ό μ μ΄μ(public, protected, default, private)μ μ°¨μ΄μ κ³Ό μ¬μ© λͺ©μ μ λν΄ μ€λͺ ν΄μ£ΌμΈμ. μΊ‘μνμ μ΄λ€ κ΄λ ¨μ΄ μλμ§λ μΈκΈν΄μ£ΌμΈμ. λ€ public λͺ¨λ μ κ·Όμ νμ©νμ¬ μΈλΆ ν΄λμ€μμλ μμ λ‘κ² μ¬μ©ν μ μμ΅λλ€. protected κ°μ ν΄λμ€λ μ΄λ₯Ό μμλ°μ νμν΄λμ€μμλ§ μ κ·Όμ΄ κ°λ₯ ν©λλ€. default μμ κ³Ό κ°μ ν¨ν€μ§μ μμλ ν΄λμ€λ§ μ κ·Όν μ μμ΅λλ€ private κ°μ ν΄λμ€ λ΄μμλ§ μ κ·Ό κ°λ₯νλ©° μΈλΆμμλ μ κ·Όμ΄ λΆκ°ν©λλ€.
νΌλΈλ¦μ μ΄λμλ μ¬μ© κ°λ₯ν κ³΅κ° APIλ₯Ό λ§λ€λ μ¬μ©νκ³ νλ‘ν νΈλ μμ κ΄κ³μμ μμ ν΄λμ€μ κΈ°λ₯μ νμν΄λμ€μμ μ¬μ©νκ² ν λ μ¬μ©νκ³ λν΄νΈλ κ°μ ν¨ν€μ§λ΄μμλ§ μ¬μ©νλ ν΄λμ€ λλ λ©€λ²λ₯Ό μ μν λ μ°κ³ . νλΌμ΄λΉμ ν΄λμ€ λ΄λΆμμλ§ μ¬μ©νλ λ©€λ²λ₯Ό μ μν λ μ°λ©°.
μΊ‘μνμ κ΄κ³μ λν΄μ νλΌμ΄λΉμ μ¬μ©ν΄ ν΄λμ€ λ΄λΆ μνλ₯Ό μ¨κΈ°κ³ , νΌλΈλ¦ λ©μλλ₯Ό ν΅ν΄ μ μ΄λ λ°©μμΌλ‘λ§ λ΄λΆ μνμ μ κ·Ό κ°λ₯νλλ‘ ν¨μΌλ‘μ¨ μΊ‘μνλ₯Ό ꡬνν©λλ€.