๐๏ธ ๋กฌ๋ณต์ ๊ทธ๋ง! ํด๋ฆฐ ์ฝ๋๋ฅผ ์ํด ๋ ์ฝ๋ ์ฌ์ฉํ๊ธฐ
"์ฝ๋๋ฅผ ์ฝ๊ณ ์ฐ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋น์จ์ 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 ํธํ์ฑ: ๋กฌ๋ณต(์ฝ์ง ์์) ๋ ์ฝ๋(์ฌ์)