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

리펙토링 8장 p236_p243

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