1. toString์ ์ฌ์ ์ ํด์ผ ํ๋ ์ด์ ๐ง
1. Object์ toString ๋ฉ์๋์ ๊ธฐ๋ณธ ํ์
Object์ ๊ธฐ๋ณธ toString ๋ฉ์๋๋ 'ํด๋์ค์ด๋ฆ@16์ง์๋ก ํ์ํ ํด์ฌ์ฝ๋'๋ฅผ ๋ฐํํด ์ค๋ค. test.Test@15db9742์ด ํ๋์ ์์์ด๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ํด๋์ค์์ toString์ผ๋ก ๋ฐํ๋ฐ์ ์ ์ ํ ๊ฐ์ ํํ๊ฐ ์๋๋ค.
๋ํ, Object.class์ ์ ์๋ toString์ ์ดํด๋ณด๋ฉด ์๋์ ๋ด์ฉ์ ํ์ธํ ์ ์๋ค.
- The result should be a concise but informative representation that is easy for a person to read.
๊ฐ๊ฒฐํ๋ฉด์ ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด ํํ์ ์ ์ตํ ์ ๋ณด๋ฅผ ๋ฐํํด๋ผ - It is recommended that all subclasses override this method.
๋ชจ๋ ํ์ ํด๋์ค์์ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ผ
์ฆ, ์์ฃผ ๋น์ฐํ๊ฒ๋ ์ฐ๋ฆฌ๋ toString์ ์ฌ์ ์ ํด์ค์ผ ํ๋ค.
2. ๋๋ฒ๊น ํ๊ธฐ ์ฝ๋ค.
toString๋ฉ์๋๋ ๋๋ฒ๊ฑฐ๊ฐ ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํ ๋ ์๋์ผ๋ก ๋ถ๋ฆฌ๊ฒ ๋๋ค. ๋ง์ฝ toString์ ์ ๋๋ก ์ฌ์ ์ํ์ง ์๋๋ค๋ฉด ์ธ๋ชจ์๋ ๋ฉ์์ง๋ง ๋ก๊ทธ์ ๋จ์ ๊ฒ์ด๋ค. toString์ ์ ์ ํ๊ฒ ์ฌ์ ์ ํ๋ค๋ฉด ์ฐ๋ฆฌ๋ ๋๋ฒ๊น ์ ์ฝ๊ฒ ํ ์ ์๋ค.
2. ์ด๋ป๊ฒ toString์ ์ฌ์ ์ ํด์ผ ํ๋๊ฐ? ๐น
1. ๊ฐ๊ฒฐํ๋ฉด์ ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด ํํ์ ์ ์ตํ ์ ๋ณด๋ฅผ ๋ฐํ
2. ๊ฐ์ฒด๊ฐ ๊ฐ์ง ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ์ข๋ค
๋ฌผ๋ก ์ธ๋ถ์ ๊ณต๊ฐํ ์ ์๋ ๋ฐ์ดํฐ์ ํํด์ ์ ์ฉ๋๋ ๋ง์ผ ๊ฒ์ด๋ค.
3. ๊ฐ ํด๋์ค๋ผ๋ฉด ํฌ๋งท์ ๋ฌธ์์ ๋ช ์ํ๋ ๊ฒ์ด ์ข๋ค.
ํฌ๋งท์ ๋ช ์ํ๋ฉด ๊ทธ ๊ฐ์ฒด๋ ํ์ค์ ์ด๊ณ , ๋ช ํํ๊ณ , ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ก ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
/**
* ์ด ์ ํ๋ฒํธ์ ๋ฌธ์์ด ํํ์ ๋ฐํํ๋ค.
* ์ด ๋ฌธ์์ด์ "XXX-YYY-ZZZZ" ํํ์ 12๊ธ์๋ก ๊ตฌ์ฑ๋๋ค.
* XXX๋ ์ง์ญ ์ฝ๋, YYY๋ ํ๋ฆฌํฝ์ค, ZZZZ๋ ๊ฐ์
์ ๋ฒํธ๋ค.
* ๊ฐ๊ฐ์ ๋๋ฌธ์๋ 10์ง์ ์ซ์ ํ๋๋ฅผ ๋ํ๋ธ๋ค.
*
* ์ ํ๋ฒํธ์ ๊ฐ ๋ถ๋ถ์ ๊ฐ์ด ๋๋ฌด ์์์ ์๋ฆฟ์๋ฅผ ์ฑ์ธ ์ ์๋ค๋ฉด,
* ์์์๋ถํฐ 0์ผ๋ก ์ฑ์๋๊ฐ๋ค. ์์ปจ๋ ๊ฐ์
์ ๋ฒํธ๊ฐ 123์ด๋ผ๋ฉด
* ์ ํ๋ฒํธ์ ๋ง์ง๋ง ๋ค ๋ฌธ์๋ "0123"์ด ๋๋ค.
*/
@Override public String toString() {
return String.format("%03d-%03d-%04d",
areaCode, prefix, lineNum);
}
3. toString์ด ๋ฐํํ ๊ฐ์ ํฌํจ๋ ์ ๋ณด๋ฅผ ์ป์ด์ธ ์ ์๋ API๋ฅผ ์ ๊ณตํ์. ๐ธ
๋ง์ฝ ํด๋น API๊ฐ ์๋ค๋ฉด ํด๋น ์ ๋ณด๊ฐ ํ์ํ ํ๋ก๊ทธ๋๋จธ๋ toString์ผ๋ก ๊ฐ์ ๋ฐ์์จ ํ ์ํ๋ ๊ฐ์ ์ป๊ธฐ ์ํด ๋ค์ ํ์ฑ์ ํ ์๋ฐ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ toString์ ํํ์ด ๋ฐ๋๋ฉด ํ์ฑ์ด ์ ๋๋ก ์ด๋ฃจ์ด์ง์ง ์์ ์์คํ
์ด ๋ง๊ฐ์ง ๊ฑฐ๋ผ๋ ๊ฒ์ ๋๋ฌด๋๋ ์ฝ๊ฒ ์์ํ ์ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก toString์ ๋ฐํ ๊ฐ์ ํฌํจ๋ ์ ๋ณด๋ฅผ ์ป์ด์ฌ ์ ์๋๋ก API๋ฅผ ์ ๊ณตํ๋๋ก ํ์.
4. toStirng์ ์๋์์ฑํ๋ ๊ฒ์ด ์๋ ์ง์ ์์ฑํ๋ ๊ฒ์ด ๋๋ก๋ ์ ์ ํ ์ ์๋ค. ๐ฅค
AutoValue, Lombok ๊ทธ๋ฆฌ๊ณ ๋๋ถ๋ถ์ IDE์์ toString์ ์์ฑ์ ๋์์ค๋ค. ํ๋์ ๋ด์ฉ์ ์ ์ ํ๊ฒ ๋ํ๋ผ ์๋ ์์ง๋ง, ํด๋์ค์ '์๋ฏธ'๊น์ง๋ ํ์ ํ์ง ๋ชปํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์๋ ์์ฑ๋ toString๋ณด๋ค ๋ ์ ์ ํ toString์ ๋ง๋ค ์ ์๋ค๋ฉด ์ง์ toString์ ์ฌ์ ์ํ์.
์๋ฅผ ๋ค์ด, ์ ํ๋ฒํธ์ ๋ฌธ์์ด์ toString์ผ๋ก ํํํ๋ค๊ณ ํ์. ์๋์ ์ฝ๋๋ฅผ ํตํด '์๋ ์์ฑ์ ์ด์ฉํ toString'๊ณผ '์ง์ ์์ฑํ toString'์ ๋น๊ตํด ๋ณด๋ฉด์ ์ด๋ ๊ฒ์ด ๋ ์ ์ ํ์ง ์ดํดํ ์ ์์ ๊ฒ์ด๋ค.
// ์๋ ์์ฑ์ ์ด์ฉํ toString (ํด๋์ค์ ์๋ฏธ๋ฅผ ์ ์ ํ๊ฒ ํ์X)
@Override
public String toString() {
return "PhoneNumber [areaCode=" + areaCode + ", prefix=" + prefix + ", lineNum=" + lineNum + "]";
}
// ์ง์ ์์ฑํ toString (ํด๋์ค์ ์๋ฏธ๋ฅผ ์ ์ ํ๊ฒ ํํ)
@Override public String toString() {
return String.format("%03d-%03d-%04d",
areaCode, prefix, lineNum);
}
ํด๋น ๊ธ์ ๋ฐฑ๊ธฐ์ ๋์ '์ดํํฐ๋ธ ์๋ฐ ์๋ฒฝ ๊ณต๋ต'์ ์๊ฐํ๊ณ ์์ฑํ ๊ฒ์ ๋๋ค.