프로그램 아키텍쳐/Refactoring

매직넘버를 심볼릭 정수로 치환하기

본클라쓰 2010. 12. 9. 12:13

 

매직넘버란 소스 코드 안에 작성된 구체적인 숫자값을 말합니다.

 

 

예를 들어 다음과 같이 입력받은 값의 길이가 100을 넘기면 예외를 발생시키는 코드를 보면 다음과 같습니다.

 

 

If ( 100 > input.length ) then

    Throw New OutofLengthException()

End If

 

 

위 코드에서 숫자 100이 의미하는 뜻을 알 수가 없습니다. 여기서 100은 입력받는 최대 문자수를 뜻합니다. 이 코드를 심복릭 정수를 사용하여 치환합니다. (의미를 나타낼 수 있는 변수로 치환하는 것입니다.)

 

 

Public static final int MAX_INPUT_LENGTH = 100

 

If ( MAX_INPUT_LENGTH < input.length ) then

    Throw New OutofLengthException()

End If

 

 

위 코드처럼 구체적인 정수를 사용하지 않고 상수를 사용해 정수값을 상수에 할당하여 사용하는 방법이 매직넘버를 심볼릭 정수로 치환하기 입니다.(Replace Magic Number with symbolic constant)

 

매직넘버를 사용하는 습관은 좋지 않은 코딩 스타일입니다. 이유는 매직넘버는 의미를 이해하기 어렵고, 수정하기 어렵습니다. 심볼릭 정수를 사용하여 의미를 이해하기 쉽고 수정시에도 정수값을 쉽게 고칠 수 있습니다.

 

심볼릭 정수가 좋다고 하지만 심볼릭 정수로 하지 말하야 하는 경우도 있습니다. 지원하는 필드가 있는 경우나 명백한 값에 정수를 사용하는 것은 오히려 소스를 읽기 어렵게 만듭니다. 예를 들어 배열의 길이를 나타내는 length가 있는 경우 배열의 최소값을 심볼릭 정수로 선언하는 것은 지나친 심볼릭 정수의 사용입니다.