Merry Christmas

'2008/02'에 해당되는 글 2건

  1. 2008/02/15 메소드 정리 - > Extract Method
  2. 2008/02/04 흠... 요즘 너무 정신없이 바쁘네요. (1)

출처 : 리팩토링 ( 저자 : 마틴 파울러  / 윤성준 . 조재박 옮김)

---------------------------------------------------------------------------------------------------
메소드 정리 - > Extract Method

그룹으로 함꼐 묵을 수 있는 코드 조각이 있으면, 코드의 목적이 잘 드러나도록 메소드의 이름을 지어 별도의 메소드로 뽑아낸다.

void printOwing(double amont){
printBanner();
// 상세 정보 표시
System.out.println("name:"+_name);
System.out.println("amount:"+amount);
}
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

void printOwing(double amount){
printBanner();
printDetails(amount);
}

void printDetails(double amount){
 System.out.println("name:"+_name);
System.out.println("amount:"+amount);
}


☆ 동기

Extract Method는 내가 가장 자주 사용하는 리팩토링 가운데 하나이다. 나는 지나치게 긴 메소드를 보거나, 목적을 이해하기 위해서 주석이 필요한 코드를 보면 그 부분을 하나의 메소드로 뽑아낸다 .
나는 다음과 같은 이유료 짧고, 이해하기 쉬운 이름으로 된 메소드를 좋아한다. 첫째, 메소드가 잘게 쪼개져 있을 때 다른 메소드에서 사용될 확률이 높아진다. 둘째, 고수준의 메소드를 볼 때 이련의 주석을 읽는 것 같은 느김이 들도록 할 수 있다. 또한, 메소드가 잘게 쪼개져 있을 때 오버라이드 하는 것도 훨씬 쉽다. 만약 큰 메소드에 익수해져 있다면 메소드를 잘게 쪼개는 것에 익숙해지는 데는 약간 시간이 걸릴 것이다. 작은 메소드는 실제로 이름을 잘 지었을 때문 그 진가가 드러나므로, 이름을 지을 때 주의해야 한다.
사람들은 때때로 나에게 한 메소드의 길이가 어느 종도 되ㅇ야 할 지를 묻는다. 그러나 나는 길이가 중요하다고 생각 하지 않는다. 중요한것은 메소드의 이름과 메소드 몸체의 의미적 차이다. 뽑아내는 것이 코드를 더욱 명확하게 하며느 새로 만든 메소드의 이름이 원래 코드의 길이보다 길어져도 뽑아낸다.

☆ 절차
 - 메소드를 새로 만들고 , 의도를 잘 나타낼 수 잇도록 이름을 정한다(어떻게 하는지를 나타내는 방식으로 이름을 정하지 말고, 무엇을 하는지를 나타내게 이름을 정한다).
 ->  뽑아내고자 하는 부분이 한줄의 메시지나 함수 호출과 같이 아주 간단한 경우에는 새로운 메소드의 이름이 그 코드의 의도를 더 잘 나타낼수 있을 때만 뽑아낸다. 더 이해하기 쉬운 이름을 지을 수 없다면 코드를 뽑아내지 않는 것이 낮다.
- 원래 메소드에서 뽑아내고자 하는 부분의 코드를 복사하여 새 메소드로 옮긴다.
- 원래 메소드에서 사용되고 있는 지역변수가 뽑아낸 코드에 있는지 확인한다. 이런 지역변수는 새로운 메소드의 지역변수나 파라미터가 된다.
- 뽑아낸 코드내에서만 사용되는 임시변수가 있는지 본다. 있다면 새로 만든 메소드의 임수변수로 선언한다.
- 뽑아낸 코드내에서 지역변수의 값이 수정되는지 본다. 만약 하나의 지역변수만 수정된 다면, 뽑아낸 코드의 질의를 보고ㅡ 주정된 결과를 관련된 변수에 대입할 수 있는지 본다. 이렇게 하는 것이 이상하거나, 값이 수정되는 지역변수가 두개 이상있다면 쉽게 메소드로  추출할 수 없는 경우이다. 이럴때는 split Temporart Variable(155)을 사용한 다음 다시 시도해야 한다. 임시변수는 Replace Temp with Quert(147)로 제거할 수 잇다.(예제에서 토의된 내용 참조).
- 뽑아낸 코드에서 읽기만 하는 변수는 새 메소드의 파라미터로 넘긴다.
- 지역변수와 관련되 사항을 다룬 후에는 컴파일을 한다.
- 원래 메소드에서 뽑아낸 코드 부분은 새로 만든 메소드를 호출하도록 바꾼다.
 => 새로 만든 메소드로 옮긴 임시 변수가 잇는 경우 그 임시변수가 원래 메소드의 밖에서 선언되었는지를 확인한다. 만약 그렇다면 새로 만들 메소드에서는 선언을 해줄 필요가 없다.
