[Java] First-class Object, μΌκΈ κ°μ²΄
π μΌκΈ κ°μ²΄λ?
First-class Object
, μΌκΈ κ°μ²΄λ μ¬μ€ μλ°μμλ§ μ¬μ©λλ ννμ μλλ€. μΌκΈ κ°μ²΄λ λ€λ₯Έ κ°μ²΄λ€μ λν΄ μΌλ°μ μΌλ‘ μ μ© κ°λ₯ν λͺ¨λ μ°μ°μ μ§μνλ κ°μ²΄λ₯Ό λ§νλ©°, λ³΄ν΅ ν¨μν νλ‘κ·Έλλ°μ ν΅μ¬ κ°λ
μΌλ‘ μ¬κ²¨μ§λ€. λνμ μΌλ‘ JavaScript, Pythonμ΄ μΌκΈ κ°μ²΄ μΈμ΄μ΄λ©°, C, C++ λ±μ κ·Έλ μ§ μλ€.
μλ°λ Java 7 μ΄μ μλ Object
λ μΌκΈ κ°μ²΄μμΌλ, λ©μλλ κ·Έλ μ§ μμλ€. μΌλ¨ μ΄λ€ κΈ°μ€μΌλ‘ μΌκΈ κ°μ²΄μΈμ§ νλ¨νλμ§ μ΄ν΄λ³΄μ.
π μΌκΈ κ°μ²΄κ° λκΈ° μν 쑰건
λͺ¨λ ν΄λμ€λ Object
λ₯Ό μμλ°λλ€. User
λΌλ ν΄λμ€κ° μλ€κ³ κ°μ νμ.
λ³μλ λ°μ΄ν° ꡬ쑰μ μ μ₯ν μ μμ΄μΌ νλ€
λ³μλ λ°μ΄ν° ꡬ쑰μ λ΄μ μ μλ€λ κ²μ, κ°μ²΄λ₯Ό λ©λͺ¨λ¦¬μ μμ±νκ³ ν΄λΉ λ©λͺ¨λ¦¬ μμΉλ₯Ό κ°λ¦¬ν€λ μ°Έμ‘° κ°μ μ μ₯νλ€λ κ²μ΄λ€.
1
2
3
4
User user1 = new User("chosh");
User[] users = new User[2];
users[0] = user1;
μμ±μλ₯Ό ν΅ν΄ User
κ°μ²΄λ₯Ό μμ±νλ©΄ ν΄λΉ κ°μ²΄λ λ©λͺ¨λ¦¬μ Heap μμμ μμ±λλ€. user1
μ΄λΌλ λ³μλ μμ±λ κ°μ²΄μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ°Έμ‘°νκ² λλ€. μ¦, κ°μ²΄λ λ³μμ μμ λ‘κ² ν λΉν μ μλ€.
λ©μλμ νλΌλ―Έν°λ‘ μ λ¬ν μ μμ΄μΌ νλ€
1
2
3
public static void printUser(User user) {
System.out.println("μ¬μ©μ: " + user);
}
printUser(user1)
μ νΈμΆν λ, user1
μ΄ κ°λ¦¬ν€λ User
κ°μ²΄μ μ°Έμ‘° κ°μ΄ λ©μλλ‘ λ³΅μ¬λμ΄ μ λ¬λλ€. μ΄λ₯Ό ν΅ν΄ λ©μλλ μ λ¬λ°μ κ°μ²΄μ μ κ·Όν μ μλ€.
λ©μλμ λ¦¬ν΄ κ°μΌλ‘ μ¬μ©ν μ μμ΄μΌ νλ€
1
2
3
public static User createUser(String name) {
return new User(name);
}
createUser
λ©μλλ λ΄λΆμ μΌλ‘ μλ‘μ΄ User
κ°μ²΄λ₯Ό μμ±ν λ€ κ°μ²΄μ μ°Έμ‘° κ°μ 리ν΄νλ€.
π μλ°μμ μΌκΈ κ°μ²΄
Java 7 μ΄μ μλ λ©μλλ μΌκΈ κ°μ²΄κ° μλμλ€. μ¦, λ©μλλ₯Ό λ³μμ ν λΉν μ μμκ³ , λ€λ₯Έ λ©μλμ μΈμλ‘ λκΈΈ μ μμμΌλ©° λ©μλμμ λ©μλλ₯Ό 리ν΄ν μ μμλ€. λ°λΌμ λ©μλλ₯Ό 리ν΄νκ³ μΆμ λ λ©μλλ₯Ό ν¬ν¨νλ κ°μ²΄λ‘ κ°μΈλ λ°©λ²μ μ¬μ©νλλ°, μ΄κ²μ΄ βμ΅λͺ λ΄λΆ ν΄λμ€βμ΄λ€.
κ·Έλ¬λ Java 8λΆν° λλ€ ννμκ³Ό ν¨μν μΈν°νμ΄μ€κ° λμ λλ©΄μ λ©μλλ₯Ό μΌκΈ κ°μ²΄μ²λΌ λ€λ£° μ μκ² λμλ€. μ νν νννλ©΄ λ©μλ μμ²΄κ° μΌκΈ κ°μ²΄κ° λ κ²μ΄ μλλΌ, λ΄λΆμ μΌλ‘ μ΅λͺ κ°μ²΄λ‘ λ³νλμ§λ§ λ§μΉ λλ€ ννμμ μΌκΈ κ°μ²΄μΈ μ μ¬μ©ν μ μκ² λ κ²μ΄λ€.