AskMePlz / EffectiveJava

이펙티브자바를 공부합니다.
4 stars 4 forks source link

아이템12. toString을 항상 재정의하라 #15

Closed leechGamer closed 2 years ago

JamieShin0201 commented 2 years ago

p74. 약 17번째 줄

책에 나오는 PhoneNumber 클래스에 위 내용을 적용한 예시가 궁금합니다.

leechGamer commented 2 years ago

p74. 약 17번째 줄

  • 포맷을 명시하기로 했으면, 명시한 포맷에 맞는 문자열과 객체를 상호전환 할 수 있는 정적 팩터리나 생성자를 제공해주면 좋다.

책에 나오는 PhoneNumber 클래스에 위 내용을 적용한 예시가 궁금합니다.

@Builder
public class PhoneNumber{
    private final int areaCode, prefix, lineNum;

    private static final Pattern pattern = Pattern.compile("\\d{3}-\\d{4}-\\d{4}$");

// PhoneNumber -> String
    @Override
    public String toString() {
        return String.format("%03d-%04d-%04d", areaCode, prefix, lineNum);
    }

//  String -> PhoneNumber
    public static PhoneNumber parse(String phoneNumber) throws Exception {
        if(!pattern.matcher(phoneNumber).find()) {
            throw new Exception(phoneNumber + " are not matched");
        }

        String[] numbers = phoneNumber.split("-");
        return PhoneNumber.builder()
                .areaCode(Integer.parseInt(numbers[0]))
                .prefix(Integer.parseInt(numbers[1]))
                .lineNum(Integer.parseInt(numbers[2]))
                .build();
    }
}