세번째 인자의 리팩토링 센스 쩝니다.
date3 !!! 3 쿠쿵!!!!
무서운 이클립스 개발자들입니다.

백기선님이 잘 번역하신 글입니다.
http://www.ibm.com/developerworks/kr/library/j-ap07088/index.html?ca=drs-kr 
findbugs를 통해서 코드의 취약성을 발견할 수 있었습니다.

CheckStyle, PMD, JDepend 등의 도구는 코드의 유지보수성과 가독성, 확장성을 떨어뜨리는 구문을 찾아줍니다.
이러한 도구들의 사용법과 리팩토링에 대한 글이 올라왔습니다. 아울러 글에서는 Switch구문을 polymorphism으로 리팩토링하기, 중복코드 줄이기, 긴 메소드(큰 클래스) 경량화하기, 너무 많은 import 줄이기 등에 대한 예들이 나옵니다.

참고하시면 좋은 애플리케이션 만드는데 큰 힘이 될 것입니다.
박찬욱님이 멋있게 스크린캐스트로 진행한 동영상입니다.

http://www.ibm.com/developerworks/kr/library/tutorial/os-dw-os-eclipse-europatimesave.html

첫번째 영상: 이클립스 유로파 탐험하기
두번째 영상: IDE 설정하기
세번째 영상: 리팩토링

순서로 되어있으니 이클립스 처음 사용하는 분들에게는 요긴할 것입니다.
ganymede 와 europa 에서 공통되는 부분을 설명하고 있으니 버전 걱정하지 않아도 됩니다.
어려운 단어 등장했습니다. 직교성. Orthogonality. 공업수학시간에 잠깐 배운 기억이 스쳐지나갑니다. 갑자기 이 단어가 요즘 제 뇌를 후벼팝니다. Working Effectively With Legacy Code 책의 후반부에 나오는 단어인데, 코드 리팩토링의 결정판은 궁극의 직교성이라고 얘기합니다.

말을 좀 쉽게 풀죠.
3차원 그래프라고 생각하시면 됩니다. x축, y축, z축이 있습니다. 왼쪽 그래프에서 보면 성별, 생일, 출생지가 있습니다. 세 기준이 각자의 영역에서 사람의 특성을 설명해주고 있죠. 각 기준은 독립적입니다. 다른 기준에 종속적이지 않습니다.
사용자 삽입 이미지
image from: http://www.itcon.org/1997/2/paper.htm

이것을 소스코드에 빗대어 설명하면 이렇습니다.
웹 페이지에는 HTML, CSS, Javascript가 있습니다. 각기 역할이 있죠. HTML은 컨텐츠 데이터, CSS는 렌더링 스타일, Javascript는 Behavior 즉 동작입니다. 각기 독특한 영역이 있는데, 이 코드를 분리해서 관리하는 것이 직교성이 있다고 얘기할 수 있습니다. 세 가지가 만나는 접점은 id 입니다.

이해가 좀 가시나요?

이럴 필요가 있는 것은 직교성이 무너졌을 때, 세 가지 코드는 뒤죽박죽 됩니다. 스타일 고치는데 Javascript 고쳐야하고, 동작을 고치는데, HTML과 CSS코드가 헤집어진다면 코드가 뒤섞여 있다는 뜻입니다.

휴~

어렵죠.

프로그래밍 코드의 영역에서도 마찬가지입니다. 비단 세 가지 축(3차원)만 있는 것이 아니라 다차원(Multi-demension)의 코드를 짤 때도 이런 컨셉으로 분리해서 짠다면 코드의 관리포인트를 분리해서 생각할 수 있습니다. 리팩토링이 바라보는 관점과 일견 같다고 할 수 있습니다.

관련 : Open/Closed Principle

참고: Working Effectively With Legacy Code, 285~286p
온실에서 키운 화초는 약하다고 합니다. 프로그램 개발환경 중에서 가장 온실같다고 할까요, 그런 게 있습니다. 바로 브라우저의 HTML 렌더러입니다. 가장 마음이 넓은 실행기라서 마크업이 깨져도 알아서 대체로 잘 보여주는 편입니다.

