Community

๐Ÿ•Š๏ธ ๋กฌ๋ณต์€ ๊ทธ๋งŒ! ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์œ„ํ•ด ๋ ˆ์ฝ”๋“œ ์‚ฌ์šฉํ•˜๊ธฐ

"์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์˜ ๋น„์œจ์€ 10๋Œ€ 1์ด ํ›จ์”ฌ ๋„˜๋Š”๋‹ค." ํด๋ฆฐ์ฝ”๋“œ์˜ ์ €์ž Robert C. Martin์ด ํ•œ ๋ง์ž…๋‹ˆ๋‹ค. "User" ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. User ํด๋ž˜์Šค๋Š” ์œ ์ € ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , username, email, userId ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ getter, setter, toString ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋ ค๋ฉด ์ ์–ด๋„ 65์ค„์˜ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ“Œ ๋กฌ๋ณต์œผ๋กœ ๊ณ ์น˜๊ธฐ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋กฌ๋ณต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋กฌ๋ณต์€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์ฝ”๋“œ(๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ)๋“ค์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ 65์ค„์˜ ์ฝ”๋“œ๋ฅผ 5์ค„๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค. @Data ์–ด๋…ธํ…Œ์ด์…˜์€ ์ž๋™์œผ๋กœ ๋ชจ๋“  getter, setter, toString, constructor, hashCode, equals ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค. ํ˜น์€ ๊ฐœ๋ณ„์ ์ธ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ๋กฌ๋ณต์˜ ๋ฌธ์ œ์  ๋‹ค๋งŒ ๋กฌ๋ณต์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์žˆ๋Š”๋ฐ, ๊ฐ€์žฅ ํฐ ๋‘ ๊ฐ€์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 1. Third-party ์˜์กด์„ฑ: ์ƒˆ๋กœ์šด ์ž๋ฐ” ๋ฒ„์ „๊ณผ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ง€์›๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2. IDE ํ˜ธํ™˜์„ฑ: ์ผ๋ถ€ IDE๋Š” ๋กฌ๋ณต ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์•„ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์ข‹์€ ๋Œ€์•ˆ์ด ์žˆ์„๊นŒ์š”? ๋„ค, ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ฝ”๋“œ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๋ ˆ์ฝ”๋“œ๋Š” ์ž๋ฐ” 16์—์„œ ๋„์ž…๋œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋ ˆ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์บก์Аํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค์˜ ํ•„๋“œ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ƒ์„ฑ์ž, equals, hashCode, toString๊ณผ ๊ฐ™์€ ์ผ๋ฐ˜์ ์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ํด๋ž˜์Šค ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ๐Ÿ“Œ ๋ ˆ์ฝ”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋‚˜์š”? User ํด๋ž˜์Šค์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ``` public record UserRecord(String username, String email, int userId) { } ``` ์ด๊ฒƒ์ด ๋์ž…๋‹ˆ๋‹ค. ๋‹จ์ง€ ํ•œ ์ค„์˜ ์ฝ”๋“œ๋กœ 65์ค„์˜ ์ „ํ†ต์ ์ธ ์ฝ”๋“œ์™€ 5์ค„์˜ ๋กฌ๋ณต ์ฝ”๋“œ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋กฌ๋ณต๊ณผ ๋‹ค๋ฅด๊ฒŒ ์จ๋“œ ํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ๋ ˆ์ฝ”๋“œ ์•Œ์•„๋ณด๊ธฐ ``` // Initialize the record. UserRecord userRecord = new UserRecord("rana", "rana@yopmail.com", 1234); // get the properties System.out.println(userRecord.email()); System.out.println(userRecord.toString()); ``` ๋ช…์‹ฌํ•˜์„ธ์š”. ๋ ˆ์ฝ”๋“œ๋Š” getter ๋ฉ”์†Œ๋“œ์—์„œ 'get' ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. getEmail()์ด ์•„๋‹Œ email()์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ์ดˆ๊ธฐํ™”๋œ ๋ ˆ์ฝ”๋“œ์˜ ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ณ€์ˆ˜๊ฐ€ final์ž…๋‹ˆ๋‹ค. ์ฆ‰ ๋ ˆ์ฝ”๋“œ๋Š” ๋ถˆ๋ณ€์ž…๋‹ˆ๋‹ค. ๐Ÿ“Œ ๋กฌ๋ณต vs ๋ ˆ์ฝ”๋“œ * ๋ถˆ๋ณ€์„ฑ: ๋กฌ๋ณต(X) ๋ ˆ์ฝ”๋“œ(O) * ํ™•์žฅ์„ฑ: ๋กฌ๋ณต(O) ๋ ˆ์ฝ”๋“œ(X) * ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ: ๋กฌ๋ณต(์ค„์ž„) ๋ ˆ์ฝ”๋“œ(์ค„์ž„) * ๊ฐ€๋…์„ฑ: ๋กฌ๋ณต(๋น„๊ต์  ์–ด๋ ค์›€) ๋ ˆ์ฝ”๋“œ(๋น„๊ต์  ์‰ฌ์›€) * ์จ๋“œ ํŒŒํ‹ฐ ์˜์กด์„ฑ: ๋กฌ๋ณต(O) ๋ ˆ์ฝ”๋“œ(X) * IDE ํ˜ธํ™˜์„ฑ: ๋กฌ๋ณต(์‰ฝ์ง€ ์•Š์Œ) ๋ ˆ์ฝ”๋“œ(์‰ฌ์›€)

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค