
2023-02-04 κ³ λ¨νλ μλ° μ
λ¬Έ νλ‘κ·Έλλ° μ±
μ μλ
νμ΅λλ€.
μ§μ§μ§μ§μ§!
Javaλ νλ«νΌμ μν₯μ λ°μ§ μλλ€. Javaλ₯Ό μ»΄νμΌ ν κ²½μ° .classμ νμ₯μλ₯Ό κ°κ²λλ©°, μ΄λ μ€κ° κΈ°κ³μ΄λ‘, μ΄μ체μ μ λ§λ μλ° κ°μ λ¨Έμ μ νμ©νμ¬μΌ μ€νμ΄ κ°λ₯νλ€. OSμ λ§λ κ°μ λ¨Έμ μ νμ©νμ¬ νλ«νΌμ μν₯μ λ°μ§ μλ μννΈμ¨μ΄λ₯Ό ꡬμΆν μ μκ²λλ©°, μ΄λ ν λ² μμ±νλ©΄, μ΄λμλ λμκ°λ€λ Javaμ μ¬λ‘건μ λ°λ₯Έ κ²°κ³Όμ΄λ€.Cλ C++κ³Ό λ¬λ¦¬ ν¬μΈν°λ₯Ό μ¬μ©νμ§ μκΈ° λλ¬Έμ λ©λͺ¨λ¦¬λ₯Ό μ§μ μ μ΄ν μΌμ΄ μμΌλ―λ‘ μμ λ μ½λλ₯Ό λ§λ€ μ μλ€.κ°λΉμ§ 컬λ ν° (GC)κ° μ¬μ©νμ§ μλ λμ λ©λͺ¨λ¦¬λ₯Ό μ£ΌκΈ°μ μΌλ‘ μκ±°νκΈ° λλ¬Έμ ν¨μ¨μ μΈ κ΄λ¦¬ λν κ°λ₯νλ€., <, β₯, β€, ==, β
, <<, >>>
ν΄λμ€
λ©€λ²λ³μ: ν΄λμ€ λ΄λΆμμ λ€λ£¨λ λ³μλ©μλ: ν΄λμ€ λ΄λΆμμ λ©€λ² λ³μλ₯Ό νμ©ν λͺ©μ μΌλ‘ μ μΈλ ν¨μvoidλ₯Ό μ μΈνλ€.ν¨ν€μ§: ν΄λμ€ νμΌμ λ¬Άμ(κ°μ μ΄λ¦μ ν΄λμ€λΌλ, ν¨ν€μ§ μ΄λ¦μ΄ λ€λ₯΄λ©΄ λ€λ₯Έ ν΄λμ€)ν¨μ
main μΈλΆμμ μ μΈλ ν¨μλ staticμ λΆμ¬μ£Όμ΄μΌ μ¬μ©μ΄ κ°λ₯νλ€.μ€νμ ννλ‘ λ©λͺ¨λ¦¬ 곡κ°μ΄ λ§λ€μ΄μ§λ©° LIFOννλ‘ λ°νλλ€.μ§μ λ³μλΌκ³ λΆλ₯΄κ³ , μ§μ λ³μλ μ€ν λ©λͺ¨λ¦¬μ μμ±λλ€.μΈμ€ν΄μ€
μΈμ€ν΄μ€λΌκ³ νλ€.μΈμ€ν΄μ€λ ν λ©λͺ¨λ¦¬μ ν΄λμ€κ° μ μ₯λλ©°, μ€ν λ©λͺ¨λ¦¬μ λ³μκ° μ μ₯λλ€.ν λ©λͺ¨λ¦¬λ, λμ λ©λͺ¨λ¦¬ 곡κ°μΌλ‘, μ¬μ©μ΄ λλ ν νλ‘κ·Έλλ¨Έκ° ν΄μ ν΄μ€μΌ νμ§λ§, μμ μ 리νλ―μ΄ Javaλ κ°λΉμ§ 컬λ ν°(GC)κ° μλμΌλ‘ μ¬μ©νμ§ μλ λ©λͺ¨λ¦¬λ₯Ό ν΄μ ν΄μ€λ€.μμ±μ
μμ±μλΌκ³ νλ€.μ€λ²λ‘λλΌκ³ νλ€.μ κ·Ό μ μ΄μ
public: μΈλΆν΄λμ€ μ΄λμμλ μ κ·Ό κ°λ₯protected: κ°μ ν¨ν€μ§ λ΄λΆ, μμ κ΄κ³μ ν΄λμ€μμ μ κ·Ό κ°λ₯defaultλ‘ κ°μ ν¨ν€μ§ λ΄λΆμμλ§ μ κ·Ό κ°λ₯private: κ°μ ν΄λμ€ λ΄λΆμμλ§ μ κ·Ό κ°λ₯getter: κ°μ μ»λ λ©μλsetter: κ°μ μ§μ νλ λ©μλthis
publicμ νμΌλͺ
κ³Ό κ°μ classλ§ κ°μ§ μ μλ€.. static
- staticμ λ€λ₯Έ λ©€λ² λ³μμ κ°μ λ°©μμΌλ‘ ν΄λμ€ λ΄λΆμ staticμ λΆμ¬ μ μΈνλ©°, λ§€λ² μλ‘ μμ±λλ λ³μκ° μλ λͺ¨λ μΈμ€ν΄μ€κ° 곡μ νλ λ³μμ΄λ€.
- ν΄λμ€ λ³μλΌκ³ λ λΆλ¦°λ€.
β» λ³μ μ ν μ 리
ν¨μμμμ κΈ°λ₯ ꡬν β μ§μ λ³μ
ν΄λμ€μ μμ±, κ° μΈμ€ν΄μ€ λ³ κ° β λ©€λ² λ³μ
μ¬λ¬ μΈμ€ν΄μ€μμ 곡μ β static λ³μ
μ±κΈν€ ν¨ν΄
arraycopyλ₯Ό ν΅ν΄ 볡μ¬λ μΈμ€ν΄μ€λ μλ‘ κ°μ μ£Όμλ₯Ό κ°λ₯΄ν€λ μμ λ³΅μ¬ μνκ° λλ€.extends ν€μλλ₯Ό μ¬μ©ν΄ ꡬνλλ©°, ν΄λΉ ν€μλλ₯Ό κΈ°μ€μΌλ‘ μ μλ νμ ν΄λμ€ νμλ μμ ν΄λμ€ λΌκ³ νλ€.protected λ₯Ό μ¬μ©νλ©΄ λλ€.super ν€μλλ₯Ό ν΅ν΄ μμ ν΄λμ€μ μμ±μλ₯Ό νΈμΆν μ μλ€.λ©μλ μ€λ²λΌμ΄λ©μ΄ λ°μν κ²½μ°, μμ ν΄λμ€μ λ©μλλ₯Ό νΈμΆν λ super.methodName() μ λ°©μμΌλ‘ νΈμΆν΄μΌνλ€.@Overide ν€μλλ μ€λ²λΌμ΄λ© λ λ©μλ μμ μ μΈνλ©°, μ»΄νμΌλ¬μ μλ €μ£Όλ μν μ νλ€.νμν΄λμ€μ μλ£νμΌλ‘ ν λ³ννλ κ²instanceof : λ€μ΄μΊμ€ν
μ μν΄ μΈμ€ν΄μ€μ μ μλ£νμ νμΈνλ μ©λλ‘ μ¬μ©abstract λ₯Ό λΆμ¬ μ μΈνλ€.abstract λ₯Ό λΆμ¬ μ μΈν΄μΌ μ€λ₯λ₯Ό λ°©μ§ν μ μλ€.@Override λ₯Ό μ μΈν λ©μλλ‘ μΆμννλ λ©μλλ₯Ό ꡬνν μ μλ€.new μμ½μ΄λ‘ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€.μ μΈκΉ?? β νμ ν΄λμ€μμ μ¬μ©ν λ©μλμ μΆμμ μΈ λ©΄μ μμ± (μμμ μν΄)final μμ½μ΄λ₯Ό ν΅ν΄ μλμ€λ¦¬λ₯Ό μ μνλ λ©μλλ‘, νμ ν΄λμ€μμ μ¬μ μ ν μ μμ΄μΌ νλ©°λ‘μ§μ νλ¦μ λνλΈλ€.λ³μ β μμλ₯Ό μλ―Ένλ€.λ©μλ β νμ ν΄λμ€μμ μ¬μ μν μ μλ€.ν΄λμ€ β μμν μ μλ€.μμ λ₯Ό ν νμΌμ λμ μ μΈνμ¬ μ¬μ©abstract μμ½μ΄λ₯Ό λͺ
μνμ§ μμλ μΆμ λ©μλλ‘ λ³νλλ€.implements μμ½μ΄λ‘ μ μ©μ΄ κ°λ₯νλ©°, λͺ¨λ λ©μλλ₯Ό ꡬννμ§ μλλ€λ©΄, μ μΈλ ν΄λμ€ λν μΆμ ν΄λμ€λ‘ μ νλλ€.μ μΈκΉ? μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€κ° μ΄λ€ κΈ°λ₯μ λ©μλλ₯Ό μ 곡νλμ§ λͺ
μνλ κΈ°λ₯μΌλ‘ μ¬μ©λλ€.java.lang μ μμΉμ μ‘΄μ¬νλ©°, κΈ°λ³Έμ μΌλ‘ μ»΄νμΌ λ λ extends μν€κΈ° λλ¬Έμ νλ‘κ·Έλλ¨Έκ° μ§μ μμ±ν νμλ μλ€.toString β λ©μλμ μΈμ€ν΄μ€ μ 보λ₯Ό 보μ¬μ€String , Integer νμ μ¬μ μλ λ©μλλ₯Ό μ¬μ©ν΄ object.(class)@(hashcode)μ ꡬμ±μ΄ μλ λ§€κ°λ³μ κ·Έ μ체λ₯Ό νΈμΆνλ€.@Override λ₯Ό ν΅ν΄ ν΄λμ€μ toString ν¨μλ₯Ό ꡬννμ¬ μνλλλ‘ κ²°κ΄κ° μΆμΆμ΄ κ°λ₯νλ€.equals β λ μμκ° κ°μμ§ λΉκ΅hashCode β ν΄λΉ μμμ μ£Όμκ°μ μΆλ ₯equals λ©μλλ₯Ό μ€λ²λΌμ΄λ© ν κ²½μ°, ν΄λΉ λ©μλλ κ°μ ν΄μ μ½λλ₯Ό κ°λ₯΄ν€λλ‘ λ³κ²½ν΄μ£Όμ΄μΌ νλ€.String str1 = new String("123"); // ν λ©λͺ¨λ¦¬μ μ μ₯
String str2 = "123"; // μμ νμ μ μ₯StringBuilder λ₯Ό μ¬μ©νλ©΄, λ¬Έμμ΄μ΄ λ³ν¨μ λ°λΌ μ μ£Όμλ₯Ό ν λΉνμ§ μκ³ κΈ°μ‘΄ μ£Όμμ μ°κ²°λλ€. μ¦ ν¨μ¨μ΄ μμΉClass μλ£νμ λ€μν λ©μλλ₯Ό μ¬μ©ν΄ ν΄λμ€μ μ΄λ¦μ κ°μ Έμ¬ μ μλ€.getClass, {ClassName}.class , Class.forNameClass.forName μ λ§€κ°λ³μλ‘ μ λ¬λλ λ¬Έμμ΄μ ν΅ν΄ ν΄λμ€μ λμ λ‘λ©μ΄ κ°λ₯νκΈ° λλ¬Έμ, μ μ°ν μ¬μ©μ΄ κ°λ₯νλ€.<T> μ μ μΈλ μλ£νμ λ°λΌ λ§μΆμ΄ μ»΄νμΌνλ―λ‘, νλ³νμ νμ§ μμλ λλ€.<T extends {ClassName}> μ ννλ‘ μ λ€λ¦μ μ¬μ© κ°λ₯ν μλ£νμ μ νμ λ μ μλ€.<> μ΄κ²μ λ€μ΄μλͺ¬λ μ°μ°μ λΌκ³ λΆλ₯΄λ©°, μ°μ°μλ§ μ¬μ©νκ³ μΈμ€ν΄μ€μ μλ£νμ λͺ
μνμ§ μμλ μ»΄νμΌλ¬λ ν λΉλλ ν΄λμ€μ μλ£νμ λ³΄κ³ μΈμ€ν΄μ€μ μλ£νμ μ μΆν μ μλ€.μλ£κ΅¬μ‘° λΌκ³ νλ©°, μ μ§ λ° κ°λ°μ μ¬μ©ν μλ£λ₯Ό μ΄λ€ κ΅¬μ‘°λ‘ κ΄λ¦¬ν μ§ λͺ
μν΄λμ κ²μ λ§νλ€.Vectorμ κ°μ΄ λκΈ°νκ° νμνλ€λ©΄ [synchronizedList](https://paciencia.tistory.com/31)λ₯Ό μ¬μ©νμ¬ μ μΈνλ©΄ λ¨ArrayList μμ μ°¨μ΄μ β λ κ° μ΄μμ μ€λ λκ° λμμ Vectorλ₯Ό μ¬μ©ν λμλ μ€ν μμλ₯Ό 보μ₯ν¨λκΈ°ν β JAVAμ μμ
λ¨μλ₯Ό μ€λ λλΌ νλ©°, λ κ° μ΄μμ μ€λ λ(λ©ν°μ€λ λ)λ₯Ό μ¬μ© ν λ μ€λ₯ μλ°©μ μν΄ λ μ€λ λκ° ν λ©λͺ¨λ¦¬μ λμ μ κ·Όνμ§ λͺ»νλλ‘ μμλ₯Ό λ§μΆλ κ²ArrayListλ³΄λ€ λ리λ€.μ£Όμκ°μ κ°μ§κ³ μλ€.ArrayListλ³΄λ€ λΉ λ₯΄λ€.ArrayListκ° ν¨μ¬ λΉ λ₯΄λ©°, μλ£ λ³λμ΄ λ§μ κ²½μ°μλ§ νμ©νλ κ²μ΄ μ’λ€.Iteratorμμ±μλ₯Ό νμ©νμ¬ λͺ¨λ μμμ μνκ° κ°λ₯νλ€.μ΄μ§ νΈλ¦¬λ₯Ό μ¬μ©νλ€.Comparable, Comparator μΈν°νμ΄μ€κ° ꡬνλμ΄μΌ νλ€.Comparable β compareTo λ©μλλ₯Ό μ¬μ μν΄ μ¬μ©νλ©° μΈμλ‘ λ°μ κ°μ²΄μ this λ₯Ό λΉκ΅νμ¬ μ λ ¬νλ€.Comparator β compare λ©μλλ₯Ό μ¬μ μν΄ μ¬μ©νλ©°, λ μΈμλ₯Ό λ°μ λΉκ΅νλ©° μ λ ¬νλ€.TreeSetμμ±μμ Comparatorλ₯Ό ꡬνν κ°μ²΄λ₯Ό λ§€κ°λ³μλ‘ μ λ¬Vectorν΄λμ€μ λ§μ°¬κ°μ§λ‘, λκΈ°νλ₯Ό μ 곡νλ©°, ν΄λΉ κΈ°λ₯μ μ¬μ©νμ§ μλλ€λ©΄ HashMapμ μ¬μ©νλ κ²μ΄ μ’λ€.TreeSetκ³Ό λ§μ°¬κ°μ§λ‘ μ΄μ§ νΈλ¦¬λ₯Ό μ¬μ©νλ©°, ComparableνΉμ ComparatorμΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌνλ€.privateμΌλ‘ μ μΈλμλ€λ©΄ ν΄λμ€ μΈλΆμμ μ¬μ©μ΄ λΆκ°λ₯νλ€.staticμμ½μ΄λ‘ νμν μΈλΆ ν΄λμ€λ₯Ό μ μΈνλ©΄ λλ€.Runnable μΈν°νμ΄μ€λ‘ μ μΈλλ©°, λ°λμ ν΄λμ€ λ΄λΆμ runμ μ€λ²λΌμ΄λ© ν΄ μ¬μ©ν΄μΌνλ€.new Runnable λ‘ μ μΈνλ©°, ν΄λμ€ λμ ;λ₯Ό λΆμ¬ λ§λ¬΄λ¦¬ν μ΅λͺ
ν΄λμ€λ₯Ό λ§νλ€.μλ°μ ν¨μν νλ‘κ·Έλλ° λ°©μμ λλ€μμ΄λΌκ³ νλ€.
int add(int x, int y) {
return x + y
}
(int x, int y) -> {return x + y;} // μ μκ³Ό κ°μ λ°νκ°μ κ°λλ€.
μλ°μμ μ°Έμ‘° λ³μ μμ΄ λ©μλλ₯Ό νΈμΆν μ μκΈ° λλ¬Έμ λλ€μμ ν¨μν μΈν°νμ΄μ€λ₯Ό λ§λ€κ³ ν΄λΉ μΈν°νμ΄μ€λ₯Ό μ μ©ν ν΄λμ€ λ΄μμ μ¬μ©λμ΄μΌ νλ€.
@FunctionalInterfaceμ λ
Έν
μ΄μ
μ νμ©νλ©΄, ν¨μν μΈν°νμ΄μ€ λΌλ μλ―Έλ₯Ό λνλ΄λ―λ‘, λ©μλλ₯Ό λκ° μ΄μ μΆκ°ν μ μ€λ₯κ° λ°μνλ€.
μ€νΈλ¦Όμ΄λ, λ°°μ΄ μμλ₯Ό νΉμ κΈ°μ€μ λ°λΌ μ λ ¬νκ±°λ, μΌλΆ λ°μ΄ν°λ₯Ό νν° νλ κΈ°λ₯ λ±μ 미리 ꡬνν΄λμ ν΄λμ€λ₯Ό μλ―Ένλ€.JSμ filter, map, forEachμ κ°μ λ¬Έλ²μ μ¬μ©νλ€.μ»΄νμΌ μ€λ₯μ€ν μ€λ₯Exceptiontry-catchλ¬Έμ μ¬μ©νμ¬ μ²λ¦¬close) try-catch-finallyλ¬Έμ μ΄μ©νμ¬ λ¦¬μμ€λ₯Ό μ’
λ£μν€λ©΄ λλ€.try-with-resourcesλ¬Έμ μ¬μ©νλ©΄ λ΄λΆμμ μ¬μ©λ 리μμ€λ μλμΌλ‘ closeλλ€.AutoCloseableμ μΈν°νμ΄μ€λ‘ μμ±ν ν closeλ©μλλ₯Ό Overrideν΄ λ§λ ν try-catchλ¬Έμμ μ μΈνλ©΄, AutoCloseκ° λλ€.try-catchλ¬Έμ μ μΈλ μμλλ‘ κ²μ¬νκΈ° λλ¬Έμ Exceptionμ²λΌ μ΅μμ μμΈμ²λ¦¬λ₯Ό λ¨Όμ μ μΈνλ€λ©΄, μ€λ₯κ° λ°μν μ μλ€.extends μμ½μ΄λ‘ Exceptionμ μμλ°μ superλ©μλλ‘ μ¬μ©μ μ μ μμΈλ₯Ό ꡬννλ€.μ€νΈλ¦Όμ ν΅ν΄ μ΄λ£¨μ΄μ§Readerμ€νΈλ¦Όμ νμ©ν΄μΌνλ€.InputStreamReaderλ 보쑰μ€νΈλ¦ΌμΌλ‘ κΈ°λ° μ€νΈλ¦ΌμΈ InputStreamμ λ§€κ°λ³μλ‘ λ°μ μμ±λλ€λ©΄, λ°μ΄νΈ λ¨μλ‘ μ½μ λ΄μ©μ λ¬Έμλ‘ λ³νν΄μ£ΌκΈ° λλ¬Έμ νκΈλ μ½μ μ μλ€.Buffered μ€νΈλ¦Όμ΄ λΉ¨λμObject implements Serializableμ μ μΈν΄μΌνλ€.kwb020312μ Github Repository
λ무λ무 μμΈν μ€λͺ λμ΄μκ³ , μ± μ μ½μ΄λ³΄λ©° μ²μμΌλ‘ μλ¬΄λ° μλ¬ μμ΄ μλ νλ€.
μλ¬κ° λ μ μλ λΆλΆμ μ¬μΈν μλ €μ£Όμ μ κ°λ°μλ§ λͺ°λν μ μλ μκ°μ΄μλ€.
κ°μΆ!