본문 바로가기

자바로 배우는 리팩토링7

MagicNumber를 치환하기 MagicNumber는 코드에 있는 상수를 말한다. 10, 20과 같은 수를 사용하는 것은 가독성, 코드 수정 등에 좋지 않다. 이러한 MagicNumber를 어떻게 해결할 수 있는지 알아보자. 먼저 코드는 Robot클래스가 있고, Robot은 명령을 받고 명령에 따라 움직인다. 해결책을 도입하기 이전의 코드는 아래와 같다. Robot order메소드에서 받는 int값에 따라 행동이 달라진다. 위와 같이 사용할 수 있을 것이다. 하지만 위와 같은 코드는 0이 어떤 command인지도 알 수 없어지고, 만약 Robot이 프로그램 여기저기에서 사용될 때, walk가 0이 아닌 10으로 바뀐다면 모두 찾아서 바꿔줘야 한다. 또한 사용자가 0,1,2 이외에 다른 값을 입력할 수 있다. 즉 매우 좋지 않은 코드이.. 2021. 12. 22.
리팩토링이란? 리팩토링 : 외부에서 보는 프로그램 동작은 바꾸지 않고 프로그램의 내부 구조를 개선하는 것. 리팩토링을 해도 외부에서 보는 프로그램 동작은 변하지 않는다. 리팩토링을 하면 프로그램의 내부 구조가 개선된다. 🛠 버그 수정은 리팩토링이 아니다. : 버그를 수정하면 프로그램의 외부 동작이 바뀐다. 🛠 기능 추가는 리팩토링이 아니다. : 기능을 추가하면 외부에서 보는 프로그램 동작이 변한다. 🛠 리팩토링과 유닛테스트 : 리팩토링을 한다면 적어도 유닛 테스트 정도는 반드시 해야한다. 리팩토링할 부분을 테스트하고, 리팩토링을 한 뒤에도 테스트 결과가 같은 지 확인한다. 그러므로 리팩토링 단계마다 유닛테스트를 해야한다. 리팩토링의 목적 버그를 발견하기 쉽게 만든다. 기능을 추가하기 쉽게 만든다. 코드 리뷰하기 쉽게 .. 2021. 12. 22.
UML - 클래스 다이어그램 책의 0장에서 UML을 짚고 넘어간다. 이전에 UML을 잘 모르고 대충 보고 넘어갔는데, 좋은 기회인거 같아 정리해본다. 아래와 같은 클래스들이 있다고 하자. 위의 클래스들을 UML로 나타내면 아래와 같다. 하나씩 알아보자. Child는 Parent의 하위 클래스(상속 - inheritance) 코드 예시: public class Parent{ ... } class Child extends Parent{ ... } Child는 InterfaceX를 구현한다. (실체화 - realization) 코드 예시: interface InterfaceX{ ... } public class Child implements InterfaceX{ ... } Cantainer는 Part를 포함(집합 - aggregation.. 2021. 12. 21.