때문에 웹 개발자들은 프로그래머 취급도 못받고 허드렛일꾼으로 대하던 시절이 있었습니다.
하지만 그런 유약한 개발습관에서 벗어나 조금 깐깐해질 필요가 있는 것 같습니다.
자바원의 북스토어에서 본 책 중 인상적인 것 하나가 Refactoring HTML이었습니다.

IBM DW에도 비슷한 류의 글이 올라왔군요.

유효성 검사는 여러분의 페이지에 "예측 가능한"이라는 도장을 찍는 방법이다. 태그를 적절히 사용하면, 페이지는 구조적으로 건전하며, 사용과 탐색도 쉽다.

from: http://www.ibm.com/developerworks/kr/library/wa-inherit1/

프로그래머들의 애매한 결과에 대한 삽질은 누구나 겪는 일이지만 HTML 개발자들이 가장 심하다고 말하면 지나친 생각일까요?

유지보수하는 입장에서 HTML을 다루는 자세와 기법에 대해서 도움이 되는 내용이었습니다.

좋아하는 기획자 중 한 부류는 기획서가 깐깐해서 처음에 답답해 보이지만 프로젝트 후반에 말바꾸지 않고 신뢰감있게 독려하는 분들입니다. 웹개발도 깐깐하게 바꿔보는 것이 어떨까요.

2008년 제9회 JCO 자바컨퍼런스에서 발표할 내용입니다.
대략의 줄거리는 다음과 같습니다.

레거시 코드 관리 전략
허광남
GS이숍

목차
레거시 코드란?
남이 짠 코드 빨리 알아보기
리팩토링 방법
테스트케이스라굽쇼?
인터페이스의 역할
복사할 것인가 상속할 것인가
기능 추가 방법
팀역량

수많은 방법론 중에
개발 방법론은 넘쳐나지만 유지보수에 관한 방법론은 어디에?
소프트웨어의 변경주기는 짧아지고 있다.
웹 비즈니스 애플리케이션은 기민하고 안정적으로 변경하는 것이 관리의 목표

레거시 코드
누군가 나에게 맡겨놓은 코드
자기가 직접 짜지 않은 누군가가 만들어 놓은 코드
많은 의문의 그림자와 중압감을 내포한 코드
얽히고 설킨, 아둔하게 짜놓은, 갈아엎고 싶지만   그럴 자신이 안 생기는 코드

레거시 코드
기능 하나 추가하려면 몇 일 밤 새게 만드는 코드
어느 누구도 선뜻 나서지 않는 코드
손을 대면 댈수록 나락으로 빠져버리는 코드
“차라리 날 죽여줘”라고 절규하게 만드는 코드
개선한다는 생각 자체가 몸서리처지는 코드

남이 짠 코드 빨리 알아보기
들여쓰기 (Indent)
Code Formatter
IDE 코드 네비게이션 기능
- F3
- ctrl+K
- 형광펜

남이 짠 코드 빨리 알아보기
팀원간 용어의 일관성
변수명, 함수명의 기능에 따른 변경
- buy() -> order()
남이 짠 코드 빨리 알아보기
프레임워크 사용시 명명규칙은 절대적
- /order/order.jsp
- /js/order/order.js
- /css/order/order.css
- OrderController.java
- OrderService.java
Open Resources(ctrl+shift+R)
Convention over Configuration

리팩토링 방법
Re + Factor + ing
- 소스(Factor)의 재(Re)구성(ing)
Martin Fowler
- Refactoring, 1999
- 외부 동작은 바꾸지 않으면서    내부 구조를 개선하는 방법

사연 많은 JSP 리팩토링
JSP 파일 하나에 11,000 라인의 코드
7년간 산전화수전화 다 겪은 전설의 코드
그와 결부된 사촌형제 코드들 각각 6,7천라인
1차 프로젝트 Java와 Javascript의 분리
자바스크립트의 분리
객체를 이용하기

자바스크립트의 분리
함수에 파라미터를 통해 전달

