1. 소개 ¶
ì œ4회 í•œêµ SW 아키í…�트 대회ì—�서 기조연설ì�„ 위해 방한한 Joseph Yoderê°€ í•œêµ XP 모임(http://xper.org )ì�˜ 여러분들ì�„ 위해 준비한 ìž�리입니다. ë¦¬íŒ©í† ë§�, 테스팅, 패턴 등ì�„ ì£¼ì œë¡œ 간단하게 ì�´ì•¼ê¸°í•˜ê³ í† ë¡ ì�„ í• ì˜ˆì •ìž…ë‹ˆë‹¤. 특히 패턴쪽ì—� 경험ì�´ ë§Žìœ¼ì‹ ë¶„ì�´ì‹œë�¼, 패턴 ì €ìž‘, 패턴 ìš´ë�™ì�˜ 문화 등ì—� 대해서ë�„ ì�´ì•¼ê¸°ë¥¼ 해주시기로 했습니다. 장소대여비(í† ì¦ˆ)를 위해 1ì�¸ë‹¹ 약 1~1.5ë§Œì›� 내외ì�˜ 회비를 현장납부하셔야 합니다. 좀 ë�” ì•„ë‹´í•˜ê³ íŽ¸ì•ˆí•œ ìž�리를 위해 20ì�¸ ì�´í•˜ì�˜ 소수만 ì„ ì°©ìˆœìœ¼ë¡œ 받습니다. ê°•ì—°(ì˜�ì–´)ì—� 대한 통ì—ì�€ ì œê³µë�˜ì§€ ì•Šê³ , í† ë¡ /질답 시간ì—�는 순차 통ì—ì�´ ì œê³µë�©ë‹ˆë‹¤.
2. 프로그램 ¶
- 세미나 ë‚´ìš©ì�„ ì •ë¦¬í•´ 주세요
- 질문ë�„ ì •ë¦¬í•´ 주면 ì¢‹ê² ë„¤ìš”
- 세미나 ê´€ë ¨ ìž�료
3.1. 김수경 ¶
- Worse is better�는 �� ��깊었다.
- 너무 당연하게 TestDrivenDevelopmentë�¼ë©´ 테스트부터 ìž‘ì„±í•´ì•¼í•œë‹¤ê³ ìƒ�ê°�í•˜ê³ ìžˆì—ˆëŠ”ë�° TDDê°€ 반드시 TestFirstDevelopmentì�¼ í•„ìš” 없다는 ë§�ì�„ ë“£ê³ ë¨¸ë¦¬ë¥¼ 얻어맞ì�€ 것 같았다. 테스트를 ì–¸ì œ 작성하는지가 중요한 게 아니ë�¼ 테스트를 통해 ë¹ ë¥´ê²Œ 피드백ì�„ 얻는 것ì�´ 중요.
- Floss Refactoring. 다ì�Œì—� ë¦¬íŒ©í† ë§�해야지, ì–¸ì œ ë‚ ìž¡ê³ ë¦¬íŒ©í† ë§�해야지가 아닌 í•ìƒ� ê·¸ 때 í• ìˆ˜ 있는 ë¦¬íŒ©í† ë§�ì�„ 하ìž�.
- Naming� 중요하다.
- 질문ì�„ ë�” 효과ì �으로 하는 법ì�„ ì�µížˆìž�.
3.2. 김준ì„� ¶
Joseph Yoder와ì�˜ 만남. ì‹ ì„ í–ˆë‹¤ë©´ ì‹ ì„ í–ˆë‹¤ì�¼ê¹Œ. ì�´ë ‡ê²Œ ë¹ ë¥¸ 외êµì�¸ì�˜ 아키í…�ì³�설명ì�€ 들어본ì �ì�´ 없다. Patternì�˜ ê°•ìž� GoF와 ê°™ì�´ 시초를 ê°™ì�´ 했으며 ì�˜ë£Œ 분야 소프트웨어 ì œìž‘ì—� ì°¸ì—¬í•˜ê³ ìžˆë‹¤ê³ í–ˆë‹¤.
프로그램ì�€ ìž�기소개, ë¦¬íŽ™í† ë§�ì�˜ 중요성, 기본ì �ì�¸ ë¦¬íŽ™í† ë§� 기법, Agileê³¼ ë¦¬íŽ™í† ë§�ì�˜ ìƒ�ê´€ 관계, QnA, QnA중 Josephì�´ 쓰는 기법ì—� 관한 설명 으로 ì�´ë£¨ì–´ì¡Œë‹¤.
처ì�Œì—� ë�”러운 코드를 뜻하는 Big Ball of Mudì—� 대해 얘기했는ë�° 첨ì—�는 못알아듣다가 í…�사스ì—�서 ë•…ê°’ì�´ 비싸서 ë©‹ì§„ 아키í…�ì³�로 높게 ì§€ì�€ 빌딩과 얽기설기 있는 브ë�¼ì§ˆì�˜ íŒ�ìž�ì´Œì�„ ë³´ê³ ê¹¨ë‹¬ì•˜ë‹¤. 나는 ê·¸ì € 메모리ë�„ ë§Žì�´ì“°ê³ 비싼 ë•…ê°’ì�„ 주는곳ì—�서 쓰지못하는 íŒ�ìž�ì´Œ 짓는 사람ì�´ë�¼ê³ . ì 장 ë•…ê°’ ì �게 나가게 ì§‘ì�„ ì˜¬ë ¤ì•¼ì§€.
ë¦¬íŽ™í† ë§� 기본 기법ì—� 관해서는 기본ì �으로 Renameê³¼ 함수 ë¶„í• ë“±ì�„ Martin Fowlerì�´ ì§€ì�€ Refactoringì±…ì�„ 통해 ì•Œìˆ˜ìžˆë‹¤ê³ í–ˆë‹¤ ì�´ëŸ¬í•œ ë¦¬íŽ™í† ë§�ì�„ ì�´ìš©í•˜ì—¬ ì²ì†Œí• 수 ìžˆê³ ë¦¬íŽ™í† ë§�ì�€ ì¤‘ìš”í•˜ë‹¤ê³ í–ˆë‹¤. ì�´ê±° 좋군. ë”± 들ì�€ ìƒ�ê°�. ìš°ì„ ë¦¬íŽ™í† ë§�í• ë•ŒëŠ” ì�´ë¦„ì�´ ìµœìš°ì„ ì �으로 ë‹¤ë£¨ì–´ì ¸ì•¼í•œë‹¤ê³ í–ˆëŠ”ë�° 가장 설명하기 ì¢‹ê³ ë“£ê¸°ë�„ 편했ë�˜ 부분ì�´ë‹¤. ê·¸ ì�´ìœ 는 ì�´ë¦„부터가 단축ì�´ë©´ 못알아먹기 때문ì—�~~~!! ì�´ë�¼ê³ 했다. 그래서 나는 앞으로 길ë�”ë�¼ë�„ ì�˜ë¯¸ê°€ ë�˜ëŠ” 단어를 쓰기로 결심했다. 괜히 ì�´ë¦„ 단축시키지 ë§�ìž�ê³ .
ì�¼ë‹¨ 코드 컨스트ëŸíŠ¸ë¥¼ í• ë•ŒëŠ” Facade and Wrapper Patternì�„ ì�´ìš©í•´ì„œ ë°©ì�„ ì²ì†Œí•˜ê³ 시작하ë�¼ê³ 하는것ë�„ 보았다. 하긴 ì�´ë ‡ê²Œí•˜ë©´ 다른것ì—� ìƒ�ê´€ ì—†ì�´ 쓸수 ìžˆê² êµ°? ì�´ë�¼ê³ ìƒ�ê°�했다.
Test기법ì—� 관해 캔트백ì�˜ 예를 들며 ë§�해줬는ë�° 코드를 만들때는 ë�˜ê²Œí•˜ê³ , ì™„ì„±í•˜ê³ , 최ì �화시키는 순서로 만들ë�¼ê³ 했다. 그래서 난 ë�”럽게 ìš°ì„ ë�Œì•„가게 ì§ ë‹¤. ê³ ìœ„ì•ˆí–ˆë‹¤. Testê°€ ë�˜ê²Œ í•˜ê³ Refactoringì�„ í•˜ê³ ë‹¤ì‹œ ë�Œì•„가게 í•˜ê³ . 순환관계를 다시 보기ë�„했다. ê·¸ë ‡ê²Œ 하면 ì˜�í–¥ì�´ ë�œê°€ê³ 잘 ë�Œì•„ê°€ê² ì§€? ë�¼ê³ ìƒ�ê°�했다.
Refactoringê³¼ Patternì�€ 누가 누구ì—� ì†�한 관계가 아니ë�¼ì„œ ì �ì ˆížˆ ì�¨ì•¼í•œë‹¤ê³ 했다. êµ�ì§‘í•©ì�´ì—ˆë‹¤ 그림ì�€. 그래 ì �ì ˆížˆ ì�¨ì•¼ì§€ë�¼ê³ ìƒ�ê°�했다.
ê°•ì¡°í–ˆë�˜ê²ƒì�€ Agileê³¼ Refactoringì�˜ ìƒ�관관계였는ë�° 둘다 얽히면 굉장한 시너지를 내기 때문ì—� 목ì �ì�€ 달ë�¼ë�„ 병행해서 ì“°ë©´ ì¢‹ë‹¤ê³ í–ˆë‹¤. Agileì�„ 지금 쓰는 사람 있ëƒ�ê³ ë¬¼ì–´ë´¤ëŠ”ë�° ì†�들기는 ë�했다. Face-to-Face, pair 프로그래ë°�. Communication 만세다! Agile기법ì—� 대해 Refactoringì—� 대해 ìž�ì‹ ì�˜ ì�´ë…�, ì�´ìƒ�ì�´ 들어간 코드를 만드는 프로그래머가 반대를 한다면 Pair프로그래ë°�ì�„ 통해 '너만ì�˜'코드가 아닌 '우리'ì�˜ 코드ë�¼ëŠ”ê²ƒì�„ ì�¸ì‹�시켜주는게 ì¢‹ë‹¤ê³ í–ˆë‹¤. ê·¼ë�° 그런사람ì�´ 있ì�„까? 여튼 경험ì—� 우러나온 대답같았다.
ì°¸ì¡°í• ì‚¬ì�´íŠ¸ëŠ” 다ì�Œê³¼ 같았다.
www.hillside.net
www.adaptiveobjectmodel.com
www.adaptiveobjectmodel.com
adaptiveobjectmodelì�€ Josephì�´ ì—°êµ¬í•˜ê³ ìžˆëŠ” 분야로 Refactoringì�˜ ìƒ�황ì—� 맞는 방법과 패턴ì�˜ 쓰임세를 ì§€ì •í•˜ëŠ” 모ë�¸ì�´ë‹¤. 현재 ì“°ì�´ëŠ” 패턴ì�„ 모ë�¸í™”해서 ì •ë¦¬í•´ì„œ í–ˆë‹¤ê³ í•œë‹¤. ì±…ì—�서나 ë³´ë�˜ê²ƒì�„ 좀ë�” ì •í™•í•˜ê³ ëª…í™•í•˜ê²Œ 근거있게 설명하는것 같았다. ê·¸ë¦¬ê³ Refactoringì�´ 필요한 ì�´ìœ ì—� 대해서는 ì‹¤ì œë¡œ ì�´ë ‡ê²Œ 하면 성공ì�„ 하기 때문ì—� ë¦¬íŽ™í† ë§�ì�„ 하는것ì�´ ì¢‹ë‹¤ê³ í–ˆëŠ”ë�° ì�´ê²ƒì�€ 다른것ì—� 비해 약한 근거ë�¼ê³ 했는ë�° ê·¸ ì�´ìœ 는 ë¦¬íŽ™í† ë§�ì�„ 안한 ë�”러운 코드ë�„ 성공ì�„ 하기 때문ì�´ë�¼ê³ 했다. 하지만 ìž�ì‹ ìžˆê²Œ ë§�하ìž�ë©´ ë¦¬íŽ™í† ë§�ì�„ 하는것ì�€ ì¢‹ë‹¤ê³ í–ˆë‹¤.
변화 -> ì¶”ìƒ�í™” ì�´ê³ ë¦¬íŽ™í† ë§�ì�´ 잘못ë�¬ì�„ 경우 ê·¸ 결과를 뒤집기는 좀 íž˜ë“¤ë‹¤ê³ í–ˆë‹¤. 패턴ì�„ 알면 장ì �ì�´ 많단다. 초보ìž�ê°€ 패턴ì�„ 아는척 하면 다친단다. 테스팅과 패턴ì�„ 초보ìž�ê°€ 하면 좋다. Refactoringì�„ 좀ë�” ìž˜í• ë ¤ë©´ 첫 걸ì�Œì�€ Rename부터.. ì—„ì²ë‚œ 프로그래머는 만드는것ì�´ 패턴으로 만들어질 수 있지만 대부분 ê·¸ë ‡ì§€ ì•Šë‹¤ê³ í•œë‹¤. 그러므로 ë¦¬íŽ™í† ë§�ì�„ 통해 수준ì�„ 높ì�´ëŠ” í›ˆë ¨ì�„ 해놓는것ì�´ ì¢‹ë‹¤ê³ í•œë‹¤. ê·¸ë ‡ê²Œ 하면 ì�˜ì‹�하지 않아ë�„ ë�œë‹¨ë‹¤.
여러모로 Refactoringì—�서 나오는 Patternê³¼ Holubì�´ 주장하는 Design Pattern과는 ë§Žì•˜ê³ ì˜†ì—�서 계ì†� 번ì—해주시는 ì°½ì¤€ì„ ë°°ë‹˜ì�„ 보면서 ì°¸ 나ë�„ ì˜�ì–´ 듣기가 녹슬었구나 하는 ìƒ�ê°�ì�´ 들었다. FPSì—�서 ì˜�어를 배워ë´�야하나. 여러사람ì�´ 다양하게 ìƒ�ê°�하는 Refactoringê³¼ Patternì—� 대해 다시한번 좀ë�” ì—°êµ¬í• ìƒ�ê°�ì�´ë“œëŠ” 시간ì�´ì—ˆë‹¤.
- 후기 ì •ë§� 잘 쓰셨네요. ã„·ã„·ã„· 후기 ì“´ 것만 ë´�ë�„ ë”ê°€ 얻는 ëŠ�낌ì�´ 들 ì •ë�„입니다. ë�˜ê²Œ í•˜ê³ ì™„ì„±í•˜ê³ ìµœì �í™” 하는 ê±´ ë�°ë¸”스ì—�서 들었ë�˜ ì‹ ê²½ 쓸 ì�¼ì�„ 최소한으로 줄ì�´ë�¼ëŠ” 것과 약간 ë‹®ì�€ 것 같습니다. 시작부터 최ì �ì�˜ 코드를 ì§œë ¤ê³ í•˜ëŠ” 것ì�€ 한 번ì—� 너무 í�° ì�¼ì�„ í•˜ë ¤ëŠ” 것 같네요. í�‰ì†Œì—� ê·¸ë ‡ê²Œ 연습ì�„ í•´ ë‘�ë©´ 나중ì—�는 처ì�Œë¶€í„° 조금 ë�” 나ì�€ 코드를 짤 수 ìžˆê² ì§€ìš”. - 서민관
3.4. 서지혜 ¶
- '방한기ë…�번개모임'ì�´ë�¼ê³ í• ê±¸ 그랬나
- 쓰다가 ë‚ ì•„ê°€ì„œ ì�˜ìš•ì�´ 떨어지는군..
- (들린) 단어 ��우드
- 패턴ì�„ ì�´ìš©í•œ ë¦¬íŒ©í† ë§�
- big ball of mud
- facade, wrapper 패턴등ì�„ ì�´ìš©í•´ ì§€ì €ë¶„í•œ 구현ì�„ 숨길 수 있다!
- facade, wrapper 패턴등ì�„ ì�´ìš©í•´ ì§€ì €ë¶„í•œ 구현ì�„ 숨길 수 있다!
- �아탑� 설계
- agile is good for refactoring, ì• ìž�ì�¼ì�„ 사용하면 설계ë�„ ë¦¬íŒ©í† ë§�í• ìˆ˜ 있다.
- selfish class
- throwaway code. ì •ë§� 한번만 ì“°ê³ ë²„ë¦°ë‹¤. 다시는 ë�Œì•„ë³´ì§€ ë§�아야한다.
- merciless deadline
- 변화ì�˜ ì†�ë�„. 가장 ëŠ�린건 platform <-> 가장 ë¹ ë¥¸ê±´ data
- refactoring : deciplined technique
- Internal structure
- External behavior
- Internal structure
- TDD? TFD?
- Test Driven Develope
- Test First Develope
- êµ�ì¡°ì �ì�¸ TFD X
- 테스트는 구현한 기능ì�´ ì�˜ë�„한대로 ë�™ìž‘한다는 것ì�„ ê²€ì¦�하는 방법임. 테스트를 통해 ì �ì ˆí•œ 피드백ì�„ ë°›ì�„ 수 있다면 ë�œë‹¤.
- Test Driven Develope
- ë¦¬íŒ©í† ë§� 종류ì—� ë”°ë�¼ 테스트ì—� 미치는 ì˜�í–¥ë�„
- RENAME METHOD : LOW
- CHANGE METHOD or STRATEGY : MEDIUM
- ìƒ�ì†�관계 분리, í”„ë¡œì‹œì € ë””ìž�ì�¸ë³€ê²½, ë�„ë©”ì�¸ 분리, 계층구조 추출 : HIGH
- RENAME METHOD : LOW
- 패턴ì�„ ì�´ìš©í•œ ë¦¬íŒ©í† ë§�









