나는 주로 PHP 개발을 한다. 물론 JAVA 개발도 한다. PHP에는 디버그 툴로 print_r이나 var_dump 같은 함수가 있다. xdebug 같은 확장을 이용하면 출력도 깔끔하다.

JAVA에는 그런 게 없다. 물론 이클립스를 이용해 객체를 디버그할 수 있지만, 불편하다.

좀 번거롭지만, toString() 메서드를 오버라이드할 수 있는 방법이 있다. 이렇게 하면 print_r 함수를 사용한 것처럼 객체 내용을 출력한다. Pojomatic 라이브러리를 사용한다.

만약 메이븐을 사용한다면, pom.xml에 아래처럼 의존성을 추가해 준다.

<dependency>
    <groupId>org.pojomatic</groupId>
    <artifactId>pojomatic</artifactId>
    <version>1.0</version>
</dependency>

PostVo.java처럼 내용을 출력하기 원하는 객체에 Pojomatic을 임포트하고, 클래스 위에 @AutoProperty 어노테이션을 넣어 준다.

import org.pojomatic.Pojomatic;
import org.pojomatic.annotations.AutoProperty;

@AutoProperty
public class PostVO { ... }

그리고 아래처럼 toString 메서드를 덮어 쓴다.

@Override
public String toString() {
    return Pojomatic.toString (this);
}

hashCode()equals(Object o) 메서드도 덮어 쓸 수 있다.

@Override
public boolean equals(Object o) {
    return Pojomatic.equals (this, o);
}

@Override
public int hashCode() {
    return Pojomatic.hashCode (this);
}

이렇게 하고 나면, 아래처럼 코드를 쓸 수 있고, 결과도 아래처럼 나온다.

System.out.println(new Person("John", "Doe", 32).toString());

// result: Person{firstName: {John}, lastName: {Doe}, age: {32}}

흔히 사용하는 log4j에서 logger.debug("{}", vo) 식으로 사용할 수도 있다.