CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /์ž๋ฐ” toString() ๋ฉ”์„œ๋“œ
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

์ž๋ฐ” toString() ๋ฉ”์„œ๋“œ

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ๋™์•ˆ ๊ฐ์ฒด์˜ ๋‚ด์šฉ์„ ์•Œ์•„๋‚ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชฉ์ ์„ ์œ„ํ•ด ํด๋ž˜์Šค ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ Java ํด๋ž˜์Šค์ธ Java Object ํด๋ž˜์Šค๋Š” ํŠน๋ณ„ํ•œ toString() ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Java์—์„œ toString() ๋ฉ”์†Œ๋“œ ์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
package.class@hashCode
์ฆ‰ , java.lang.Object ์— ์ •์˜๋œ toString ์€ ๊ฐ์ฒด์˜ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ 16์ง„์ˆ˜ ํ˜•์‹์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ทธ๋‹ค์ง€ ๋ช…ํ™•ํ•˜์ง€๋„ ์œ ์šฉํ•˜์ง€๋„ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ฐ˜ํ™˜ ๋ฌธ์ž์—ด์— ํด๋ž˜์Šค ์ด๋ฆ„, ๋ชจ๋“  ๋ณ€์ˆ˜์˜ ์ด๋ฆ„ ๋ฐ ๊ฐ’์ด ํฌํ•จ๋˜๋„๋ก toString()์„ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. toString ๋ฉ”์„œ๋“œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์žฌ์ •์˜ํ•˜๋ฉด Java ํ”„๋กœ๊ทธ๋žจ์„ ๋กœ๊น…ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ท€์ค‘ํ•˜๊ณ  ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, toString() ๋ฉ”์†Œ๋“œ๋Š” Java์—์„œ ์ˆซ์ž ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ์–ป๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์†Œ๋“œ๊ฐ€ ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

Java toString() ๋ฉ”์†Œ๋“œ์˜ ์˜ˆ

์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ Java์˜ toString() ๋ฉ”์„œ๋“œ ์™ธ์—๋„ ํ•ด๋‹น ๊ฐ์ฒด๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ธฐ ์œ„ํ•ด equals , hashCode ๋ฐ CompareTo ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ toString ์— ์ง‘์ค‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค . ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ œ์ถœํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊น…ํ•  ๋•Œ ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ๋ณด๊ณ  ์‹ถ์–ดํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ‰๋ฉด์˜ ํ•œ ์ ์„ ์„ค๋ช…ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์ขŒํ‘œ(coordinateX,coordinateY)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ํด๋ž˜์Šค ์ด๋ฆ„์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž๊ฐ€ "์ด๊ฒŒ ๋ฌด์Šจ ๊ฐ์ฒด์ง€?"๋ผ๊ณ  ๋ฌผ์œผ๋ฉด ํ™”๋ฉด์— ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์žฌ์ •์˜๋œ toString() ๋ฉ”์„œ๋“œ ์—์„œ ์‹œ์—ฐํ•  ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค . ์ด์ œ ํด๋ž˜์Šค ์ž์ฒด, ํ•ด๋‹น ํ•„๋“œ(์ขŒํ‘œ), ์ƒ์„ฑ์ž, ์ขŒํ‘œ๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ getter๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค(๋ฌผ๋ก  ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ OOP์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ ๊ด€์ ์—์„œ ๋ณด๋ฉด getter๊ฐ€ ์ข‹์€ ์Šต๊ด€์ž…๋‹ˆ๋‹ค). ์„ค๋ช…์„ ์œ„ํ•ด ๋‹ค๋ฅธ ๋‘ ํฌ์ธํŠธ์˜ ํ•ฉ์ธ ์ƒˆ ํฌ์ธํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  equals ๋ฐ hashCode ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
public class Point implements Comparable<Point> {
   private final int coordinateX;
   private final int coordinateY;

   public Point(final int coordinateX, final int coordinateY) {
       this.coordinateX = coordinateX;
       this.coordinateY = coordinateY;
   }

   public int getX() {
       return coordinateX;
   }

   public int getY() {
       return coordinateY;
   }

   public Point sum(final Point that) {
       return new Point(coordinateX + that.coordinateX, coordinateY + that.coordinateY);
   }

// here we override toString with coordinates and class name
   @Override
   public String toString() {
       return "Point{"
               + "X: " + getX()
               + ", Y: " + getY()
               +  '}';
   }

   @Override
   public boolean equals(Object o) {
       if (o == this) {
           return true;
       }
       if (o == null || o.getClass() != this.getClass()) {
           return false;
       }

   @Override
   public int hashCode() {
       return coordinateX + coordinateY;

   }
์ด์ œ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์™€ ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—๋Š” ๋‘ ๊ฐœ์˜ ์ ์ด ์žˆ๊ณ  ์„ธ ๋ฒˆ์งธ ์ ์€ ๋‘ ์ ์˜ ํ•ฉ์—์„œ ์–ป์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— toString ๋ฉ”์†Œ๋“œ๋ฅผ ์ ์šฉํ•˜์—ฌ ์ถœ๋ ฅํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
//toString() method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
     //call toString explicitly
       System.out.println(mySum.toString());
   }
}
์ด ํ”„๋กœ๊ทธ๋žจ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํฌ์ธํŠธ{X: 3, Y: 15}
์‹ค์ œ๋กœ toString ๋ฉ”์„œ๋“œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•  ํ•„์š”๋Š” ์—†์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. toString() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ์›ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ System.out.println ์— ์ „๋‹ฌํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค . ๋”ฐ๋ผ์„œ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
//toString method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
       //call toString implicitly
       System.out.println(mySum);
   }
}
ํ”„๋กœ๊ทธ๋žจ์˜ ์ถœ๋ ฅ์€ ์ด์ „๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. toString ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด๋ฅผ ์ธ์‡„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์ด ๊ฒฝ์šฐ Object ํด๋ž˜์Šค ์˜ toString ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” Point ํด๋ž˜์Šค ์—์„œ toString ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ฑฐ ํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์— ๊ทธ๋Œ€๋กœ ๋‘๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
ํฌ์ธํŠธ@12
์—ฌ๊ธฐ์— 16์ง„์ˆ˜๋กœ ๋œ ๊ฐ์ฒด์˜ ํ•ด์‹œ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION