JavaRush /Java Blog /Random-KO /Java에서 toString() 메서드를 재정의하기 위한 10가지 팁(2부)
Ku6ep
레벨 35

Java에서 toString() 메서드를 재정의하기 위한 10가지 팁(2부)

Random-KO 그룹에 게시되었습니다

Java의 toString 예제

다음 클래스를 사용하여 Netbeans, Eclipse 및 Apache의 ToStringBuilder 유틸리티에 대한 toString 예제를 보여줍니다.

/** * Java программа, демонстрирующая How переопределить метод toString() в Java. * Эта Java программа показывает How вы можете использовать IDE типа Netbeans or Eclipse * и открытую библиотеку типа Apache commons ToStringBuilder для * переопределения toString в Java. * @author Javarevisited.blogspot.com */ public class Country { private String name; private String capital; private long population; private Date independenceDay; public Country(String name){ this.name = name; } public String getName(){ return name; } public void setName(String name) {this.name = name;} public String getCapital() {return capital;} public void setCapital(String capital) {this.capital = capital;} public Date getIndependenceDay() {return independenceDay;} public void setIndependenceDay(Date independenceDay) {this.independenceDay = independenceDay;} public long getPopulation() { return population; } public void setPopulation(long population) {this.population = population; } @Override public String toString() { return "Country{" + "capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + '}'; } public void setIndependenceDay(String date) { DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); try { this.independenceDay = format.parse(date); } catch (ParseException ex) { Logger.getLogger(Country.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String args[]) { Country India = new Country("India"); India.setCapital("New Delhi"); India.setIndependenceDay("15/07/1947"); India.setPopulation(1200000000); System.out.println(India); } }

Netbeans IDE에서 생성된 toString 메서드


Netbeans IDE에서 생성된 toString 메서드는 위에 정의된 클래스에 대해 다음 출력을 생성합니다.

Country{capital=New Delhi, population=1200000000, independenceDay=Fri Aug 15 00:00:00 VET 1947}

위 출력을 보면 Netbeans가 형식화된 날짜를 생성하지 않고 대신 java.util.Date 클래스의 toString() 메서드를 호출하고 있음을 알 수 있습니다.

Rclise IDE에서 생성된 toString() 메소드


기본적으로 Eclipse는 다음 toString 메소드를 생성합니다.

@Override public String toString() { return "Country [name=" + name + ", capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + "]"; }

소스 --> toString() 생성을 클릭하여 Eclipse에서 toString 메소드에 대한 코드를 생성할 수 있습니다. 또한 코드 스타일 선택, 즉 연결 피연산자 또는 StringBuilder 사용 등 여러 가능성을 제공합니다. 다음은 Eclipse에서 방금 생성한 toString() 메서드의 출력입니다.

Country [name=India, capital=New Delhi, population=1200000000, independenceDay=Tue Jul 15 00:00:00 VET 1947]

ToStringBuilder를 사용하여 Java의 toString() 메서드 재정의

PropertyUtils , EqualsBuilder 또는 HashCodeBuilder 와 같은 많은 유용한 클래스와 함께 Apache는 여러 가지 다른 스타일로 toString() 메서드를 출력하는 코드를 생성할 수 있는 ToStringBuilder도 제공합니다. 간단한 여러 줄 스타일에서 toString 메서드의 출력이 어떻게 보이는지 살펴보겠습니다. 간단한 스타일:

India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947

여러 줄 스타일:

test.Country@f0eed6[
 name=India
 capital=New Delhi
 population=1200000000
 independenceDay=Fri Aug 15 00:00:00 VET 1947
 ]

NO_FIELD_NAMES_STYLE(필드 이름이 없는 스타일)

test.Country@1d05c81[India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947]

SHORT_PREFIX_STYLE(짧은 접두사 스타일)

Country[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]

ToStringStyle.DEFAULT_STYLE(기본 스타일)

test.Country@1d05c81[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]

Google의 유사한 오픈 소스 라이브러리인 Guava는 Java에서 toString 메소드용 코드를 생성하기 위한 편리한 API도 제공합니다.

Java에서 toString 메소드가 호출되는 경우

toString은 매우 구체적인 메소드이며 println(), printf() , 로깅, 주장 문 , IDE 디버거 와 같은 많은 JavaAPI 메소드에서 콜렉션을 인쇄하고 연결할 때 호출됩니다. 하위 클래스가 toString()을 재정의하지 않으면 Object 클래스에 정의된 기본 구현이 호출됩니다. 많은 개발자가 Log4J 또는 java.util.Logger와 같은 로깅 API를 사용하여 로그를 출력하고 여기에서 Object를 놓치는 경우가 많습니다.

logger.info("Customer not found:" + customer)

고객이 toString을 재정의하지 않고 customerId, customerName 등과 같은 중요한 정보를 출력하는 경우 그러면 문제를 진단하는 것이 매우 어려울 것입니다. 이것이 바로 Java에서 항상 toString을 재정의할 가치가 있는 이유입니다. 이렇게 하면 몇 가지 이점을 살펴보겠습니다.

toString 메서드 재정의의 이점

  1. 위에서 설명한 대로 적절하게 재정의된 toString은 중요한 정보를 인쇄하여 디버깅 에 도움이 됩니다.
  2. 중요한 개체가 컬렉션에 저장되어 있는 경우 컬렉션을 인쇄하면 저장된 개체의 toString 메서드가 호출되어 중요한 정보를 인쇄할 수 있습니다. 재정의되지 않은 toString 메소드의 전형적인 예는 Java의 Array입니다. 이는 배열의 내용 대신 기본 구현의 결과를 인쇄합니다. Arrays.toString() 등을 사용하여 배열의 내용을 인쇄하는 방법에는 여러 가지가 있지만; 그러나 Array는 Java 객체이기 때문에 List 또는 Set 과 같은 컬렉션 클래스처럼 자체적으로 인쇄하는 방법을 알면 훨씬 더 좋을 것입니다 .

이는 Java에서 toString 메소드를 구현하거나 대체하여 얻을 수 있는 이점 중 일부일 뿐이며 , 스스로 얻고 배울 수 있는 더 많은 이점이 있습니다. 이 팁이 toString 구현을 최대한 활용하는 데 도움이 되기를 바랍니다. Java 애플리케이션에 도움이 되는 toString을 사용하여 작업하는 고유한 방법을 알고 있다면 알려주십시오.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION