Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable

Amenable's Blog

toString์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ12)]
๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”

toString์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ12)]

2023. 3. 1. 23:30

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);
}

 

ํ•ด๋‹น ๊ธ€์€ ๋ฐฑ๊ธฐ์„  ๋‹˜์˜ '์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” ์™„๋ฒฝ ๊ณต๋žต'์„ ์ˆ˜๊ฐ•ํ•˜๊ณ  ์ž‘์„ฑํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

'๐Ÿ“‚ JAVA > ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

clone ์žฌ์ •์˜๋Š” ์ฃผ์˜ํ•ด์„œ ์ง„ํ–‰ํ•˜๋ผ(2) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ13)]  (0) 2023.04.09
clone ์žฌ์ •์˜๋Š” ์ฃผ์˜ํ•ด์„œ ์ง„ํ–‰ํ•˜๋ผ(1) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ13)]  (0) 2023.04.08
equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ(2) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ11)]  (0) 2023.01.09
equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ(1) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ11)]  (0) 2023.01.07
equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ(3) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ10)]  (2) 2023.01.06
    '๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • clone ์žฌ์ •์˜๋Š” ์ฃผ์˜ํ•ด์„œ ์ง„ํ–‰ํ•˜๋ผ(2) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ13)]
    • clone ์žฌ์ •์˜๋Š” ์ฃผ์˜ํ•ด์„œ ์ง„ํ–‰ํ•˜๋ผ(1) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ13)]
    • equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ(2) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ11)]
    • equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ(1) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ11)]
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”