π JAVA/μ£Όμ κ°λ

μλ°μ μ»΄νμΌ κ³Όμ
μλ°λ JVM(Java Virtual Machine) λλΆμ OSμ λ 립μ μΈ νΉμ§μ κ°μ§κ³ μλ€. JVMμ μ΄λ ν κΈ°λ₯ λλ¬Έμ OSμ λ 립μ μΌλ‘ μ€νμν¬ μ μλμ§ μλ°μ μ»΄νμΌ κ³Όμ μ ν΅ν΄ μμ보μ. π 1. μ»΄νμΌ κ³Όμ μλ°μ μ»΄νμΌ κ³Όμ μ λ€μκ³Ό κ°λ€. κ°λ°μκ° μμ±ν μλ° μμ€νμΌ(*. java)μ μλ° μ»΄νμΌλ¬(Java Compiler)κ° λ°μ΄νΈνμΌ(*.class)λ‘ μ»΄νμΌνλ€. (CPUκ° μ΄ν΄ν μ μλ μΈμ΄μΈ λ°μ΄λ리 μ½λκ° μλλΌ JVMμ΄ μ΄ν΄ν μ μλ λ°μ΄νΈ μ½λλ₯Ό κ°μ§ λ°μ΄νΈ νμΌλ‘ λ³ννλ€.) ν΄λμ€ λ‘λ(Class Loader)λ₯Ό ν΅ν΄ λ°μ΄νΈ νμΌ(*.class)λ€μ JVMμ μ¬λ¦°λ€. JVMμ μλ λ°μ΄νΈ νμΌ(*.class)λ€μ μ€ν μμ§(Execution Engine)μ μΈν°ν..

μΆμν΄λμ€(Abstract Class) VS μΈν°νμ΄μ€(Interface)
μ§κΈκΉμ§ μΆμν΄λμ€μ μΈν°νμ΄μ€λ₯Ό μ΄ν΄λ³΄μλ€. μΆμν΄λμ€μ μΈν°νμ΄μ€λ κ°κ° κ³ μ ν λͺλͺ νΉμ§μ κ°μ§κ³ μμ§λ§, "μΆμ λ©μλλ₯Ό ν΅ν΄ μμ/ꡬνμ ν΅ν λ©μλ κ°μ ꡬν κ·μΉμ κ°μ§λ μΆμν ν΄λμ€"λΌλ μ μμ λ§€μ° λΉμ·νλ€λ λλμ λ°μ κ²μ΄λ€. λν, 'κ·Έλ λ€λ©΄ λͺ¨λ λ©μλλ₯Ό μΆμ λ©μλλ‘ λ§λ€μ΄μ μ¬μ©νλ©΄ μΆμ ν΄λμ€κ° μΈν°νμ΄μ€ μν ν μ μλλ° μ κ΅³μ΄ μΈν°νμ΄μ€κ° μ‘΄μ¬νλ κ±ΈκΉ? 'λΌλ μλ¬Έλ μκΈΈ μ μλ€. κΈ°λ₯μ μΈ μΈ‘λ©΄μ λ€ μ μΈνκ³ , λ κ°λ₯Ό λλμ΄μ μ¬μ©νλ κ°μ₯ ν° μ΄μ λ μ¬μ© λͺ©μ κ³Ό μ¬μ© μκΈ°κ° λ€λ₯΄λ€λ κ²μ΄λ€. κ·Έλ¬λ―λ‘ 'μΆμ ν΄λμ€μ μΈν°νμ΄μ€μ μ¬μ© λͺ©μ κ³Ό μ¬μ© μκΈ°μ μ°¨μ΄'λ₯Ό μμλ³΄κ³ , 'κΈ°λ₯μ μΈ μ°¨μ΄μ 'μ λν΄μλ μΆκ°μ μΌλ‘ μ λ¦¬ν΄ λ³΄λλ‘ νμ. π 1. μ¬μ© λͺ©μ κ³Ό μ¬μ©..

