본문 바로가기

공부 기록63

[리팩토링 1판] Chapter 07. 객체 간의 기능 이동 Chapter 07. 객체 간의 기능 이동 객체 설계에서 원칙은 아니지만 가장 중요한 일 중 하나가 바로 '기능을 어디에 넣을지 판단'하는 것이다. 기능을 넣을 적절한 위치를 찾는 문제는 메서드 이동과 필드 이동을 하면 된다. 클래스가 방대해지는 원인은 대개 기능이 너무 많기 때문이다. 이럴 때는 클래스 추출을 하면 된다. 메서드 이동 (Move Method) 메서드가 자신이 속한 클래스보다 다른 클래스의 기능을 더 많이 이용할 땐 그 메서드가 제일 많이 이용하는 클래스 안에서 비슷한 내용의 새 메서드를 작성하자. 기본 메서드는 간단한 대리 메서드로 전환하든지 아예 삭제하자. 메서드 이동은 빛과 소금 같은 리팩토링 기법이다. 클래스에 기능이 너무 많거나 클래스가 다른 클래스와 과하게 연동되.. 2024. 4. 1.
[리팩토링 1판] Chapter 06. 메서드 정리 Chapter 06. 메서드 정리 리팩토링의 주된 작업은 코드를 포장하는 메서드를 적절히 정리하는 것이다. 거의 모든 문제점은 장황한 메서드로 인해 생긴다. 장황한 메서드에는 많은 정보가 들어있는데, 마구 얽힌 복잡한 로직에 정보들이 묻혀버린다. 핵심적인 리팩토링 기법은 코드 뭉치를 별도의 메서드로 빼내는 메서드 추출이다. 메서드 추출에서 가장 힘든 작업은 지역변수를 처리하는 것인데, 그건 주로 임시변수 때문이다. 메서드 정리 작업을 할 때 임시변수를 메서드 호출로 전환을 실시해서 없어도 되는 임시변수를 전부 제거한다. 메서드 추출 (Extract Method) 어떤 코드를 그룹으로 묶어도 되겠다고 판단될 때 그 코드를 빼내어 목적을 잘 나타내는 직관적 이름의 메서드로 만들자. public class S.. 2024. 3. 31.
[리팩토링 1판] Chapter 05. 리팩토링 기법 카탈로그에 대해 Chapter 05. 리팩토링 기법 카탈로그에 대해 6장부터 12장까지는 리팩토링 기법을 하나씩 체계적으로 설명하는 카탈로그 형식으로 구성했다. 각 리팩토링 기법 절의 구성 이름 요약 동기 방법 예제 리팩토링를 이해하기 위해서는 각 카탈로그의 예제를 직접 적용해보아야 한다. 리팩토링 1판의 자바 버전은 무려 1.1이라고 한다. (허..) 참조 검색 대다수의 리팩토링 작업에서는 메서드, 인스턴스 값, 클래스 등으로의 참조 부분을 전부 찾아야 된다. 이 때는 IDE의 검색 기능을 활용하는 것이 좋다. 특히 확인 없이 단번에 찾아바꾸기를 실시하지 말고, 각 참조를 일일이 검사하면서 치환하려는 대상이 맞는지 확인해야 한다. 검색 패턴을 잘 활용하는 사람도 있겠지만 실수할 확률도 존재하기 때문이다. 또한 타입을 .. 2024. 3. 30.
[리팩토링 1판] Chapter 04. 테스트 작성 Chapter 04. 테스트 작성 리팩토링을 실시하기 위한 필수 전제조건은 반드시 견고한 테스트를 해야 한다는 것이다. 자가 테스트 코드의 가치 테스트 코드를 작성하지 않으면 지금 당장은 개발을 빠르게 할 수 있겠지만, 나중가면 오히려 개발 속도가 현저하게 떨어진다. 심지어 속도뿐만 아니라 정확성, 신뢰성, 효율성 모두 떨어진다. 버그를 만날 확률이 높아지고, 버그를 찾느라 디버깅을 수행하지만 역시 시간이 오래 걸린다. 기능을 개발하면서 단계적으로 테스트 코드를 통해 본인이 작성한 로직에 대해서 검증할 수 있어야 한다. 테스트 코드의 장점은 데이터가 맞는지 화면으로 확인하지 않아도 된다. 테스트 코드를 작성하면 해당 테스트에 대한 성공이나 실패가 뜨므로, 직관적이다. 또한 버그를 쉽고 빠르게 찾을 수 있.. 2024. 3. 29.
[리팩토링 1판] Chapter 03. 코드의 구린내 Chapter 03. 코드의 구린내 리팩토링이 필요한 경우는 코드에서 구린내가 날 때이다. (?..) 어떤 경우가 구린내가 나는지 알아보자. 중복코드 구린내의 제왕은 누가 뭐래도 중복코드다. 똑같은 구조가 두 군데 이상 있을 때는 그 부분을 하나로 통일하면 프로그램이 개선된다. 중복코드의 가장 단순한 예는 한 클래스의 두 메서드 안에 같은 코드가 들어 있는 경우다. 이럴 때는 메서드 추출 기법을 적용해서 중복을 없앤 후 메서드 상향 기법을 적용하면 된다. 장황한 메서드 최적의 상태로 장수하는 객체 프로그램을 보면 공통적으로 메서드 길이가 짧다. 객체지향 프로그래밍 경험이 쌓일수록 짧은 메서드의 중요성을 실감한다. 짧은 메서드를 이해하기 쉽게 하려면 메서드명을 잘 정해야 한다. 메서드의 기능을 한눈에 알 .. 2024. 3. 29.
[리팩토링 1판] Chaptor 02. 리팩토링 개론 Chapter 02. 리팩토링 개론 리팩토링은 무엇인가 리팩토링: 겉으로 드러나는 기능은 그대로 둔 채, 알아보기 쉽고 수정하기 간편하게 소프트웨어 내부를 수정하는 작업 리팩토링의 목적은 소프트웨어를 더 이해하기 쉽고 수정하기 쉽게 만드는 것이다. 리팩토링은 겉으로 드러나는 소프트웨어 기능에 영향을 주지 않는다. 🔑 주의점 기능을 추가할 땐 코드를 수정하지 말고 기능만 추가해야 한다. 진행 상태를 파악하려면 테스트를 추가하고 그 테스트들이 잘 동작하는지 확인하면 된다. 리팩토링할 때는 코드를 추가하지 말고 코드 구조 개선만 해야 한다. 앞서 작성한 테스트는 전혀 추가하지 않고 오로지 코드 구조만 수정해야 한다. 리팩토링은 왜 해야 하나 리팩토링의 가치는 확실하며, 적어도 코드를 언제든 쉽게 이해할 수 있.. 2024. 3. 27.