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 , hashCodeCompareTo 메서드를 재정의해야 합니다 . 하지만 지금은 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