μΈν°νμ΄μ€(Interface)
JDK1.8λΆν° λν΄νΈ λ©μλμ static λ©μλλ μΈν°νμ΄μ€μμ μ¬μ©ν μ μκ² λμλ€. μΌλ¨μ JDK1.8 μ΄μ μ μΈν°νμ΄μ€μ λν΄μ λ¨Όμ μ΄ν΄λ³΄κ³ , κ·Έλ¦¬κ³ JDK1.8μμ μΆκ°λ κΈ°λ₯(λν΄νΈ λ©μλ, static λ©μλ)κ³Ό Java9λΆν° μ¬μ©ν μ μλ private λ©μλμ λν΄μ μ΄ν΄λ³΄λ κ²μΌλ‘ νμ. π 1. μΈν°νμ΄μ€λ μΈν°νμ΄μ€λ μΌμ’ μ μΆμν΄λμ€μ΄λ€. μΈν°νμ΄μ€λ μΆμν΄λμ€μ²λΌ μΆμλ©μλλ₯Ό κ°μ§λ§ μΆμν΄λμ€λ³΄λ€ μΆμν μ λκ° λμμ μΆμν΄λμ€μ λ¬λ¦¬ λͺΈν΅μ κ°μΆ μΌλ° λ©μλ λλ λ©€λ²λ³μλ₯Ό ꡬμ±μμΌλ‘ κ°μ§ μ μλ€. μ€μ§ μΆμλ©μλμ μμλ§μ λ©€λ²λ‘λ§ κ°μ§ μ μμΌλ©°, κ·Έ μΈμ λ€λ₯Έ μ΄λ ν μμλ νμ©νμ§ μλλ€. μΈν°νμ΄μ€λ μΆμν΄λμ€μ²λΌ μμ±λμ§ μμ λΆμμ ν κ²μ΄κΈ° λλ¬Έμ κ·Έ μ체..

μΆμ ν΄λμ€(Abstract Class)
π 1. μΆμν΄λμ€λ? public abstract class Player { abstract void play(); abstract void stop(); } ν΄λμ€λ₯Ό μ€κ³λλΌκ³ νλ€λ©΄, μΆμν΄λμ€(Abstract Class)λ λ―Έμμ± μ€κ³λλΌκ³ ν μ μλ€. μ¬κΈ°μ λ§νλ λ―Έμμ±μ λ¨μ§ λ―Έμμ± λ©μλ(μΆμ λ©μλ)λ₯Ό ν¬ν¨νκ³ μλ€λ μλ―Έμ΄λ€. λ―Έμμ± μ€κ³λλ‘ μμ±λ μ νμ λ§λ€ μ μλ―μ΄ μΆμ ν΄λμ€λ‘ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€. μΆμ ν΄λμ€λ μμμ ν΅ν΄μ μμν΄λμ€μ μν΄μλ§ μμ±λ μ μλ€. μΆμ ν΄λμ€ μ체λ‘λ ν΄λμ€λ‘μμ μν μ λ€ λͺ»νμ§λ§, μλ‘μ΄ ν΄λμ€λ₯Ό μμ±νλ λ° μμ΄μ λ°νμ΄ λλ μ‘°μ ν΄λμ€λ‘μ μ€μν μλ―Έλ₯Ό κ°λλ€. μΆμ ν΄λμ€λ ν΄λμ€μ μΆμνλ₯Ό μ λͺ©μμΌ λ³΄λ€ κ΅¬μ‘°μ μ΄κ² κ°μ²΄λ₯Ό..

