λͺ©λ‘μ 체 κΈ (1096)
KoreanFoodie's Study
λμ κΈ°νκΈμμ μΌλ‘ λ²λ κ²μ΄λ€. ννλ€ μ¬λλ€μ 'μ½κ² λ€μ΄μ¨ λμ μ½κ² λκ°λ€' λ°μμ λ§λ€μ νλ©° νκ²¨μ΄ λ Έλμ κ°μΉμ κ³Όλν μλ―ΈλΆμ¬λ₯Ό νλ€. νμ§λ§ μ¬λλ€μ μ λ§ νκ²¨μ΄ λ Έλμ ν΅ν μ΄μ€ μ°½μΆμ μλ―Έμλ€κ³ μ¬κΈ°λ κ±ΈκΉ? μλλ€! μ¬λλ€μ μ½κ³ νΈνκ² λμ λ²κΈΈ μνκ³ , μ¬μ§μ΄λ μΌμ νμ§ μκ³ λ νλμμ λμ΄ λ¨μ΄μ§κΈΈ λΉλ€. μ μ€μμλ λ§€μΌ λ³΅κΆλͺ λΉμΌλ‘ μλ €μ§ νΈμμ μ μ¬λλ€μ΄ μ€μ μκ³ , κ³΅μ§ μΏ ν°, κ³΅μ§ μ¬μνμ λ°κΈ° μν΄ μ₯μ¬μ§μ μΉκΈ°λ νλ€. μ¬λλ€μ΄ νλ€κ² μΌν΄μ λ²μ΄μΌ λμ΄ μ λΉ μ Έλκ°λ€κ³ μ€μ€λ‘μ μ²μ§λ₯Ό μλ‘νλ κ²μ μκΈ°ν©λ¦¬νμ κ°κΉλ€. νΉμ λΆμλ€μ΄λ μ°μμΈλ€μ 보며 'μ λ κ² λ² λμ κΈλ°© μ¬λΌμ§λ€'κ³ μ μ£Όλ₯Ό νΌλΆλ κ²μ μ΄λ±κ°κ³Ό μ§ν¬μ νμΆμ΄λ€. λΆμλ μμ μ¬λ¦° μ¬μ§μ²λΌ, '..
μ¬μ©μ μ μ μμΈμ μμΈ λ°μ νλ‘κ·Έλ¨μ κ°λ°νλ€ λ³΄λ©΄ μλ° νμ€ APIμμ μ 곡νλ μμΈ ν΄λμ€λ§μΌλ‘λ λ€μν μ’ λ₯μ μμΈλ₯Ό ννν μκ° μλ€. μ ν리μΌμ΄μ μλΉμ€μ κ΄λ ¨λ μμΈλ₯Ό μ ν리μΌμ΄μ μμΈ (Application Exception)μ΄λΌκ³ νλ€. μ΄λ κ°λ°μκ° μ§μ μ μν΄μ λ§λ€μ΄μΌ νλ―λ‘ μ¬μ©μ μ μ μμΈλΌκ³ λ νλ€. μ¬μ©μ μ μ μμΈ ν΄λμ€ μ μΈ μ¬μ©μ μ μ μμΈ ν΄λμ€λ μ»΄νμΌλ¬κ° 체ν¬νλ μΌλ° μμΈλ‘ μ μΈν μλ μκ³ , μ»΄νμΌλ¬κ° 체ν¬νμ§ μλ μ€ν μμΈλ‘ μ μΈν μλ μλ€. μΌλ° μμΈλ‘ μ μΈν κ²½μ° Exceptionμ, μ€ν μμΈλ‘ μ μΈν κ²½μ° RuntimeExceptionμ μμνλ©΄ λλ€. public class SOME_Exception extends [ Exception | Run..
μλ 리μμ€ λ«κΈ° μλ° 7λΆν°λ try-with-resourcesλ₯Ό μ¬μ©νλ©΄ μμΈ λ°μ μ¬λΆμ μκ΄μμ΄ μμν΄λ 리λ‘μ€ κ°μ²΄(κ°μ’ μ μΆλ ₯ μ€νΈλ¦Ό, μλ² μμΌ, κ°μ’ μ±λ)μ close() λ©μλλ₯Ό νΈμΆν΄μ μμ νκ² λ¦¬μμ€λ₯Ό λ«μμ€λ€. 리μμ€λΌλ λ§μ΄ μ¬λ¬ κ°μ§ μλ―Έκ° μκ² μ§λ§ μ¬κΈ°μλ λ°μ΄ν°λ₯Ό μ½κ³ μ°λ κ°μ²΄λΌκ³ μκ°ν΄ λμ. FileInputStream fis = null; try { fis = new FileInputStream("file.txt"); } catch (IOException e) { ... } finally { if (fis != null) { try { fis.close(); } catch (IOException e) {} } } νμΌμ μ¬μ©ν λλ try-catchλ₯Ό μ¬μ©ν΄μ clo..
μμΈμ μμΈ ν΄λμ€ JVM μ€νμ λ¬Έμ κ° μκ²Όμ λ, μ°λ¦¬λ μλ¬λ₯Ό λ§μ£Όνκ² λλ€. μλ°μμλ μλ¬ μ΄μΈμ μμΈ(exception)λΌκ³ λΆλ₯΄λ μ€λ₯κ° μλλ°, μμΈλ μ¬μ©μμ μλͺ»λ μ‘°μ λλ κ°λ°μμ μλͺ»λ μ½λ©μΌλ‘ μΈν΄ λ°μνλ νλ‘κ·Έλ¨ μ€λ₯λ₯Ό λ§νλ€. μμΈκ° λ°μλλ©΄ νλ‘κ·Έλ¨μ 곧λ°λ‘ μ’ λ£νμ§λ§, μμΈ μ²λ¦¬(Exception Handling)μ ν΅ν΄ νλ‘κ·Έλ¨μ μ’ λ£νμ§ μκ³ μ μ μ€ν μνκ° μ μ§λλλ‘ ν μ μλ€. μμΈλ λ κ°μ§ μ’ λ₯κ° μλ€. νλλ μΌλ° μμΈ(Exception)μ΄κ³ , λ€λ₯Έ νλλ μ€ν μμΈ(Runtime Exception)μ΄λ€. μΌλ° μμΈλ μ»΄νμΌλ¬ μ²΄ν¬ μμΈλΌκ³ λ νλλ°, μλ° μμ€λ₯Ό μ»΄νμΌ νλ κ³Όμ μμ μμΈ μ²λ¦¬ μ½λκ° νμνμ§ κ²μ¬νκΈ° λλ¬Έμ΄λ€. λ§μ½ μμΈ μ²λ¦¬ μ½λκ° ..
μ΅λͺ κ°μ²΄ μ΅λͺ (anonymous) κ°μ²΄λ μ΄λ¦μ΄ μλ κ°μ²΄λ₯Ό λ§νλ€. μ΅λͺ κ°μ²΄λ λ¨λ μΌλ‘ μμ±ν μ μκ³ ν΄λμ€λ₯Ό μμνκ±°λ μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌλ§ μμ±ν μ μλ€. μ΅λͺ κ°μ²΄λ νλμ μ΄κΈ°κ°μ΄λ λ‘컬 λ³μμ μ΄κΈ°κ°, λ§€κ° λ³μμ 맀κ°κ°μΌλ‘ μ£Όλ‘ λμ λλ€. UI μ΄λ²€νΈ μ²λ¦¬ κ°μ²΄λ μ€λ λ κ°μ²΄λ₯Ό κ°νΈνκ² μμ±ν λͺ©μ μΌλ‘ μ΅λͺ κ°μ²΄κ° λ§μ΄ νμ©λλ€. μ΅λͺ μμ κ°μ²΄ μμ± λΆλͺ¨ νμ μΌλ‘ νλλ λ³μλ₯Ό μ μΈνκ³ , μμ κ°μ²΄λ₯Ό μ΄κ°κ°μΌλ‘ λμ ν κ²½μ°λ₯Ό μκ°ν΄λ³΄μ. μ°μ λΆλͺ¨ ν΄λμ€λ₯Ό μμν΄μ μμ ν΄λμ€λ₯Ό μ μΈνκ³ , new μ°μ°μλ₯Ό μ΄μ©ν΄μ μμ κ°μ²΄λ₯Ό μμ±ν ν, νλλ λ‘컬 λ³μμ λμ νλ κ²μ΄ κΈ°λ³Έμ΄λ€. class Child extends Parent { } // μμ ν΄λμ€ μ μΈ class A { P..
μ€μ²© ν΄λμ€ μ€μ²© ν΄λμ€λ₯Ό μ¬μ©νλ©΄ μ½λμ 볡μ‘μ±μ μ€μΌ μ μλ€! μ€μ²© ν΄λμ€λ ν΄λμ€ λ΄λΆμ μ μΈλλ μμΉμ λ°λΌμ λ κ°μ§λ‘ λΆλ₯λλ€. ν΄λμ€μ λ©€λ²λ‘μ μ μΈλλ μ€μ²© ν΄λμ€λ₯Ό λ©€λ² ν΄λμ€λΌκ³ νκ³ , λ©μλ λ΄λΆμμ μ μΈλλ μ€μ²© ν΄λμ€λ₯Ό λ‘컬 ν΄λμ€λΌκ³ νλ€. λ©€λ² ν΄λμ€λ κ°μ²΄κ° μ¬μ© μ€μΌλλ μΈμ λ μ§ μ¬μ¬μ©μ΄ κ°λ₯νμ§λ§, λ‘컬 ν΄λμ€λ λ©μλ μ€ν μμλ§ μ¬μ©λκ³ , λ©μλκ° μ€ν μ’ λ£λλ©΄ μμ΄μ§λ€. public class A { class B {...} // μΈμ€ν΄μ€ λ©€λ² ν΄λμ€ static class C {...} // μ μ λ©€λ² ν΄λμ€ void method() { class D {...} } // λ‘컬 ν΄λμ€ } λ©€λ² ν΄λμ€λ νλμ ν΄λμ€μ΄κΈ° λλ¬Έμ μ»΄νμΌνλ©΄ λ°μ΄νΈ μ½λ νμΌ(.clas..
μΈν°νμ΄μ€ μμ μΈν°νμ΄μ€λ λ€λ₯Έ μΈν°νμ΄μ€λ₯Ό μμν μ μλ€. μΈν°νμ΄μ€λ ν΄λμ€μλ λ¬λ¦¬ λ€μ€ μμμ νμ©νλ€. λ€μκ³Ό κ°μ΄ extends ν€μλ λ€μ μμν μΈν°νμ΄μ€λμ λμ΄ν μ μλ€. public interface νμμΈν°νμ΄μ€ extends μμμΈν°νμ΄μ€1, μμμΈν°νμ΄μ€2 {...} νμ μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€λ νμ μΈν°νμ΄μ€μ λ©μλ λΏλ§ μλλΌ μμ μΈν°νμ΄μ€μ λͺ¨λ μΆμ λ©μλμ λν μ€μ²΄ λ©μλλ₯Ό κ°κ³ μμ΄μΌ νλ€. κ·Έλ κΈ° λλ¬Έμ ꡬν ν΄λμ€λ‘λΆν° κ°μ²΄λ₯Ό μμ±νκ³ λμ λ€μκ³Ό κ°μ΄ νμ λ° μμ μΈν°νμ΄μ€ νμ μΌλ‘ λ³νμ΄ κ°λ₯νλ€. νμμΈν°νμ΄μ€ λ³μ = new ꡬνν΄λμ€(...); μμμΈν°νμ΄μ€1 λ³μ = new ꡬνν΄λμ€(...); μμμΈν°νμ΄μ€2 λ³μ = new ꡬνν΄λ..
μΈν°νμ΄μ€μ μν μΈν°νμ΄μ€λ κ°μ²΄μ μ¬μ© λ°©λ²μ μ μν νμ μ΄λ€. κ°λ° μ½λκ° μ€κ°μ μΈν°νμ΄μ€λ₯Ό λλ μ΄μ λ, κ°λ° μ½λλ₯Ό μμ νμ§ μκ³ , μ¬μ©νλ κ°μ²΄λ₯Ό λ³κ²½ν μ μλλ‘ νκΈ° μν΄μμ΄λ€. μΈν°νμ΄μ€λ νλμ κ°μ²΄κ° μλλΌ μ¬λ¬ κ°μ²΄λ€κ³Ό μ¬μ©μ΄ κ°λ₯νλ―λ‘ μ΄λ€ κ°μ²΄λ₯Ό μ¬μ©νλλμ λ°λΌ μ€ν λ΄μ©κ³Ό 리ν΄κ°μ΄ λ€λ₯Ό μ μλ€. λ°λΌμ κ°λ° μ½λ μΈ‘λ©΄μμ μ½λ λ³κ²½ μμ΄ μ€ν λ΄μ©κ³Ό 리ν΄κ°μ λ€μνν μ μλ€λ μ₯μ μ΄ μλ€. μΈν°νμ΄μ€ μ μΈ μΈν°νμ΄μ€λ "~.java" ννμ μμ€ νμΌλ‘ μμ±λκ³ μ»΄νμΌλ¬(javac.exe)λ₯Ό ν΅ν΄ "~.class" ννλ‘ μ»΄νμΌλκΈ° λλ¬Έμ 물리μ ννλ ν΄λμ€μ λμΌνλ€. public interface InterfaceName { ... } μΈν°νμ΄μ€λ μμμ λ©μλλ§μ..
νμ λ³νκ³Ό λ€νμ± (Polymorphism) λ€νμ±μ κ°μ νμ μ΄μ§λ§ μ€ν κ²°κ³Όκ° λ€μν κ°μ²΄λ₯Ό μ΄μ©ν μ μλ μ±μ§μ λ§νλ€. μλ νμ λ³ν(Promotion) μλ νμ λ³νμ κ°λ μ μμμ λΆλͺ¨μ νΉμ§κ³Ό κΈ°λ₯μ μμλ°κΈ° λλ¬Έμ λΆλͺ¨μ λμΌνκ² μ·¨κΈλ μ μλ€λ κ²μ΄λ€. // Vehicle μλ νμ λ³νμ΄ λ°μνλ€! μ¦, λ§€κ° λ³μμ νμ μ΄ ν΄λμ€μΌ κ²½μ°, ν΄λΉ ν΄λμ€μ κ°μ²΄λΏλ§ μλλΌ μμ κ°μ²΄κΉμ§λ 맀κ°κ°μΌλ‘ μ¬μ©ν μ μλ€! 맀κ°κ°μΌλ‘ μ΄λ€ μμ κ°μ²΄κ° μ 곡λλλμ λ°λΌ λ©μλμ μ€ν κ²°κ³Όλ λ€μν΄μ§ μ μλ€(λ§€κ° λ³μμ λ€νμ±). μμ κ°μ²΄κ° λΆλͺ¨μ λ©μλλ₯Ό μ¬μ μ(μ€λ²λΌμ΄λ©)νλ€λ©΄ λ©μλ λ΄λΆμμ μ€λ²λΌμ΄λ©λ λ©μλλ₯Ό νΈμΆν¨μΌλ‘μ¨ λ©μλμ μ€ν κ²°κ³Όλ λ€μν΄μ§λ€. κ°μ νμ λ³ν κ°μ ..
μ΄λ Έν μ΄μ μ΄λ Έν μ΄μ μ λ©νλ°μ΄ν°λΌκ³ λ³Όμ μλ€. @AnnotationName μ΄λ Έν μ΄μ μ λ€μ μΈ κ°μ§ μ©λλ‘ μ¬μ©λλ€. 1. μ»΄νμΌλ¬μκ² μ½λ λ¬Έλ² μλ¬λ₯Ό 체ν¬νλλ‘ μ 보λ₯Ό μ 곡 2. μννΈμ¨μ΄ κ°λ° ν΄μ΄ λΉλλ λ°°μΉ μ μ½λλ₯Ό μλμΌλ‘ μμ±ν μ μλλ‘ μ 보λ₯Ό μ 곡 3. μ€ν μ(λ°νμ μ) νΉμ κΈ°λ₯μ μ€ννλλ‘ μ 보λ₯Ό μ 곡 λνμ μΌλ‘λ @Overrideκ° μλ€. (μμ λ©μλ μ¬μ μ μ) μ΄λ Έν μ΄μ νμ μ μμ μ μ© μ΄λ Έν μ΄μ νμ μ μ μλ μΈν°νμ΄μ€λ₯Ό μ μνλ κ²κ³Ό μ μ¬νλ€. λ€μκ³Ό κ°μ΄ @interfaceλ₯Ό μ¬μ©ν΄μ μ΄λ Έν μ΄μ μ μ μνλ©°, κ·Έ λ€μ μ¬μ©ν μ΄λ Έν μ΄μ μ΄λ¦μ΄ μ¨λ€. public @interface AnnotationName { νμ elementName() [default κ°]..