이제는 한층 더 좋아졌다. 변경 사항은 메서드의 API를 이해하는 데 도움을 줄 뿐만 아니라 함수에서 실제 코드 자체를 향상시킨다. 어떤 상수 값이나 하드 코딩된 정수 값을 사용하는 대신 더 분명한 MoveResult.Success를 볼 수 있기 때문이다. 열거형은 클래스의 상수 값과 달리 전달될 수 있는 값을 제한하고 고유한 타입의 이름을 사용하므로 의도를 설명하기에 더 좋다.
이 함수는 정수 값을 매개변수로 받는 퍼블릭(public)한 API이므로 일부 검증(validation)을 통합해야 한다. 검증은 이미 널리 사용되고 있기 때문에 internal 코드나 private 코드 구현에서도 필요할 수 있다. 따라서 원래 코드에 유효성 검사 로직이 있다면 더 좋을 것이다.
public MoveResult MoveContents(TopicId from, TopicId to) { // 실제 코드 return MoveResult.Success; }
보다시피 코드를 적당한 위치로 옮기고 타입을 사용하여 이해하기 쉽게 만들 수 있다. 컴파일러는 타입의 이름을 정확하게 썼는지 확인하기 때문에 오타가 발생하는 것을 방지한다.