μ λ€λ¦(Generics) - 곡λ³(Covariant), λΆκ³΅λ³(Invariant), λ°κ³΅λ³(Contravariant)
1. 곡λ³, λΆκ³΅λ³, λ°κ³΅λ³μ κ°λ π λ³μ±(Variance)μ΄λ νμ μ κ³μΈ΅ κ΄κ³μμ μλ‘ λ€λ₯Έ νμ κ°μ μ΄λ ν κ΄κ³κ° μλμ§λ₯Ό λνλ΄λ κ²μ΄λ€. λ³μ±μ 3κ°μ§ μ’ λ₯μΈ κ³΅λ³(Covariant), λΆκ³΅λ³(Invariant), λ°κ³΅λ³(Contravariant)μ λ€μκ³Ό κ°μ νΉμ±μ κ°μ§λ€. κ³΅λ³ Sκ° Tμ νμ νμ μ΄λ©΄, S[]λ T[]μ νμ νμ μ΄λ€. λΆκ³΅λ³ Listμ Listλ κ΄κ³κ° μλ€. λ°κ³΅λ³ Sκ° Tμ νμ νμ μ΄λ©΄, T[]λ S[]μ νμ νμ μ΄λ€. 2. μ λ€λ¦μ 곡λ³μ±μ΄ μλ€. β μλ°μμ λ°°μ΄μ 곡λ³μ΄κ³ , μ λ€λ¦μ λΆκ³΅λ³μ΄λ€. μ¦, κ°μ²΄ νμ μ κ΄κ³μμ Aκ° Bμ νμ νμ μΌ λ, λ°°μ΄ A[]λ B[]μ νμ νμ μ΄μ§λ§ Listsms Listμ νμ νμ μ΄ μλλ€. public stat..

νλ³ν(μΊμ€ν , Casting) - μ μΊμ€ν (Up-Casting), λ€μ΄μΊμ€ν (Down-Casting)
1. νλ³ν(μΊμ€ν ) κ°λ π¦ νλ³ν(μΊμ€ν )μ΄λ λ³μ λλ μμμ νμ μ λ€λ₯Έ νμ μΌλ‘ λ³ννλ κ²μ λ§νλ€. κΈ°λ³Έν(Primitive Type)μμλ booleanμ μ μΈν λλ¨Έμ§ νμ λ€μ μλ‘ νλ³νμ΄ κ°λ₯νλ€. μ°Έμ‘°ν(Reference Type)μμλ μλ‘ μμκ΄κ³κ° μλ ν΄λμ€ μ¬μ΄μμλ§ νλ³νμ΄ κ°λ₯νλ€. μμνμ μ μ°Έμ‘°λ³μλ₯Ό μ‘°μνμ μ μ°Έμ‘°λ³μλ‘, μ‘°μνμ μ μ°Έμ‘°λ³μλ₯Ό μμνμ μ μ°Έμ‘°λ³μλ‘ νλ³νμ νλ κ²μ΄λ€. μ΄ κΈμμλ κΈ°λ³Ένμ νλ³ν보λ€λ μ°Έμ‘°νμ νλ³νμ μ΄μ μ λ§μΆλλ‘ νλ€. μ°Έμ‘°ν μΊμ€ν μ 2κ°μ§λ‘ λλ μ μλ€. 1. μ μΊμ€ν (Up-Casting) μμνμ μ μ°Έμ‘°λ³μλ₯Ό μ‘°μνμ μ μ°Έμ‘°λ³μλ‘ λ³ννλ κ² μ μΊμ€ν μ νλ©΄ μμλ°μ μλΈ ν΄λμ€μ μκ΄μμ΄ νλμ μΈμ€ν΄μ€λ‘ λ¬Άμ΄μ κ΄..

μ λ€λ¦(Generics) - κΈ°λ³Έ κ°λ
JDK 1.5λΆν° λμ λ μ λ€λ¦(Generics)μ λν΄μ μμ보μ. 'μ λ€λ¦(Generic)μ μ¬μ©νλ©΄ λ€μν νμ μ μ¬μ©ν μ μλ€.' μ λλ‘λ§ μκ³ μμλλ° μ λλ‘ κ³΅λΆνλ €κ³ λ³΄λκΉ μκ°λ³΄λ€ μμ΄ λ§λ€. μ« λ§μ΄ λ§λ€... κ·Έλμ μ΄λ² κΈμμλ μ λ€λ¦μ κΈ°λ² κ°λ μ λν΄μ μμλ³΄κ³ λ€μ κΈλ€μ ν΅ν΄ λ ꡬ체μ μΌλ‘ μμ보λ κ²μΌλ‘ νμ. (μ΄νν°λΈ μλ° 5μ₯μ μ λ€λ¦(μμ΄ν 26 ~ μμ΄ν 33) λ΄μ©κ³Ό μμΌλμΉ΄λ λ±μ λ΄μ©μ μΆκ°μ μΌλ‘ λ€λ£° μμ μ΄λ€.) (μ΄νν°λΈ μλ° 5μ₯ μ λ€λ¦ ννΈλ₯Ό μ½μΌλ €λλ° μ΄ν΄κ° μ λμ§ μμμ μ λ€λ¦μ κΈ°λ³ΈλΆν° λΈλ‘κΉ νκ³ μλ μ€μ΄λ€...π ) 1. μ λ€λ¦(Generic) κ°λ 𧱠μ°λ¦¬λ μ λ€λ¦(Generics)μ κ·Έ μ΄λ ν κ°λ λ³΄λ€ μμ£Ό μ¬μ©νλ€. public stati..

