목록IT/리팩토링 (9)
LISTORY
리팩토링을 실시하면서 당연히 해야하는 것이 바로 테스트이다. 적절한 테스트를 실시하면 리팩토링이 얼마나 효과적인 것을 알수 있다 한다. “자가 테스트 코드의 가치” 테스트를 하지 않고 개발했을 경우엔 버그를 발생했을 때 그 버그를 찾는 것이 더 힘들 때가 많다. 테스트 스위트를 작성하면 시간이 훨씬 절약된다. 책의 저자는 처음 테스트 코드를 작성할 때 단계적 개발을 하고 있어, 각 단계를 완성할 때마다 클래스에 테스트 메서드를 넣는 시도를 했다고 한다. 이 때 테스트 코드 안에 예상 출력 결과를 넣고 비교하게 만들어, 문제가 없을 경우 화면에 ok를 출력하게 만들었다고 한다. 테스트 코드는 이렇게 자동화하고 결과를 자체적으로 검사하게 해야한다. 이렇게 단계별로 테스트를 한 결과 책의 저자는 버그도 쉽게 ..
1. 데이터 클래스 데이터 클래스는 필드와 필드 읽기 또는 쓰기 메서드만 들어있는 클래스이다. 이러한 클래스는 데이터 보관만을 담당한다. 이렇게 데이터를 보관하는 클래스는 반드시 캡슐화를 진행해야 한다. 또한, 변경되지 않아야 하는 필드의 경우에는 외부에서 쓸 수 없도록 쓰기 메서드 제거를 해야한다.만일, 다른 클래스에서 데이터를 읽거나 쓰는 부분이 있다면 그 메서드는 데이터 클래스의 메서드로 이동시켜주어야 한다. 2. 방치된 상속물 하위클래스는 부모 클래스의 매서드와 데이터를 상속받는다. 하지만 이 상속받은 데이터나 메서드를 더이상 쓰지 않을 때에는 어떻게 해야 할까? 이럴 경우에는 새 대등 클래스를 작성하여 사용하지 않는 모든 메서드를 넣어주어야 한다. 3. 불필요한 주석 이는 주석을 쓰지 말라는 소..
1. 지나친 관여 객체 지향으로 프로그래밍을 할때 당연한 것이지만, 클래스는 독립성을 유지해야하고 클래스끼리 관여해서는 안된다. 클래스끼리 지나치게 관여하는 경우, 메서드와 필드를 적절히 이동하여 클래스끼리의 관여를 줄여주어야 한다. 만일 공통으로 사용해야하는 부분이 있다면 클래스 추출을 하여 새로운 별도의 클래스로 빼내는 것이 좋다. 아니면 대리 객체 은폐를 실시하는 것이 좋은데, 이는 간단히 말하자면 필요한 데이터를 대신 전달해 주는 메라드를 작성하는 것이다. 2. 인터페이스가 다른 대용 클래스 기능은 같은데 시그니처가 다른 메서드에는 메서드명 변경을 실시해야 한다. 3. 미흡한 라이브러리 클래스 많은 이들이 재사용을 객체의 목적이라 생각하는데, 이는 재사용을 지나치게 과대 평가한 것이다. 아..
강박적 기본 타입 사용 말 그대로 데이터를 사용할 때 강박적으로 기본 타입 데이터를 사용하지 말고, 객체를 사용할 줄 알아야 한다. 이를 적용하기 위한 여러 기법이 있다. “데이터 값을 객체로 전환”데이터 항목에 데이터나 기능을 더 추가해야할 경우, 데이터 항목을 객체로 만들자 이는 앞에 포스팅에서 언급한 데이터 뭉치를 객체로 전환하는 것과 비슷한 내용이다. “분류 기호를 클래스로 전환”기능에 영향을 미치는 숫자형 분류 부호가 든 클래스가 있을 땐 그 숫자를 새로운 클래스로 바꾸자 프로그램을 짜다보면, 열거형 변수들을 사용할 경우가 많다. 이때 개발자는 알아보기 쉽게 변수명을 정의하지만, 실제 돌아가는 것은 숫자에 불과하다. 그렇기 때문에 나중에 코드에 수정이 필요할 때, 헷갈릴 가능성이 많다. 이를 방..
잘못된 소속 흔히 객체를 설명할 때, 붕어빵과 붕어빵 틀로 설명하곤 한다. 붕어빵 틀은 클래스이고, 팥 붕어빵, 피자 붕어빵 처럼 각각이 틀에서 나오는 것을 객체라고 한다. 즉, 객체는 데이터와 메서드를 가지고 있는 하나의 묶음이라 할 수 있다. 이러한 객체가 본인이 가지고 있는 데이터나 메소드보다, 다른 클래스가 가지고 있는 데이터나 메소드에 더 많이 접근한다면 그건 그 데이터, 또는 매소드의 위치를 잘못 지정했다는 뜻이다. 이러한 데이터나 메소드가 있다면 메소드 이동을 하여 적절한 위치를 지정해주어야 한다. 하지만 하나의 메소드가 여러 클래스에 있는 기능을 이용할 때엔 어떻게 해야 할까? 이럴 때엔 클래스마다 사용되는 부분을 쪼갤 수 있는 만큼 쪼개어, 많이 사용되는 클래스로 이동하는 편이 가장 알맞..