본문 바로가기
자바로 배우는 리팩토링

MagicNumber를 치환하기

by 킹차니 2021. 12. 22.

 

 

 

 

MagicNumber는 코드에 있는 상수를 말한다. 10, 20과 같은 수를 사용하는 것은 가독성, 코드 수정 등에 좋지 않다. 이러한 MagicNumber를 어떻게 해결할 수 있는지 알아보자.

 

먼저 코드는 Robot클래스가 있고, Robot은 명령을 받고 명령에 따라 움직인다.

해결책을 도입하기 이전의 코드는 아래와 같다.

 

Robot

order메소드에서 받는 int값에 따라 행동이 달라진다.

위와 같이 사용할 수 있을 것이다.

 

하지만 위와 같은 코드는 0이 어떤 command인지도 알 수 없어지고, 만약 Robot이 프로그램 여기저기에서 사용될 때, walk가 0이 아닌 10으로 바뀐다면 모두 찾아서 바꿔줘야 한다. 또한 사용자가 0,1,2 이외에 다른 값을 입력할 수 있다. 즉 매우 좋지 않은 코드이다. 이제 이들을 해결해보자.

 

해결책 1. 기호상수 도입

상수를 변수로 지정해두는 것이다. 아래와 같다.

이에 따라 Client는 아래와 같아진다.

누가봐도 어떤 command인지 알 수 있게 수정되었다.

 

 

해결책 2. 클래스로 분리

Command를 클래스로 따로 분리하는 것이다.

이렇게 클래스를 사용할 수도 있다.

 

해결책 3. enum으로 분류하기 

Robot클래스 안에 Command enum타입을 추가한 것을 볼 수 있다.

 

개인적으로는 3번 방법이 컴파일 타임에 잘못된 값을 잡을 수 있고, 메모리 낭비도 덜하여 가장 좋은 방법 같다. 2번 방법은 어쨋든 객체를 생성해야하므로 메모리 낭비가 1, 2번에 비해 높을 것이라 생각한다.

 

++추가

 

'자바로 배우는 리팩토링' 카테고리의 다른 글

메소드 추출  (0) 2021.12.31
널(null)객체 도입  (0) 2021.12.28
어서션(Assertion)  (0) 2021.12.25
리팩토링이란?  (0) 2021.12.22
UML - 클래스 다이어그램  (0) 2021.12.21