λνΌ ν΄λμ€ (Wrapper Class)
1. κ°λ πΆβοΈ μΌλ°μ μΌλ‘ κ°μ²΄μ§ν₯ κ°λ μμ λͺ¨λ κ²μ κ°μ²΄λ‘ λ€λ£¨μ΄μ ΈμΌ νλ€. νμ§λ§ μλ°μμ 8κ°μ κΈ°λ³Έν(boolean, char, byte, short, int, long, float, double)μ κ°μ²΄λ‘ λ€λ£¨μ΄μ§μ§ μλλ€. μλ°κ° μμ ν κ°μ²΄ μ§ν₯ μΈμ΄κ° μλλΌλ μ΄μΌκΈ°λ₯Ό λ£μ§λ§, λ³΄λ€ λμ μ±λ₯μ μ»μ μ μλ€λ μ₯μ μ΄ μλ€. νλ‘κ·Έλλ°μ νλ€ λ³΄λ©΄ κΈ°λ³Έν(Primitive Type) λ³μλ μ΄μ© μ μμ΄ κ°μ²΄λ‘ λ€λ€μΌ νλ κ²½μ°κ° μλ€. μλ₯Ό λ€λ©΄, 맀κ°λ³μλ‘ κ°μ²΄λ₯Ό μꡬν λ, κΈ°λ³Έν κ°μ΄ μλ κ°μ²΄λ‘ μ μ₯ν΄μΌ ν λ, κ°μ²΄ κ°μ λΉκ΅κ° νμν λ λ±λ±μ κ²½μ°μλ κΈ°λ³Έν κ°λ€μ κ°μ²΄λ‘ λ³ννμ¬ μμ μ μνν΄μΌ νλ€. μ΄λ΄ λ λνΌ ν΄λμ€λ₯Ό μ¬μ©νμ¬ κ°κ°μ νμ μ ν΄λΉνλ λ°μ΄ν°λ₯Ό μΈ..

