더북(TheBook)

3.6 예제로 설명하기

class Supply {
    /**
     * 아래 코드는 어디서든 재고를 식별한다.
     *
     * S로 시작해 숫자 다섯자리 재고 번호가 나오고
     * 뒤이어 앞의 재고 번호와 구분하기 위한 역 슬래시가 나오고
     * 국가 코드가 나오는 엄격한 형식을 따른다.
     * 국가 코드는 반드시 참여 국가인 (US, EU, RU, CN) 중
     * 하나를 뜻하는 대문자 두 개여야 한다.
     * 이어서 마침표와 실제 재고명이 소문자로 나온다.
     */
    static final Pattern CODE = 
        Pattern.compile("^S\\d{5}\\\\(US|EU|RU|CN)\\.[a-z]+$"); 
}

어떤 프로그래밍 구조체(construct)는 매우 강력한 동시에 매우 복잡합니다. 정규식이 바로 그러한 부류죠. 복잡한 만큼 더 쉽게 이해할 수 있도록 설명해야 합니다.

위 코드에는 장황한 정규식이 있습니다. CODE라는 이름으로는 어디에 쓰이는지 전혀 알 수 없지만 주석이 길게 딸려 있네요.

언뜻 좋은 방법 같습니다. 최소한 코드와 더불어 주석이 있으니까요. 주석은 정규식과 부합하는 문자열 유형을 설명하고 있고 코드는 정규식이 정확히 한 번만 컴파일되게 했습니다.

설명서가 틀렸다는 말이 아닙니다(틀리지 않았습니다). 문제는 설명서가 덜 정확하고 숙련된 개발자라면 정규식 코드만으로 읽을 수 있는 내용을 그대로 반복하고 있다는 점입니다.

“예제로 본을 보인다”는 항상 훌륭한 조언입니다. 정규식을 설명할 때도 매우 유용합니다.

주석 모드

B[1-9]# Beta Release Numbers처럼 정규식 안에 주석을 넣을 수도 있습니다. 단 Pattern.COMMENTS 플래그를 넘겨주어야 동작합니다. 길고 복잡한 정규식에서는 이러한 주석이 특히 유용하지만 주석보다는 예제가 훨씬 낫습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.