자바스크립트의 분리
JSP, Javascript 스파게티 분리
리팩토링 고려사항
소스의 증가
- 선별적 js로딩으로 효율화
보안이슈
- 권한 및 로직 유효성 체크는 이중화 또는 서버단으로 이동
JS캐쉬 이슈
- 자주 변경되는 내용은 jsp 안에서 처리
- js파일에 날짜별 버전
서버단과 클라이언트단 혼재된 로직
- 로직을 단순화하거나 jsp에서 처리하고 분리하지 않는다.

JSP,JS 분리 효과
서버단의 속도 개선효과
  1005.352223 -> 757.8979948

javascript를 잘 하는?전문가가??js 파일을 따로 최적화 작업할 수 있다. (관리 포인트의 전문성 확보)

js 변경시 기존 jsp를 수정하지 않아도 된다.

전체 소스의 가독성과 이해력 향상 (jsp, js)

인터페이스의 역할

복사할 것인가 상속할 것인가

테스트케이스라굽쇼?

Edit & Pray
        vs
Cover & Modify

Backup, Cover Fire!
Acrobatic Net

기능 추가 방법

팀역량
깨진 유리창 비유
코드리뷰, 짝 프로그래밍
- 버그의 최소화
- 코딩 공감대 확장
- 더 이상 겁나지 않는 휴일 전화
낳은 정보다는 기른 정

정리
레거시 코드는 비운의 코드입니다.
좋은 유모를 만나서 제대로 리팩토링하면 버그 없고, 건강하게 자랄 수 있습니다.
함께 키우려면 코드 리뷰, 짝 프로그래밍 등을 이용하면 됩니다.
잘 키운 레거시 코드 하나, 열 개발자 안 부럽다

참고자료
Working Effectively With Legacy Code, Michael C. Feathers, Prentice Hall, 2005
리팩토링, 마틴 파울러, 대청, 2002
소프트웨어 공학의 사실과 오해, Robert L. Glass, 인사이트, 2004
GS이숍 주문리팩토링 보고서, 김현,김현기, GS이숍, 2008

CCL


범죄의 재구성이라는 영화가 있죠. 프로그램 소스의 재구성이 Refactoring 입니다. Re + factor + ing 이죠.
마틴파울러 아저씨의 책이 유명한데요. 이 때부터 리팩토링이 중요한 이슈로 인정받게 되었습니다.
정리되지 않은 소스는 변경이나 기능 추가시 부작용이 많이 일어나게 됩니다. 이를 최소화하고 다룰 수 있는 정돈된 상태를 유지하기 위해서 리팩토링을 하는 것이죠.

음식이 입에 잔뜩 있는데, 더 먹어야 된다고 입안에 쑤셔넣을 수는 없는 것이죠. 물도 마시고, 입안을 정리해야 추가로 먹을 맛있는 음식을 제대로 먹을 수 있습니다. 소스도 마찬가지인데 급하다고 정리하지 않고, 코드를 쑤셔 넣으면 탈납니다.

리팩토링. 소중한 프로그램이라면 중요한 것입니다.

ECLIPSE REFACTORING

  1. Rename
  2. Move
  3. Change Method Signature
  4. Extract Method
  5. Extract Local Variable
  6. Extract Constant
  7. Inline
  8. Convert Anonymous Class to Nested
  9. Convert Member Type to Top Level
  10. Convert Local Variable to Field
  11. Extract Superclass
  12. Extract Interface
  13. Use Supertype Where Possible
  14. Push Down
  15. Pull Up
  16. Introduce Indirection
  17. Introduce Factory
  18. Introduce Parameter Object
  19. Introduce Parameter
  20. Encapsulate Field
  21. Generalize Declared Type
  22. Infer Generic Type Arguments
  23. Migrate JAR File
  24. Create Script
  25. Apply Script
  26. History

from: http://127.0.0.1:52091/help/ntopic/org.eclipse.jdt.doc.user/reference/ref-menu-refactor.htm (eclipse 시동하고 보입니다.)

Eclipse Code Refactoring

toz 강남대로점

2007/11/01(목) 19:30~21:30 (2시간)

10,000원

15명


메일로 신청받습니다.

kenu 골뱅 okjsp.pe.kr


이름:

닉네임:

이메일:

휴대폰:


간만입니다.

+ Recent posts