clone()
1. κ°λ π·βοΈ clone() λ©μλλ μμ μ 볡μ νμ¬ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νλ μΌμ νλ€. 2. μ¬μ©λ°©λ² π©βοΈ clone()μ Object ν΄λμ€μ λ€μκ³Ό κ°μ΄ μ μλμ΄ μλ€. public class Object { protected native Object clone() throws CloneNotSupportedException; } μ΄λ₯Ό μ¬μ©νκΈ° μν΄μλ λ€μ 2κ°μ§λ₯Ό μννμ¬μΌ νλ€. Cloneable μΈν°νμ΄μ€λ₯Ό ꡬννλ€. clone()μ μ€λ²λΌμ΄λ©νλ©΄μ μ κ·Ό μ μ΄μλ₯Ό protectedμμ publicμΌλ‘ λ³κ²½νλ€. public class User implements Cloneable { String name; int age; public User(String name, int age..

μμ 볡μ¬(Shallow Copy) vs κΉμ 볡μ¬(Deep Copy)
μμ 볡μ¬(Shallow Copy)λ μ£Όμκ°μ 볡μ¬νλ κ²μ λ§νλ€. (μ€ν μμ) κΉμ 볡μ¬(Deep Copy)λ μ€μ κ°μ λ©λͺ¨λ¦¬ 곡κ°μ 볡μ¬νλ κ²μ λ§νλ€. (ν μμ) 1. μμ 볡μ¬(Shallow Copy) π μμ 볡μ¬(Shallow Copy)λ μ£Όμκ°μ 볡μ¬νλ κ²μ΄λ€. μ°Έμ‘°κ°μ 볡μ¬νκΈ° λλ¬Έμ μμ κ·Έλ¦Όμ²λΌ κ°μ μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν€κ³ μλ€. κ·Έλμ κΈ°μ‘΄μ κ°μ λ°κΎΈλ©΄ 볡μ¬λ κ°λ λ°λκ² λλ μν©μ΄ λ°μνλ€. public class User { String name; int age; public User(String name, int age) { super(); this.name = name; this.age = age; } } ---------- public class ShallowCop..

JVM λ©λͺ¨λ¦¬ ꡬ쑰
1. JVM κ°λ π¨π§ JVM(Java Virtual Machine)μ΄λ 'μλ°λ₯Ό μ€ννκΈ° μν κ°μμ μ»΄ν¨ν°'λΌκ³ ν μ μλ€. μ¬κΈ°μ λ§νλ κ°μμ μ»΄ν¨ν°λ μ€μ μ»΄ν¨ν°(νλμ¨μ΄)κ° μλ μννΈμ¨μ΄λ‘ ꡬνλ μ»΄ν¨ν° μμ μ»΄ν¨ν°μ΄λ€. μλ°λ‘ μμ±λ μ ν리μΌμ΄μ μ λͺ¨λ JVMμμλ§ μ€νλκΈ° λλ¬Έμ μλ° μ ν리μΌμ΄μ μ μ€ννκΈ° μν΄μλ JVMμ΄ λ°λμ νμνλ€. JVMμ OSμ μ’ μμ μ΄κΈ° λλ¬Έμ ν΄λΉ OSμμ μ€ν κ°λ₯ν JVMμ΄ νμνλ€. μ΄λ¬ν νΉμ±μΌλ‘ μΈν΄ μλ°μ μ₯μ μ€ νλλ‘ 'Write Once, Run AnyWhere.(ν λ² μμ±νλ©΄ μ΄λμλ μ€νλλ€.)'λΌλ κ²μ΄ μλ€. 2. 3κ°μ§ μ£Όμ μμ π©π¬ JVMμ λ©λͺ¨λ¦¬λ₯Ό μ©λμ λ°λΌ μ¬λ¬ μμμΌλ‘ λλμ΄ κ΄λ¦¬νλ€. κ·Έ μ€ 3κ°μ§ μ£Όμ μμμΈ..

λ³μ
1. λ³μ πβοΈ μλ°μμ μλ£νμ ν¬κ² 'κΈ°λ³Έν'κ³Ό 'μ°Έμ‘°ν' λ κ°μ§λ‘ λλ μ μλ€. κΈ°λ³Έν λ³μλ μ€μ κ°(data)μ μ μ₯νκ³ , μ°Έμ‘°ν λ³μλ μ΄λ€ κ°μ΄ μ μ₯λμ΄ μλ μ£Όμ(memory address)λ₯Ό κ°μΌλ‘ κ°λλ€. κΈ°λ³Ένμλ 8κ°μ§μ νμ μ΄ μκ³ , 8κ°μ κΈ°λ³Ένμ μ μΈν λλ¨Έμ§λ λͺ¨λ μ°Έμ‘°νμ΄λ€. 2. κΈ°λ³Έν ποΈβοΈ 1. κ΅¬λΆ κΈ°λ³Ένμ ν¬κ² 'λ Όλ¦¬ν, λ¬Έμν, μ μν, μ€μν'μΌλ‘ ꡬλΆνλ€. λ Όλ¦¬ν boolean λ¬Έμν char μ μν byte short int long μ€μν float double 2. ν¬κΈ° κΈ°λ³Ένμ ν¬κΈ°λ λ€μκ³Ό κ°λ€. 1 byte 2 byte 4 byte 8 byte λ Όλ¦¬ν boolean λ¬Έμν char μ μν byte short int long μ€μν floa..