자바로 배우는 리팩토링
MagicNumber를 치환하기
킹차니
2021. 12. 22. 23:24
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번에 비해 높을 것이라 생각한다.
++추가