본문 바로가기

전체글149

[리팩토링 1판] Chapter 11. 일반화 처리 Chapter 11. 일반화 처리 일반화는 주로 상속 계층구조나 상속 계층의 위나 아래로, 즉 상위클래스나 하위클래스로 메서드를 옮기는 기법이다. 하나씩 어떤 것이 있는지 살펴보자. 필드 상향 두 하위클래스에 같은 필드가 들어 있을 때 필드를 상위클래스로 옮기자. public class Employee { static class Salesman extends Employee { String name; } static class Engineer extends Employee { String name; } } 리팩토링 후 public class Employee { String name; static class Salesman extends Employee { } static class Engineer ext.. 2024. 4. 9.
[리팩토링 1판] Chapter 10. 메서드 호출 단순화 Chapter 10. 메서드 호출 단순화 객체에서 가장 중요한 것은 인터페이스다. 이해와 사용이 쉬운 인터페이스를 작성하는 기술이야 말로 좋은 객체지향 소프트웨어 개발에 꼭 필요하다. 인터페이스를 더 쉽게 만드는 리팩토링 가장 간단하면서도 중요한 것은 메서드명을 변경하는 일이다. 매개변수 자체는 인터페이스를 다루는데 상당한 역할을 한다. ... 좋은 인터페이스는 보여줘야 할 만큼만 딱 보여준다. 공개할 필요가 없는 것들을 감추는 것만으로 인터페이스를 개선할 수 있다. 메서드명 변경 메서드명을 봐도 기능을 알 수 없을 땐 메서드명을 직관적인 이름으로 바꾸자. public class Sample1 { public int getInvcdtlmt() { return 0; } } 리팩토링 후 public clas.. 2024. 4. 6.
[리팩토링 1판] Chapter 09. 조건문 간결화 Chapter 09. 조건문 간결화 조건문은 복잡해질 가능성이 높은 만큼, 리팩토링 기법이 다양하다. 그 중 핵심적인 기법은 조건문을 여러 개로 나누는 조건문 쪼개기다. 이 기법은 세부 기능에서 스위칭 로직을 분리하므로 중요하다. 조건문 쪼개기 복잡한 조건문이 있을 땐 if, else-if, else 부분을 각각 메서드로 뺴자. public class Sample1 { public void methodA() { if (data.before(SUMMER_START) || date.after(SUMMER_END)) { charge = quantity + winterRate + winterServiceCharge; } else { charge = quantity + summerRate; } } } 리팩토링 후.. 2024. 4. 4.
[리팩토링 1판] Chapter 08. 데이터 체계화 Chapter 08. 데이터 체계화 이번 장은 내용이 좀 많다. 다 아는 내용일 수도 있지만 "아, 이런 것들이 있었지 혹은 있었구나."라고 복습 차원에서 한번 훓어보는 것이 좋다. 다만, 외우려고 하지 말자. 이 장에서 다루는 리팩토링 기법은 데이터 연동을 더 간편하게 해준다. 많은 이들이 필드 자체 캡슐화는 불필요하다고 생각한다. 객체가 내부의 데이터에 직접 접근하게 해야할지, 아니면 getter/setter 메서드를 통해 접근하게 해야 할지에 대한 문제는 오랫동안 좋은 논란거리였다. 이 책이 2002년에 출판된 책인데.. 사실상 요즘은 거의 패턴이 정해져 있다. 위 고민들은 안하게 되고 당연하게 필드는 캡슐화한다. 필드 자체 캡슐화 필드에 직접 접근하던 중 그 필드로의 결합에 문제가 생길 땐 그 필.. 2024. 4. 3.
[리팩토링 1판] Chapter 07. 객체 간의 기능 이동 Chapter 07. 객체 간의 기능 이동 객체 설계에서 원칙은 아니지만 가장 중요한 일 중 하나가 바로 '기능을 어디에 넣을지 판단'하는 것이다. 기능을 넣을 적절한 위치를 찾는 문제는 메서드 이동과 필드 이동을 하면 된다. 클래스가 방대해지는 원인은 대개 기능이 너무 많기 때문이다. 이럴 때는 클래스 추출을 하면 된다. 메서드 이동 (Move Method) 메서드가 자신이 속한 클래스보다 다른 클래스의 기능을 더 많이 이용할 땐 그 메서드가 제일 많이 이용하는 클래스 안에서 비슷한 내용의 새 메서드를 작성하자. 기본 메서드는 간단한 대리 메서드로 전환하든지 아예 삭제하자. 메서드 이동은 빛과 소금 같은 리팩토링 기법이다. 클래스에 기능이 너무 많거나 클래스가 다른 클래스와 과하게 연동되.. 2024. 4. 1.
[리팩토링 1판] Chapter 06. 메서드 정리 Chapter 06. 메서드 정리 리팩토링의 주된 작업은 코드를 포장하는 메서드를 적절히 정리하는 것이다. 거의 모든 문제점은 장황한 메서드로 인해 생긴다. 장황한 메서드에는 많은 정보가 들어있는데, 마구 얽힌 복잡한 로직에 정보들이 묻혀버린다. 핵심적인 리팩토링 기법은 코드 뭉치를 별도의 메서드로 빼내는 메서드 추출이다. 메서드 추출에서 가장 힘든 작업은 지역변수를 처리하는 것인데, 그건 주로 임시변수 때문이다. 메서드 정리 작업을 할 때 임시변수를 메서드 호출로 전환을 실시해서 없어도 되는 임시변수를 전부 제거한다. 메서드 추출 (Extract Method) 어떤 코드를 그룹으로 묶어도 되겠다고 판단될 때 그 코드를 빼내어 목적을 잘 나타내는 직관적 이름의 메서드로 만들자. public class S.. 2024. 3. 31.