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.