Post

[Java] First-class Object, 일급 객체

[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λΆ€ν„° λžŒλ‹€ ν‘œν˜„μ‹κ³Ό ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€κ°€ λ„μž…λ˜λ©΄μ„œ λ©”μ„œλ“œλ₯Ό 일급 객체처럼 λ‹€λ£° 수 있게 λ˜μ—ˆλ‹€. μ •ν™•νžˆ ν‘œν˜„ν•˜λ©΄ λ©”μ„œλ“œ μžμ²΄κ°€ 일급 객체가 된 것이 μ•„λ‹ˆλΌ, λ‚΄λΆ€μ μœΌλ‘œ 읡λͺ… 객체둜 λ³€ν™˜λ˜μ§€λ§Œ 마치 λžŒλ‹€ ν‘œν˜„μ‹μ„ 일급 객체인 μ–‘ μ‚¬μš©ν•  수 있게 된 것이닀.

This post is licensed under CC BY 4.0 by the author.