- 컴파일과 테스트를 한다.

---------------------------------------------------------------------------------------------------

extract method 는 이클립스에서도 자동으로 지원 되는 리펙토링중 하나이다. 그만큼 많이 쓰인다는건가;?
저자가 말한것 처럼 가장 많이 사용하는 리팩토링 가운데 하나라고 하는것 처럼..

음냥;; 나도 뭐 저자를 따라하려고 많이 노력하고 있는데..
참.. 그게 새로운 메소드를 이름으로 짓는다는것이 어렵던지... ;; 쩝;;

영어에 약한 사람은... 힘들어요;;

무튼... 이 리팩토링을 사용하면.. 코드가 좀더 깔끔해 보인다.
분산을 시켜서 그런지;;
뭐 단점은... 보려면.. 여기 봤다가 저기 봤다가 해야 하니;;ㅋ
그래도.. 저자 말대로 이름을 잘지으면... 중간에 새로 뽑아낸 메소드도 그냥 단순히 코드의 한줄로 읽을 수
있지 않을까 하는 생각입니다~~~~

Trackback Address :: http://helols.tistory.com/trackback/48

댓글을 달아 주세요

프로젝트가 산으로 가려나;;


왜케 정신없이 바쁘고 ... ㅡㅡ




잠넬 시간도 없고.......

아~

다시 마음을 가다듬고.. 열공모드에;;;;;;



Head First Object Oriented Analysis & Design : 세상을 설계하는 객체지향 방법론

어디에 있는지 왜 나에게로 안오는거야;; ㅜㅜ

어여 내 품으로 돌아와;;기다리고 있을게;;

Trackback Address :: http://helols.tistory.com/trackback/46

댓글을 달아 주세요

  1. 우용암 2008/02/10 22:51 Address Modify/Delete Reply

    안녕하세요^^

    이메일은 wya2017@hanmail.net

    글자료를 잘 감상했습니다.......저도

    티스토리블로그를 운영하고자 합니다

    부득이 초대장을 신청하오니

    꼭 보내 주셨으면 합니다

    부탁드립니다

    감사합니다



    사람들을 저절로 모여들게 하는 사람



    아름다운 꽃이 피어 있거나
    탐스러운 과일이 달린 나무 밑에는
    어김없이 길이 나 있습니다.
    사람들이 저절로 모여들기 때문일 것입니다.

    그와 마찬가지 이치로 아름답고
    향기나는 사람에게 사람이 따르는 것은
    당연한 일이 아닐까 싶습니다.

    내가 좀 손해 보더라도 상대를 위해
    아량을 베푸는 너그러운 사람. 그래서 언제나
    은은한 향기가 풍겨져 나오는 사람.
    그런 사람을 만나 함께 있고 싶어집니다.

    그 향기가 온전히 내 몸과 마음을
    적셔질 수 있도록, 그리하여 나 또한 그
    향기를 누군가에게 전할 수 있도록 말입니다.

    스치듯 찾아와서 떠나지 않고
    늘 든든하게 곁을 지켜주는 사람이 있고.
    소란피우며 요란하게 다가왔다가
    언제 그랬냐는 듯이
    훌쩍 떠나가는 사람들도 있습니다.

    소리없이, 조용히, 믿음직스럽게
    그러나 가끔 입에 쓴 약처럼 듣기는 거북해도
    도움이 되는 충고를 해 주는 친구들이 있고
    귓가에 듣기 좋은 소리만 늘어놓다가 중요한
    순간에는 고개를 돌려버리는 친구들도 있습니다

    우리 곁에는 어떤 사람들이 머물러 있습니까?

    있을 땐 잘 몰라도 없으면 표가 나는 사람들,
    순간 아찔하게 사람을 매혹시키거나 하지는
    않지만 늘 언제봐도 좋은 얼굴, 넉넉한
    웃음을 가진 친구들, 그렇게 편안하고
    믿을 만한 친구들을 몇 이나 곁에 두고 계십니까?

    나 또한 누군가에게 가깝고 편안한
    존재인지 그러기 위해 노력은 하고 있는지
    스스로에게 자문하고 싶습니다.

    두드러지는 존재,
    으뜸인 존재가 될 필요는 없습니다.

    오래 보아도 물리지 않는 느낌,
    늘 친근하고 스스럼없는 상대, 그런 친구들을
    곁에 둘 수 있었으면, 나 또한 남들에게
    그런 사람으로 남을 수 있었으면 하고 바랄 뿐입니다.