1. Refactoring 리팩토링 8장 - Change Bidirectional Association to Unidirectional - Replace Magic Number with Symbolic Constant - Encapsulate Field 아꿈사http://cafe.naver.com/architect1 TTF http://www.npteam.net
2. Change Bidirectional Association to Unidirectional ■ 양방향 연관 관계를 단반향으로 변경하기 - 서로 링크를 가지는 두개의 클래스에서 한 쪽이 다른 한쪽을 더 이상 필요로 하지 않을 때는 불필요한 링크를 제거하라. * * 1 1
3. Change Bidirectional Association to Unidirectional ■ 동기 - 양방향 연관(association)은 편리하다. - 그러나 비용이 따른다. (양방향 링크 확인 비용) ■ 양방향 링크에서 발생하는 문제점 - 참조 관계가 제대로 클리어 되지 않아서좀비 객체의 발생 가능성이 있다. - 상호 종속성으로 인하여 결합도가 증가한다. 불필요한 양방향 링크의 한쪽 링크를 끊어라.
4. Change Bidirectional Association to Unidirectional ■ 절차 - 삭제할 포인터가 참조되는 곳을 조사한다. - 삭제가 가능한지 확인한다. - get 메소드를 사용해야 할 경우. Self Encapsulate Field와 Substitute Algorithm을 적용한 후 테스트한다. - get 메소드를 사용하지 않을 경우. 포인터 대신 다른 방법으로 객체를 얻을 수 있도록 적용한 후 컴파일/테스트한다.
5. Change Bidirectional Association to Unidirectional ■ 절차 - 필드를 업데이트 하는 코드를 제거한다. Set 메소드를 이용하여 업데이트 하는 코드를 Set 메소드를 호출하도록 변경한다. Set 메소드를 빈 메소드로 만든다. 컴파일 후 이상이 없으면 모두 삭제한다. - 컴파일, 테스트한다.
6. Change Bidirectional Association to Unidirectional ■ 리팩토링 - 리팩토링에서 가장 어려운 것 리팩토링이가능한지 확인하는 것이다. - 리팩토링이 가능한지 확인하고 나면, 안전하고 쉽게 리팩토링 할 수 있다. - 리팩토링 하는 방법은 여러가지가 있으므로 다양한 관점에서 바라보고 처리한다. 예) 포인터로 접근하는 대신 객체를 파라미터로전달하는 방법.
8. Replace Magic Number with Symbolic Constant ■ 동기 - 매직 넘버(magic number)는 프로그래밍의 가장 오래된 해악 가운데 하나이다. 값을 바꾸기 어렵다. 의미를 이해하기 어렵다. 여러 곳에서 사용하는 경우에 문제가 많다. - 상수를 사용하면 좋은 점 퍼포먼스에 영향을 주지 않는다. 코드 가독성이 엄청나게 향상된다.
9. Replace Magic Number with Symbolic Constant ■ 절차 - 상수를 선언하고매직 넘버를 설정한다. - 매직 넘버가 사용되는 곳을 모두 찾는다. - 매직 넘버를 상수로 치환 가능한지 판단하고, 매직 넘버를 상수로 바꾼다. - 컴파일 한다. - 위와 같은 방식으로 모든 매직 넘버를 바꾼 후 컴파일 및 테스트를 한다. 모든 동작이 바뀌기 전과 동일해야 한다.
11. Encapsulate Field ■ 동기 - 객체지향의 중요한 교리! 캡슐화(encapsulation) 데이터 은폐(data hiding) - 데이터를 절대로 public로 하지 마라! 알지 못하는 사이에 다른 객체가 데이터의 값을 변경/수정 할 수 있다. - Encapsulate Field는 첫 걸음이다! 접근자만으로는 장점이 없다. Move Method를 이용할 메소드가 있는지 확인한다.
12. Encapsulate Field ■ 절차 - 필드에 대한 get/set 메소드를 만든다. - 필드에 접근하는 모든 코드를 찾는다. 값에 대한 참조는 get 메소드로 바꾼다. 값을 변경하면 set 메소드로 바꾼다. - 코드를 수정하고 컴파일및 테스트를 한다. - 필드에 접근하는 모든 코드를 수정했으면, 필드를 private으로 만든다. - 컴파일 및 테스트를 한다.