Contents
- 1. 소프트웨어 설계ì�˜ ê³ ê³ í•™
- 2. OO와 디��패턴 기초 다지기
- 3. ì�¸í„°íŽ˜ì�´ìŠ¤ë¡œ 프로그래ë°�하기 ê·¸ë¦¬ê³ ëª‡ ê°œì�˜ ìƒ�성 패턴
- 4. ��프 게임
- 5. 소형 ë�°ì�´í„°ë² ì�´ìФ 구현하기
1.1. 설계 ì›�ì¹™ ¶
- p.1
- 복싱ì—�서는 ìŠ¤íŠ¸ë ˆì�´íЏ, ìž½, í›…, ì�´ 세가지 펀치를 기반으로 다른 ëª¨ë“ ì¢…ë¥˜ì�˜ 펀치가 ë‚˜ì˜¨ë‹¤ê³ í•œë‹¤. ~~~ ì�´ëŸ¬í•œ 기본 ìž�세가 튼튼하다면 그만í�¼ 다른 펀치를 배우는 ë�°ë�„ ì§„ìž… 장벽ì�´ 낮아지기 때문ì�´ë‹¤.
- 스í�¬ì¸ 를 사용해서 ë¹„ìœ ë¥¼ 하는건 쉽게 ì�´í•´ëŠ” ë�˜ëŠ”ë�°, í•ìƒ� 별로 재미없어. - 김준ì„�
- 다른 종류지만 ê²€ë�„는 ë‚´ë ¤ì¹˜ê¸° ìž�세만 천번ì�¸ê°€ ì—°ìŠµí•œë‹¤ê³ í•©ë‹ˆë‹¤. 하루ì—�(만화책ì�´ì—ˆì�Œã…‹ã…‹) 그만í�¼ 기본기가 중요하다는 ë§�ì�´ê² ì£ - 서지혜
- 스í�¬ì¸ 를 사용해서 ë¹„ìœ ë¥¼ 하는건 쉽게 ì�´í•´ëŠ” ë�˜ëŠ”ë�°, í•ìƒ� 별로 재미없어. - 김준ì„�
- 복싱ì—�서는 ìŠ¤íŠ¸ë ˆì�´íЏ, ìž½, í›…, ì�´ 세가지 펀치를 기반으로 다른 ëª¨ë“ ì¢…ë¥˜ì�˜ 펀치가 ë‚˜ì˜¨ë‹¤ê³ í•œë‹¤. ~~~ ì�´ëŸ¬í•œ 기본 ìž�세가 튼튼하다면 그만í�¼ 다른 펀치를 배우는 ë�°ë�„ ì§„ìž… 장벽ì�´ 낮아지기 때문ì�´ë‹¤.
1.2. ì�˜ì¡´ê´€ê³„ ¶
- p.3
- 슬프게ë�„ 개발ìž� 입장ì—�서는 ì�˜ì‚¬ ê²°ì •ì—� 참여하여 변경ì—� 대한 요구를 막지 못하는 것ì�´ 대부분ì�´ë‹¤.
- 요구사í•ì�˜ 변경같ì�€ê²½ìš° 어쩔수 없지만 ê¸°ìˆ ì �ì�¸ 부분ì�´ë�¼ë©´ 개발ìž�ê°€ 가장 힘있지 않나? - 김준ì„�
그건 ì�¸ë�„개발ìž�ë§Œ..ì›�래는 ì�˜ì‚¬ê²°ì •ì�€ 가장 ë§Žì�€ ì •ë³´ë¥¼ 가진 사람ì�´ ë‚´ë ¤ì•¼í•˜ëŠ”ë�°, ê¸°ìˆ ì—� 대한 ê²°ì •ê¶Œì�„ ê¸°ìˆ ê³¼ 거리가 먼 관리ìž�등ì�´ 내리는 경우가 ìžˆë‹¤ê³ í•©ë‹ˆë‹¤(까ë�¼ë©´ 까 ì‹�으로). ì�´ë•Œì�˜ ì�˜ì‚¬ê²°ì •ê¶Œìž�는 모순ì � ìƒ�황ì—� 처해있ì�„ 거란 글ì�„ 봤는ë�°ã…‹ã…‹ 1. ê¸°ìˆ ì—� 대한 ì§€ì‹�ì�´ ì �거나 ê±°ì�˜ì—†ë‹¤. 2. ì§€ì‹�ì�€ 없지만 ê¸°ìˆ ì—� 대한 í™•ê³ í•œ 입장ì�„ ê°€ì§€ê³ ìžˆë‹¤. - 서지혜
- 힘ì�´ë�¼ëŠ” ê±´ ê³ ê°�ê³¼ ê²½ì˜�ì§„ì—�게 있ì�„ê±¸ìš”ã… ã… ã… ã… ì�¼ê°œ 개발ìž�는 수드ë�¼... - 김수경
- 요구사í•ì�˜ 변경같ì�€ê²½ìš° 어쩔수 없지만 ê¸°ìˆ ì �ì�¸ 부분ì�´ë�¼ë©´ 개발ìž�ê°€ 가장 힘있지 않나? - 김준ì„�
- 슬프게ë�„ 개발ìž� 입장ì—�서는 ì�˜ì‚¬ ê²°ì •ì—� 참여하여 변경ì—� 대한 요구를 막지 못하는 것ì�´ 대부분ì�´ë‹¤.
2.1. 패턴 vs ì�´ë””ì—„ ¶
- p.22
- ì�´ë””ì—„ì�€ ì�¼ìƒ�ì �으로 사용하게 ë�œ 패턴ì�´ë‹¤.
- 1980년대 ì´ˆ C언어가 왕ì�´ì—ˆì�„ ë¬´ë µ ìƒ�ì†�ì�€ 하나ì�˜ ë””ìž�ì�¸ 패턴ì�´ì—ˆë‹¤.
- 지금ì�€ ì�´ë””ì—„ì�´ ë�˜ì–´ 누구나 아무 ìƒ�ê°� ì—†ì�´ 사용하는 ìƒ�ì†�ì�´ 패턴ì�´ì—ˆë‹¤ëŠ” 사실ë�„ ìž¬ë¯¸ìžˆê³ C언어가 왕ì�´ì—ˆë‹¤ëŠ” 표현ë�„ 재미있네요. - 김수경
- 지금ì�€ ì�´ë””ì—„ì�´ ë�˜ì–´ 누구나 아무 ìƒ�ê°� ì—†ì�´ 사용하는 ìƒ�ì†�ì�´ 패턴ì�´ì—ˆë‹¤ëŠ” 사실ë�„ ìž¬ë¯¸ìžˆê³ C언어가 왕ì�´ì—ˆë‹¤ëŠ” 표현ë�„ 재미있네요. - 김수경
- 요즘� ��과 �터페�스 같� 기능� 많� 언어� 내장�어 있다. �들� �디엄� � 것�다.
- ì—� 달린 ì—ìž�주ì„�ì�„ 보니 노스 í™”ì�´íŠ¸í—¤ë“œê°€ "문명ì�´ 진보한다는 것ì�€ ì�¸ê°„ì�´ ì�˜ì‹�ì �ì�¸ ë…¸ë ¥ ì—†ì�´ ìž�ë�™ì �으로 수행하는 활ë�™ì�´ ì¦�ê°€í•˜ê³ ìžˆì�Œì�„ ì�˜ë¯¸"한다는 ì§€ì �ì�„ í–ˆë‹¤ê³ í•œë‹¤. ì�´ë””ì—„ì�€ 과연 좋ì�€ê²ƒì�¸ê°€? ì�´ë””ì—„ì�´ì•¼ë§�로 ìƒ�ê°�ì—†ì�´ ì �용하는 패턴ì�´ 아닌가? - 서지혜
- 다양한 사례ì—� ì �용해서 ì �ìš©ë�˜ê¸° ì „ë³´ë‹¤ 높ì�€ 효율ì�„ ë³´ì�¼ 수 있다는 것ì�´ 충분히 ê²€ì¦�ë�˜ì—ˆê¸° 때문ì—� ì�´ë””ì—„ì�´ ë�˜ëŠ” 것 ì•„ë‹�까요? ë¬¼ë¡ ëª¨ë“ ê²ƒì—� 100% ì �ìš©ë�˜ëŠ” ì�´ë””ì—„ì�´ëž€ 존재하지 ì•Šê² ì§€ë§Œìš”. - 박성현
- 무책임한 ìƒ�ì†�ì�€ ì˜¤ížˆë ¤ 변화ì�˜ í�¬ê¸°ë¥¼ ì¦�가시키기ë�„ 합니다. ì�´ë””ì—„ì�´ë�¼ê³ 반드시 옳ì�€ê²ƒì�€ 아닌듯ㅋㅋ - 서지혜
- 무책임한 ìƒ�ì†�ì�€ ì˜¤ížˆë ¤ 변화ì�˜ í�¬ê¸°ë¥¼ ì¦�가시키기ë�„ 합니다. ì�´ë””ì—„ì�´ë�¼ê³ 반드시 옳ì�€ê²ƒì�€ 아닌듯ㅋㅋ - 서지혜
- ì�´ë””ì—„ì�€ 가치 중립ì �ì�´ì§€. ì�´ë””ì—„ì�„ ìƒ�ê°�ì—†ì�´ ì �용하는 것ì�´ 나ì�œê²ƒì�´ê³ . - 김수경
- 오늘 얘기하면서 깨달았다. ì�´ë””ì—„ì�´ 패턴보다 ë�” 습관ì �으로 ì �용하기가 쉬울테니(패턴ì�„ 몰ë�¼ë�„ ì�´ë””ì—„ì�€ 쓸수있ì�Œ) ì—ìž�ê°€ ì €ëŸ°ë§�ì�„ ì“´ê±´ê°€ë´� - 서지혜
- 오늘 얘기하면서 깨달았다. ì�´ë””ì—„ì�´ 패턴보다 ë�” 습관ì �으로 ì �용하기가 쉬울테니(패턴ì�„ 몰ë�¼ë�„ ì�´ë””ì—„ì�€ 쓸수있ì�Œ) ì—ìž�ê°€ ì €ëŸ°ë§�ì�„ ì“´ê±´ê°€ë´� - 서지혜
- 다양한 사례ì—� ì �용해서 ì �ìš©ë�˜ê¸° ì „ë³´ë‹¤ 높ì�€ 효율ì�„ ë³´ì�¼ 수 있다는 것ì�´ 충분히 ê²€ì¦�ë�˜ì—ˆê¸° 때문ì—� ì�´ë””ì—„ì�´ ë�˜ëŠ” 것 ì•„ë‹�까요? ë¬¼ë¡ ëª¨ë“ ê²ƒì—� 100% ì �ìš©ë�˜ëŠ” ì�´ë””ì—„ì�´ëž€ 존재하지 ì•Šê² ì§€ë§Œìš”. - 박성현
- ì—� 달린 ì—ìž�주ì„�ì�„ 보니 노스 í™”ì�´íŠ¸í—¤ë“œê°€ "문명ì�´ 진보한다는 것ì�€ ì�¸ê°„ì�´ ì�˜ì‹�ì �ì�¸ ë…¸ë ¥ ì—†ì�´ ìž�ë�™ì �으로 수행하는 활ë�™ì�´ ì¦�ê°€í•˜ê³ ìžˆì�Œì�„ ì�˜ë¯¸"한다는 ì§€ì �ì�„ í–ˆë‹¤ê³ í•œë‹¤. ì�´ë””ì—„ì�€ 과연 좋ì�€ê²ƒì�¸ê°€? ì�´ë””ì—„ì�´ì•¼ë§�로 ìƒ�ê°�ì—†ì�´ ì �용하는 패턴ì�´ 아닌가? - 서지혜
- ì�´ë””ì—„ì�€ ì�¼ìƒ�ì �으로 사용하게 ë�œ 패턴ì�´ë‹¤.
2.2. ë””ìž�ì�¸íŒ¨í„´ì�´ëž€ 무엇ì�¸ê°€? ¶
- p.22
- ë¨¼ì € 패턴ì�€ 발명ë�˜ëŠ” 것ì�´ 아니ë�¼ 발견ë�˜ëŠ” 것ì�´ë�¼ëŠ” 사실ì�„ ì�´í•´í•´ì•¼ë§Œ 한다.
- 패턴ì�´ 목ì �ì�´ 아니ë�¼ ì–´ë–¤ ì�˜ë�„를 구현하기 위해 ë§Œë“ ì½”ë“œë“¤ì—�서 비슷한 패턴ì�´ 발견ë�œë‹¤ê³ 한다. - 서지혜
- 패턴ì�´ 목ì �ì�´ 아니ë�¼ ì–´ë–¤ ì�˜ë�„를 구현하기 위해 ë§Œë“ ì½”ë“œë“¤ì—�서 비슷한 패턴ì�´ 발견ë�œë‹¤ê³ 한다. - 서지혜
- ë¨¼ì € 패턴ì�€ 발명ë�˜ëŠ” 것ì�´ 아니ë�¼ 발견ë�˜ëŠ” 것ì�´ë�¼ëŠ” 사실ì�„ ì�´í•´í•´ì•¼ë§Œ 한다.
- p.23
- 그러므로 패턴ì�€ í•´ê²° 방법 ê·¸ ìž�ì²´ë�¼ê¸°ë³´ë‹¤ëŠ” í•´ê²° 방법ì�˜ ì�¼ë°˜ 구조ë�¼ í• ìˆ˜ 있다.
- 패턴ì�€ ì–´ë–¤ 류ì�˜ ë¬¸ì œë¥¼ 해결하기 위해 사용ë�˜ëŠ” ì�¼ë°˜ì �ì�¸ ê¸°ìˆ ì�´ë‹¤.
- 패턴ì�€ ì�´ì™€ ê°™ì�´ ì�¼ë°˜ì �ì�¸ í•´ê²° 방법ì�´ê¸° 때문ì—� 한 프로그램ì—�서 다른 프로그램으로 ë””ìž�ì�¸íŒ¨í„´ì�„ 복사해 붙여넣는 것ì�€ ê±°ì�˜ 불가능하다.
- 그들ì�€ 패턴 ìž�체를 패턴ì�„ 설명하기 위해 사용한 코드와 혼ë�™í•˜ê³ 있는 것ì�´ë‹¤.
- ì�´ ì±…ì�„ 안ì�½ì—ˆë‹¤ë©´ 나ë�„ 패턴과 코드를 혼ë�™í•˜ëŠ” 실수를 í–ˆì�„것같다.. 사람들ì�€ 처ì�Œ 배운것ì�„ 진리ë�¼ 여기는 경향ì�´ ìžˆê³ ë¹„íŒ�하기ë�„ 사랑하니까. "패턴ì�€ 그게아ëƒ�!! ì�´ê±°ë�¼ê³ !!" - 서지혜
- ì�´ ì±…ì�„ 안ì�½ì—ˆë‹¤ë©´ 나ë�„ 패턴과 코드를 혼ë�™í•˜ëŠ” 실수를 í–ˆì�„것같다.. 사람들ì�€ 처ì�Œ 배운것ì�„ 진리ë�¼ 여기는 경향ì�´ ìžˆê³ ë¹„íŒ�하기ë�„ 사랑하니까. "패턴ì�€ 그게아ëƒ�!! ì�´ê±°ë�¼ê³ !!" - 서지혜
- 그러므로 패턴ì�€ í•´ê²° 방법 ê·¸ ìž�ì²´ë�¼ê¸°ë³´ë‹¤ëŠ” í•´ê²° 방법ì�˜ ì�¼ë°˜ 구조ë�¼ í• ìˆ˜ 있다.
- p.24
- 현실ì—�서는 한 패턴ì—� ì°¸ì—¬í•˜ê³ ìžˆëŠ” ê°�체와 í�´ëž˜ìŠ¤ê°€ ë�™ì‹œì—� 다른 패턴ì—�서ë�„ 사용ë�˜ëŠ” 경우가 매우 많다.
- 패턴ì—� 입문한 ì§€ 얼마 안 ë�˜ëŠ” 초보ìž�ì�¼ìˆ˜ë¡� 무언가 ë©‹ì ¸ ë³´ì�´ëŠ” í�´ëž˜ìФ 다ì�´ì–´ê·¸ëž¨ì—� 관심ì�„ ì�ŸëŠ”ë�°, ë�”ìš± 중요한 것ì�€ '패턴ì�˜ ì�˜ë�„'(혹ì�€ 목ì �)와 'ë�™ì �ì�¸ í–‰ë�™ì–‘ì‹�'ì�´ë‹¤.
- 'ë�™ì �ì�¸ í–‰ë�™ì–‘ì‹�'ì�´ 무엇ì�¸ì§€ 잘 ê°�ì�´ 오지 않네요. - 김수경
- 'ë�™ì �ì�¸ í–‰ë�™ì–‘ì‹�'ì�€ 패턴ì�„ 통한 목ì � 달성ì—� ì�´ë£¨ê¸°ê¹Œì§€ í��름ì�´ 어떻게 ì�´ë£¨ì–´ì§€ëŠ”ì§€ì—� 대한것 같아 -김준ì„�
- ì €ìž�ê°€ ì •ì �구조가 아닌 ë�™ì � í–‰ë�™ì–‘ì‹�ì—� ì‹ ê²½ì�„ ì�¨ë�¼ë�¼ê³ ë§�하는거 보니 실행시간ì—� ì�¼ì–´ë‚˜ëŠ” ì–´ë–¤ 변화같ì�€ë�°.. - 서지혜
- ê°�체들ì�˜ ìƒ�호작용ì�„ ë�™ì � í–‰ë�™ ì–‘ì‹�ì�´ë�¼ 하는듯 - 서지혜
- 'ë�™ì �ì�¸ í–‰ë�™ì–‘ì‹�'ì�€ 패턴ì�„ 통한 목ì � 달성ì—� ì�´ë£¨ê¸°ê¹Œì§€ í��름ì�´ 어떻게 ì�´ë£¨ì–´ì§€ëŠ”ì§€ì—� 대한것 같아 -김준ì„�
- 'ë�™ì �ì�¸ í–‰ë�™ì–‘ì‹�'ì�´ 무엇ì�¸ì§€ 잘 ê°�ì�´ 오지 않네요. - 김수경
- 시�하면서� 안�한 �낌� 주는 방들� 살펴보면 앞으로 '�차 통�'�� 부를 패턴� 창발한다.
- ê°•ì�˜ì‹¤ì—�서 공대 냄새가 나는 ì�´ìœ 를 알았습니다. ê°•ì�˜ì‹¤ì�€ 'êµ�ì°¨ 통í’�' 패턴ì—� ì†�하지 않아요. - 김수경
- ê°•ì�˜ì‹¤ì—�서 공대 냄새가 나는 ì�´ìœ 를 알았습니다. ê°•ì�˜ì‹¤ì�€ 'êµ�ì°¨ 통í’�' 패턴ì—� ì†�하지 않아요. - 김수경
- ì�´ ì�˜ë�„를 만족시킨다면 ì–´ë–¤ êµ¬ì¡°ë“ ì�´ 패턴ì�˜ 합당한 실체화가 ë�œë‹¤.
- 현실ì—�서는 한 패턴ì—� ì°¸ì—¬í•˜ê³ ìžˆëŠ” ê°�체와 í�´ëž˜ìŠ¤ê°€ ë�™ì‹œì—� 다른 패턴ì—�서ë�„ 사용ë�˜ëŠ” 경우가 매우 많다.
- p.25
- 패턴ì�˜ 실체화는 ë””ìž�ì�¸ì�´ì§€ 코드가 아니며, 하나ì�˜ ë””ìž�ì�¸ì�€ 여러 가지 합당한 방법으로 êµ¬í˜„í• ìˆ˜ 있다.
- 패턴ì�˜ 실체화 ë°©ì‹�ì�€ 다양하지만 여러분ì�´ 좋아하는 요소만 ì�™ 뽑아 ì‚¬ìš©í• ìˆ˜ëŠ” 없다.
- 패턴ì�˜ 실체화는 ë””ìž�ì�¸ì�´ì§€ 코드가 아니며, 하나ì�˜ ë””ìž�ì�¸ì�€ 여러 가지 합당한 방법으로 êµ¬í˜„í• ìˆ˜ 있다.
- p.26
- 남서쪽 ì°½ì�€ ë‘� ê°œì�˜ 패턴 모ë‘�ì—� ì°¸ì—¬í•˜ê³ ìžˆë‹¤ëŠ” ì �ì—�서 í�¥ë¯¸ë¡ë‹¤.
- 남서쪽 ì°½ì�€ ë‘� ê°œì�˜ 패턴 모ë‘�ì—� ì°¸ì—¬í•˜ê³ ìžˆë‹¤ëŠ” ì �ì—�서 í�¥ë¯¸ë¡ë‹¤.
- p.27
- 중요한 것� 구조를 통해서만 패턴� 파악하는 것� 불가능하다는 사실� �해하는 것�다.
- 패턴ì�„ ì°¾ì•„ë‚´ë ¤ë©´ 아키í…�처ì�˜ ì�˜ë�„를 í�¬í•¨í•œ 문맥 ì •ë³´ê°€ 필요하다.
- ìƒ�ê°� ì—†ì�´ 패턴ì�„ ë³µì‚¬í•˜ê³ ë¶™ì—¬ë„£ëŠ” 것ì�€ 마ì�ŒëŒ€ë¡œ 낙서를 한 ë’¤ ë©‹ì§„ 그림ì�„ 주장하는 것과 ê°™ì�€ 우매한 것ì�´ë‹¤.
- 패턴ì�€ ë””ìž�ì�¸ìœ¼ë¡œ 실체화 ë�˜ê³ ë””ìž�ì�¸ì�€ 구현으로 실체화 ë�œë‹¤.
- 구현ì�€ ì¶”ìƒ�í™” 시켜 ë””ìž�ì�¸ì�´ë�˜ê³ 그것ì�„ ì¶”ìƒ�화시켜서 패턴ì�´ë�œë‹¤ - 김준ì„�
- 구현ì�€ ì¶”ìƒ�í™” 시켜 ë””ìž�ì�¸ì�´ë�˜ê³ 그것ì�„ ì¶”ìƒ�화시켜서 패턴ì�´ë�œë‹¤ - 김준ì„�
- 중요한 것� 구조를 통해서만 패턴� 파악하는 것� 불가능하다는 사실� �해하는 것�다.
2.3. 패턴, 무엇ì�´ 좋ì�€ê°€? ¶
- p.28
- 즉 패턴ì�„ 사용하지 ì•Šê³ ì„¤ëª…í•˜ëŠ” 것보다 훨씬 ì§§ê³ í›¨ì”¬ 명확했다.
- 즉 패턴ì�„ 사용하지 ì•Šê³ ì„¤ëª…í•˜ëŠ” 것보다 훨씬 ì§§ê³ í›¨ì”¬ 명확했다.
- p.29
- 패턴ì�€ 커뮤니케ì�´ì…˜ì�„ ê·¹ì �으로 í–¥ìƒ�시켜주는 ìœ ê¸°ì � í”„ë ˆìž„ì›Œí�¬ë¥¼ ì œê³µí•˜ë©° ê²°êµ ì�´ê²ƒì�´ ë””ìž�ì�¸ì�˜ ëª¨ë“ ê²ƒì�´ë‹¤.
- 하지만 커뮤니케ì�´ì…˜ì�˜ 당사ìž�들ì�´ 모ë‘� 패턴ì�„ ì•Œê³ ìžˆë‹¤ëŠ” ì „ì œ 하ì—� 가능한 ì�¼. - 김수경
- 하지만 커뮤니케ì�´ì…˜ì�˜ 당사ìž�들ì�´ 모ë‘� 패턴ì�„ ì•Œê³ ìžˆë‹¤ëŠ” ì „ì œ 하ì—� 가능한 ì�¼. - 김수경
- 패턴ì�€ 커뮤니케ì�´ì…˜ì�„ ê·¹ì �으로 í–¥ìƒ�시켜주는 ìœ ê¸°ì � í”„ë ˆìž„ì›Œí�¬ë¥¼ ì œê³µí•˜ë©° ê²°êµ ì�´ê²ƒì�´ ë””ìž�ì�¸ì�˜ ëª¨ë“ ê²ƒì�´ë‹¤.
2.4. ë””ìž�ì�¸ì—�서 패턴ì�˜ ì—í• ¶
- p.29
- 패턴ì�€ 구현ì—� 대해 ìƒ�ê°�하기 ì‹œìž‘í• ë•Œ 등장하게 ë�œë‹¤.
- ê±´ì¶• 계íš�ì�€ ëª¨ë“ ì¶•ì¡° 새부 사í•ì�„ 설명하지는 않는다. 즉 ì–´ë””ì—� ë²½ì�´ 있어야 í• ì§€ë¥¼ 보여줄 ë¿� ë²½ì�„ 어떨게 만들어야 하는지ì—� 대해 설명하지는 않는 것ì�´ë‹¤.
- 패턴ì�€ 구현ì—� 대해 ìƒ�ê°�하기 ì‹œìž‘í• ë•Œ 등장하게 ë�œë‹¤.
- p.30
2.4.1. 패턴과 단순함 사ì�´ì�˜ 긴장 ¶
- p.30
- '우둔한 프로그래머와 아키í…�처'는 패턴ì�´ í•ìƒ� 좋ì�€ 것ì�´ë©° 가능한 ëª¨ë“ ê³³ì—�서 사용해야 í•œë‹¤ê³ ì�¼ê´€ë�˜ê²Œ 믿는다.
- '우둔한 프로그래머와 아키í…�처'는 패턴ì�´ í•ìƒ� 좋ì�€ 것ì�´ë©° 가능한 ëª¨ë“ ê³³ì—�서 사용해야 í•œë‹¤ê³ ì�¼ê´€ë�˜ê²Œ 믿는다.
- p.31
- 프로그래머들ì�€ 미래ì—� ë“±ìž¥í• ì§€ë�„ 모를 요구 사í•까지ë�„ 추가하는 경향ì�´ 있다.
- 미래ì—� 변화ë� 것ì�´ë�¼ ìƒ�ê°�하기 때문ì—� 코드를 복잡하게 하는 것ì�€ 좋ì�€ ìƒ�ê°�ì�´ 아니다.(ì �ì–´ë�„ ë‚´ 경우는 미래를 ì˜ˆì¸¡í•˜ë ¤ í• ë•Œë§ˆë‹¤ ë‚´ 예ìƒ�ì�´ 빗나갔다.)
- 요구ë�˜ëŠ” 기능ì�„ ì‚ì œí•˜ëŠ” 것ì�€ 불필요한 기능ì�„ 추가하는 것만í�¼ 나ì�˜ë‹¤.
- 요구ë�˜ëŠ” 기능ì�„ 왜 ì‚ì œí•˜ëŠ”ê°€? 요구ë�˜ëŠ” 기능ì�„ 구현하는게 우리 ì�¼ 아닌가? -ìž„ìƒ�현
- 요구 기능ì�„ 구현하는게 ì–´ë µë‹¤ë©° 맘대로 다른거 ë¶™ì�´ëŠ” 사람ë�„있ì�Œ.. 예를들면 파ì�¼ì�„ ì‚ì œí• ë•Œ 복구기능ì�„ 만들기 싫어서 확ì�¸ 다ì�´ì–¼ë¡œê·¸ë¥¼ ë�„ìš°ì§€.. - 서지혜
- ê·¸ë¦¬ê³ ëŠ” êµ¬í˜„í•˜ê³ ë‚˜ì„œëŠ” 스스로 ë‚©ë“�ì�„ 하게 ë�©ë‹ˆë‹¤. 'ì�´ëŸ¬ì�´ëŸ¬í•˜ê²Œ 하는게 ë�” 좋ì�€ 사용ìž� 경험ì�„ ì œê³µí• ìˆ˜ 있ì�„거야.' 는 무슨 -_-; - 박성현
- ê·¸ë¦¬ê³ ëŠ” êµ¬í˜„í•˜ê³ ë‚˜ì„œëŠ” 스스로 ë‚©ë“�ì�„ 하게 ë�©ë‹ˆë‹¤. 'ì�´ëŸ¬ì�´ëŸ¬í•˜ê²Œ 하는게 ë�” 좋ì�€ 사용ìž� 경험ì�„ ì œê³µí• ìˆ˜ 있ì�„거야.' 는 무슨 -_-; - 박성현
- 구현ì�€ 복잡한ë�° ë�ˆì�„ 조금 준다면 ì‚ì œí•´ë²„ë¦¬ê² ì§€. - 김수경
- 요구 기능ì�„ 구현하는게 ì–´ë µë‹¤ë©° 맘대로 다른거 ë¶™ì�´ëŠ” 사람ë�„있ì�Œ.. 예를들면 파ì�¼ì�„ ì‚ì œí• ë•Œ 복구기능ì�„ 만들기 싫어서 확ì�¸ 다ì�´ì–¼ë¡œê·¸ë¥¼ ë�„ìš°ì§€.. - 서지혜
- 요구ë�˜ëŠ” 기능ì�„ 왜 ì‚ì œí•˜ëŠ”ê°€? 요구ë�˜ëŠ” 기능ì�„ 구현하는게 우리 ì�¼ 아닌가? -ìž„ìƒ�현
- 프로그래머는 지금 앞으로 어떻게 ë� ì§€ 모를 기능ì�„ 추가하는 것ì�´ 아니ë�¼ 새로운 기능ì�„ 추가하거나 기존ì�˜ 것ì�„ ìˆ˜ì •í•˜ê¸° 쉽ë�„ë¡� 프로그램ì�„ 작성해야 하는 것ì�´ë‹¤.
- 우리는 필요로 하는 바로 그것� 해야한다.
- 사용ìž�ê°€ 무언가를 ì •ë§�로 í•˜ê³ ì‹¶ì–´í•œë‹¤ë©´ ì�´ì—� 대해 질문하지 ë§�아야 í•œë‹¤ê³ ì£¼ìž¥í•œë‹¤.
- 프로그래머들ì�€ 미래ì—� ë“±ìž¥í• ì§€ë�„ 모를 요구 사í•까지ë�„ 추가하는 경향ì�´ 있다.
- p.32
- 단순함 , ì™„ì „ì„± ê·¸ë¦¬ê³ ìˆ˜ì •ì�˜ ìš©ì�´ì„±ì�´ëž€ 세가지 요구 사í•ì�€ ìƒ�ì¶©ë�˜ê¸°ë�„ 한다.
- ì�¸í„°íŽ˜ì�´ìŠ¤ëŠ” 패턴 ì „ì²´ë¥¼ ë�„입하는 것과는 달리 그다지 복잡성ì�„ ì¦�가시키지 않는다. 반면 기능 변경ì�´ë‚˜ 추가 시 ë¦¬íŒ©í† ë§�ì�´ 쉬워진다.
- 단순함 , ì™„ì „ì„± ê·¸ë¦¬ê³ ìˆ˜ì •ì�˜ ìš©ì�´ì„±ì�´ëž€ 세가지 요구 사í•ì�€ ìƒ�ì¶©ë�˜ê¸°ë�„ 한다.
2.5. 패턴 분류하기 ¶
- p.32
- 패턴ì�„ 분류하는 것ì�€ 필요한 ìƒ�황ì—�서 ì �ì ˆí•œ 패턴ì�„ ì„ íƒ�하는 것ì�„ ìš©ì�´í•˜ê²Œ 해준다는 ì �ì—�서 ìœ ìš©í•˜ë‹¤.
- 패턴ì�„ 분류하는 것ì�€ 필요한 ìƒ�황ì—�서 ì �ì ˆí•œ 패턴ì�„ ì„ íƒ�하는 것ì�„ ìš©ì�´í•˜ê²Œ 해준다는 ì �ì—�서 ìœ ìš©í•˜ë‹¤.
- p.34
- 패턴들ì�´ 서로 ì�˜ì¡´í•˜ê³ 있다는 사실ì�„ ì�´í•´í•˜ëŠ” 것ë�„ 중요하다.
- 여러 패턴들ì�´ 서로 ê´€ë ¨ì�´ 있으며 ì‹¤ì œ 프로그래ë°�í• ë•ŒëŠ” ì�´ë“¤ì�„ 엮어 함께 사용하는 경우가 많다는 사실만 명심하면 ë�œë‹¤.
- 패턴들ì�´ 서로 ì�˜ì¡´í•˜ê³ 있다는 사실ì�„ ì�´í•´í•˜ëŠ” 것ë�„ 중요하다.
- p.34
- 패턴 ê°„ì�˜ 연관성 ì�˜ì¡´ì„± 때문ì—� 한 패턴ì�„ 다른 패턴과 구분하기 ì–´ë ¤ìš¸ 수ë�„ 있다. ì�´ëŸ´ 경우ì—�는 ì •ì � 구조 ëŒ€ì‹ íŒ¨í„´ì�˜ ì�˜ë�„ì—� ì´ˆì �ì�„ 맞추기 바란다.
- 패턴 ê°„ì�˜ 연관성 ì�˜ì¡´ì„± 때문ì—� 한 패턴ì�„ 다른 패턴과 구분하기 ì–´ë ¤ìš¸ 수ë�„ 있다. ì�´ëŸ´ 경우ì—�는 ì •ì � 구조 ëŒ€ì‹ íŒ¨í„´ì�˜ ì�˜ë�„ì—� ì´ˆì �ì�„ 맞추기 바란다.
2.5.1. ë””ìž�ì�¸ ì�¼ë°˜ ¶
- p.35
- �체 지향 디��(OOD)과 �체 지향 프로그래�(OOP)� 매우 다른것�다.
- ë””ìž�ì�¸ 프로세스는 ìœ ìŠ¤ì¼€ì�´ìФ ë¶„ì„�등ì�„ 통한 ìš”ìˆ˜ì‚¬í• ìˆ˜ì§‘ì—�서 시작해 코딩ì�´ 시작ë�˜ëŠ” ë””ìž�ì�¸ìœ¼ë¡œ ë��나게 ë�œë‹¤.
- 프로그래ë°� 프로세스는 ë””ìž�ì�¸ì—�서 시작하며 ìƒ�ì†�, 캡ìŠ�í™”, ë””ìž�ì�¸ 패턴 등ì�„ ì�´ìš©í•˜ê³ ë””ìž�ì�€ì�˜ 실체ì�¸ 컴퓨터 프로그램ì�„ 내놓는다.
- ì�´ì™€ê°™ì�€ ê¸°ìˆ ì�˜ 융합ì�€ ì• ìž�ì�¼(Agile) ë°©ë²•ë¡ ì—�서 특히 중요한ë�° ë””ìž�ì�¸ê³¼ 코딩ì�´ ë³‘ë ¬ì �으로 ì§„í–‰ë�˜ê¸° 때문ì�´ë‹¤.
- ì• ìž�ì�¼ì�„ í•˜ë ¤ë©´ ë””ìž�ì�¸, 코딩ì�„ 둘다 í• ì¤„ 알아야 하나.. - 서지혜
- ì• ìž�ì�¼ì�„ í•˜ë ¤ë©´ ë””ìž�ì�¸, 코딩ì�„ 둘다 í• ì¤„ 알아야 하나.. - 서지혜
- ì–´ë–¤ ì• ìž�ì�¼ ë°©ë²•ë¡ ë�„ 춤추는 ê¼ë‘�ê°�시 프로그래머와 ì�´ë¥¼ 조종하는 아키í…�트란 ë�„ì‹�ì�„ 지지하지 않는다.
- �체 지향 디��(OOD)과 �체 지향 프로그래�(OOP)� 매우 다른것�다.
2.5.2. ìž�바를 C언어 스타ì�¼ë¡œ 프로그래ë°�하기 ¶
- p.37
- ì ˆì°¨ 지향 프로그래ë°�ì�€ ë�°ì�´í„°ë¥¼ ì¡°ìž‘ 혹ì�€ ê²€í† í•˜ëŠ” 서브루틴 ê°„ì�˜ ë�°ì�´í„° í��름ì�„ 구조화 한다.
- 사실 ë§Žì�€ ì ˆì°¨ 지향ì � 프로그램ì�€ 사용ìž� ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ 통해 ë�°ì�´í„°ë² ì�´ìФ í…Œì�´ë¸”ì�„ 보여주는 ì—í• ì�„ í• ë¿�ì�´ë‹¤.
- ê°�ì²´ 지향 시스템ì�€ ìƒ�호 협ë�™í•˜ëŠ” ì—�ì�´ì „트들ì�˜ 네트워í�¬ì�´ë©°, ì—�ì�´ì „트는 메시지를 통해 í†µì‹ í•œë‹¤.
- ê°�ì²´ 지향 시스템과 ì ˆì°¨ 지향 시스템ì�„ 구분하는 한가지 좋ì�€ 방법ì�€ 무언가를 변화시킬 때 ì–´ë–¤ì�¼ì�´ ë°œìƒ�하는가를 보는 것ì�´ë‹¤.
- ì„¤ê³„í• ë•Œ ì�´ê²ƒì�„ 미리 ìƒ�ìƒ�í•´ë³´ë©´ ë�„움ì�´ ë�˜ëŠ” 것 같아요. 과연 ë‚´ê°€ ì�´ë ‡ê²Œ 짜면 ì�´ëŸ° 변경ì�´ ìƒ�길 때 어떻게 ë� 까? - 김수경
- ì„¤ê³„í• ë•Œ ì�´ê²ƒì�„ 미리 ìƒ�ìƒ�í•´ë³´ë©´ ë�„움ì�´ ë�˜ëŠ” 것 같아요. 과연 ë‚´ê°€ ì�´ë ‡ê²Œ 짜면 ì�´ëŸ° 변경ì�´ ìƒ�길 때 어떻게 ë� 까? - 김수경
- ì ˆì°¨ 지향 시스템ì—�서는 변화가 프로그램ì�˜ 나머지ì—� 'í�¼ì ¸ë‚˜ê°€ëŠ”'경향ì�´ 있다.
- �체 지향 시스템�서는 변화가 한곳� 집중�는 경향� 있다.
- ì ˆì°¨ 지향 프로그래ë°�ì�€ ë�°ì�´í„°ë¥¼ ì¡°ìž‘ 혹ì�€ ê²€í† í•˜ëŠ” 서브루틴 ê°„ì�˜ ë�°ì�´í„° í��름ì�„ 구조화 한다.
- p.39
- ë‚´ê°€ MFCê°€ ìƒ�당 부분 ê°�ì²´ ìž�í–¥ì �ì�´ì§€ 않다는 ì�´ì•¼ê¸°ë¥¼ 하ìž� ê·¸ì�˜ 대답ì�€ ìž�ì‹ ë�„ ì•Œê³ ìžˆë‹¤ëŠ” 것 ì�´ì—ˆë‹¤.
- ë‚´ê°€ MFCê°€ ê°�ì²´ 지향ì �ì�´ì§€ ì•Šë‹¤ê³ ë§�í–ˆì�„때 ìƒ�대는 MFC야ë§�로 ê°�체지향ì �ì�´ë‹¤ ë�¼ê³ í–ˆë�˜ 것 같다. - 서지혜
- ë‚´ê°€ MFCê°€ ê°�ì²´ 지향ì �ì�´ì§€ ì•Šë‹¤ê³ ë§�í–ˆì�„때 ìƒ�대는 MFC야ë§�로 ê°�체지향ì �ì�´ë‹¤ ë�¼ê³ í–ˆë�˜ 것 같다. - 서지혜
- ë‚´ê°€ MFCê°€ ìƒ�당 부분 ê°�ì²´ ìž�í–¥ì �ì�´ì§€ 않다는 ì�´ì•¼ê¸°ë¥¼ 하ìž� ê·¸ì�˜ 대답ì�€ ìž�ì‹ ë�„ ì•Œê³ ìžˆë‹¤ëŠ” 것 ì�´ì—ˆë‹¤.
- p.40
- ì ˆì°¨ 지향ì � í•´ê²° 방법ì�´ 본질ì �으로 나ì�œ 것ì�€ 아니다. 하지만 ì„ íƒ�ì�„ í• ë•ŒëŠ” ì�´ ì„ íƒ�ì—� 따르는 위험까지 ê³ ë ¤í•´ 보기 바란다.
- ì ˆì°¨ 지향ì � í•´ê²° 방법ì�´ 본질ì �으로 나ì�œ 것ì�€ 아니다. 하지만 ì„ íƒ�ì�„ í• ë•ŒëŠ” ì�´ ì„ íƒ�ì—� 따르는 위험까지 ê³ ë ¤í•´ 보기 바란다.
2.5.3. 열린 눈으로 프로그래ë°�하기 ¶
- p.40
- ë””ìž�ì�¸ì�€ ì„ íƒ�ê³¼ íŠ¸ë ˆì�´ë“œ 오프, 리스í�¬ 관리ì�˜ ì—°ì†�ì�´ë‹¤.
- ì–´ë–¤ ë””ìž�ì�€ì�„ ì„ íƒ�í• ë•ŒëŠ” ì„ íƒ�으로 ì�¸í•œ 장단ì �ì�„ ê³ ë ¤(íŠ¸ë ˆì�´ë“œ 오프)해야 한다. ê·¸ë¦¬ê³ ê·¸ê²ƒì�„ 취한뒤ì—�는 그로ì�¸í•´ 잃ì�€ 것ì�„ ê°�내해야한다(리스í�¬ 관리) ì�´ê²Œ 맞나? - 서지혜
- ì–´ë–¤ ë””ìž�ì�€ì�„ ì„ íƒ�í• ë•ŒëŠ” ì„ íƒ�으로 ì�¸í•œ 장단ì �ì�„ ê³ ë ¤(íŠ¸ë ˆì�´ë“œ 오프)해야 한다. ê·¸ë¦¬ê³ ê·¸ê²ƒì�„ 취한뒤ì—�는 그로ì�¸í•´ 잃ì�€ 것ì�„ ê°�내해야한다(리스í�¬ 관리) ì�´ê²Œ 맞나? - 서지혜
- ìž�ì‹ ì�´ í•˜ê³ ìžˆëŠ” ì�¼ì�´ ì–´ë–¤ 결과를 ì´ˆëž˜í• ì§€ë¥¼ 알지 못한다면 ì�´ëŠ” ë””ìž�ì�¸ì�„ í•˜ê³ ìžˆëŠ” 것ì�´ 아니ë�¼ ì–´ë‘ ì†�ì—�서 ë¹„í‹€ê±°ë¦¬ë¦¬ê³ ìžˆì�„ ë¿�ì�´ë‹¤.
- ë””ìž�ì�¸ì�´ 아닌 구현단계ì—�서ë�„ ì�´ëŸ¬í•œ ìƒ�황ì�„ "ìš°ì—°ì—� ì�˜í•œ 프로그래ë°�"ì�´ë�¼ê³ 설명ì�„ 하ë�”ë�¼ê³ ìš”. ê·¸ë¦¬ê³ ëŒ€ë¶€ë¶„ì�˜ 개발ìž�는 "ìš°ì—°ì—� ì�˜í•œ 프로그래ë°�"ì�„ í•˜ê³ ìžˆë‹¤ê³ ... 실용주ì�˜ 프로그래머ì—�서 본 기억ì�´ 있네요..? - 박성현
- faith coding과� �통하는 ��가ㅋㅋ - 서지혜
- faith coding과� �통하는 ��가ㅋㅋ - 서지혜
- ë””ìž�ì�¸ì�´ 아닌 구현단계ì—�서ë�„ ì�´ëŸ¬í•œ ìƒ�황ì�„ "ìš°ì—°ì—� ì�˜í•œ 프로그래ë°�"ì�´ë�¼ê³ 설명ì�„ 하ë�”ë�¼ê³ ìš”. ê·¸ë¦¬ê³ ëŒ€ë¶€ë¶„ì�˜ 개발ìž�는 "ìš°ì—°ì—� ì�˜í•œ 프로그래ë°�"ì�„ í•˜ê³ ìžˆë‹¤ê³ ... 실용주ì�˜ 프로그래머ì—�서 본 기억ì�´ 있네요..? - 박성현
- ë””ìž�ì�¸ì�€ ì„ íƒ�ê³¼ íŠ¸ë ˆì�´ë“œ 오프, 리스í�¬ 관리ì�˜ ì—°ì†�ì�´ë‹¤.
- p.41
- ì–´ë–¤ 언어ì�˜ 기능 혹ì�€ ì�´ë””ì—„ì�´ ì´ˆëž˜í• ìˆ˜ 있는 í��해를 ì�´í•´í•˜ë©´ 해당 기능과 ì�´ë””ì—„ì�„ 사용하는 것ì�´ ì �ì ˆí•œì§€ 아닌지 좀 ë�” 현명하게 ê²°ì •í• ìˆ˜ 있다.
- ì–´ë–¤ 언어ì�˜ 기능 혹ì�€ ì�´ë””ì—„ì�´ ì´ˆëž˜í• ìˆ˜ 있는 í��해를 ì�´í•´í•˜ë©´ 해당 기능과 ì�´ë””ì—„ì�„ 사용하는 것ì�´ ì �ì ˆí•œì§€ 아닌지 좀 ë�” 현명하게 ê²°ì •í• ìˆ˜ 있다.
2.6.1. 허튼소리! ¶
- p.42
- ìš°ì„ OO 시스템ì�„ 지능 있는 ë�™ë¬¼(ê°�ì²´)ì�˜ 모임ì�´ë�¼ ìƒ�ê°�하ìž�.
- OO 디���서 가장 중요한 �리는 ��터 추�화�다.
- "ê°�체는 메소드ë�¼ 불리는 함수가 있는 ìž�료 구조ì�´ë©° 메소드가 ìž�료 구조를 조작한다."ë�¼ëŠ” 설명ì�„ 보았ì�„ì§€ë�„ ëª¨ë¥´ê² ë‹¤. 허튼소리! 당치 않다.
- 봉봉 ��나! 봉봉� 그책� ��게 아�까?- 김준�
- 나ë�„ ê°�체지향ì�€ ì–´ë–¤ 작업ì—� 대한 ë�°ì�´í„°ì™€ 메소드를 ê°�ì²´ê°€ ê°€ì§€ê³ ìžˆëŠ” 것ì�´ë�¼ê³ ìƒ�ê°�í–ˆì�Œ!! - 서지혜
- ì�´ëŸ¬í•œ ì°©ê°�ì�€ í�”히 C를 ë°°ìš°ê³ C++ì�„ 배울 때, 'ê°�ì²´'ê°€ 아닌 문법 í�´ëž˜ìФ'를 쉽게 ì„¤ëª…í•˜ë ¤ê³ "í�´ëž˜ìŠ¤ëŠ” structure(data) + method(to do) ì�´ë‹¤." ë�¼ëŠ” ìš”ìƒ�한 설명ì�„ ì ‘í•˜ê²Œ ë�˜ë©´ 하게 ë�˜ëŠ” 것 같습니다. 처ì�Œì—� ì�´ëŸ° 설명ì�„ ì ‘í•˜ê²Œ ë�˜ë©´ 나중ì—�는 ìƒ�ê°�ì�„ 바꾸기 ì–´ë ¤ì›Œì§€ì£ (아니 귀찮아지는 ê±´ê°€...) -_-;; - 박성현
- ì •ë‹µ. í�´ëž˜ìŠ¤ëŠ” 구조체+메소드ì—�ìš” ë�¼ëŠ” 설명ì�„ 열혈강ì�˜ c++ì—�서 본듯..? - 서지혜
- ì •ë‹µ. í�´ëž˜ìŠ¤ëŠ” 구조체+메소드ì—�ìš” ë�¼ëŠ” 설명ì�„ 열혈강ì�˜ c++ì—�서 본듯..? - 서지혜
- 2학년ë•� 나ë�„ ì €ë ‡ê²Œ ìƒ�ê°�했다ㅜㅜㅜ Spring/íƒ�험스터디ì—�서ë�„ 얘기했지만 그래서 ê°�체지향설계ë�¼ë©´ 메소드만 있는 í�´ëž˜ìŠ¤ëŠ” ì¡´ìž¬í•´ì„ ì•ˆë�œë‹¤ê³ ë§�한 ì �ë�„ 있ì�Œã…œã…œã…œã…œ ë¶€ë�„럽다... - 김수경
- 봉봉 ��나! 봉봉� 그책� ��게 아�까?- 김준�
2.6.2. ê°�체는 기능ì�˜ ì§‘í•©ì�´ë‹¤ ¶
- p.43
- OOì�˜ ì œ 1 ì§€ë ¹.
ê°�ì²´ì—� ì–´ë–¤ 작업ì�„ 하는 ë�° 필요한 ì •ë³´ë¥¼ ìš”ì²í•˜ì§€ ë§�ë�¼. ëŒ€ì‹ ìž‘ì—…ì�„ 하는 ë�° 필요한 ë�°ì�´í„°ë¥¼ ê°–ê³ ìžˆëŠ” ê°�ì²´ì—� ì�¼ì�„ 해달ë�¼ê³ ìš”ì²í•˜ë�¼.
- 켄 아놀드는 다ì�Œê³¼ ê°™ì�´ ë§�한다. "ì •ë³´ê°€ 아닌 ë�„움ì�„ ìš”ì²í•˜ë�¼(Ask for help, not for information)."
- 중요한 것ì�€ ì›�리ì�´ì§€ ì‚¬ìš©í•˜ê³ ìžˆëŠ” 언어가 아니다.
- �바가 �체지향 프로그램� 줄거� ��하지마!! - 서지혜
- ì�´ê±´ 6피ì�˜ 중심ì—�서 ì™¸ì¹˜ê³ ì‹¶ì�€ ë§�. ë§Žì�€ 후배들ì�´ ì�´ëŸ° 질문ì�„ 한다. C로는 ê°�체지향 못하는거 아니ì—�ì—¬? ;;;;;;; 혹ì�€ OOP로 ì§œê³ ìžˆì–´ìš” ㅋ해서 ë³´ë©´ ìž�바로 ì§ ë‹¤ëŠ” 것 외엔 ë�„대체 ê°�체지향ì�˜ ì›�리가 ì–´ë””ì—� 녹아있는지 알 수 없는 코드ë�¼ê±°ë‚˜... í�´ëž˜ìФ ì“°ë©´ 다 OOëƒ�ㅜㅜ ê·¸ë ‡ê²Œ 간단하면 í•™êµ�ì—�서 왜 한학기나 í• ì• í•´ì„œ ë°°ìš°ê² ì–´. - 김수경
- �바가 �체지향 프로그램� 줄거� ��하지마!! - 서지혜
- OOì�˜ ì œ 1 ì§€ë ¹.
2.6.3. 어떻게 ìž˜ëª»í•˜ê³ ìžˆëŠ”ê°€? ¶
- p.45
- OO는 컴퓨터 프로그램ì—� 내재하는 í”¼í• ìˆ˜ 없는 복잡성ì�„ ì¡°ì§�í™” 하는 것ì�´ì§€, 복잡성 ìž�체를 ì œê±°í•˜ëŠ” 것ì�´ 아니다.
- ì�´ëŸ¬í•œ 룰ì�„ 따르면 ë¬¸ì œì �ì�„ ê³ ì¹˜ê±°ë‚˜ 새로운 기능ì�„ 추가함으로ì�¨ ë°œìƒ�하는 변화가 한곳ì—� 집중ë�œë‹¤. ì�´ë•Œ ìœ ì§€ 보수가 ìš©ì�´í•˜ë‹¤ëŠ” 것과 복잡하지 않다는 것ì�„ 혼ë�™í•˜ì§€ ë§�기 바란다.
- OO는 컴퓨터 프로그램ì—� 내재하는 í”¼í• ìˆ˜ 없는 복잡성ì�„ ì¡°ì§�í™” 하는 것ì�´ì§€, 복잡성 ìž�체를 ì œê±°í•˜ëŠ” 것ì�´ 아니다.
- p.48
2.6.4. 어떻게 '올바르게' í• ìˆ˜ 있는가? ¶
- p.48
- 리ë�¼(lira)를 통화로 사용하ë�˜ ì�´íƒˆë¦¬ì•„ê°€ ìœ ëŸ½ì�˜ 단ì�¼ 통화ì�¸ ìœ ë¡œ(euro)를 사용하게 ë�˜ë©´ì„œ 겪었ë�˜ ê³ í†µì�„ ìƒ�ìƒ�í•´ ë³´ìž�
- 무슨�� 있었지?? �금하다 - 서지혜
- 무슨�� 있었지?? �금하다 - 서지혜
- 만약 빌 게ì�´ì¸ ê°€ ì�€í–‰ì—� 걸어들어와 계좌를 개설한 ë’¤ ê·¸ì�˜ ëª¨ë“ ìž¬ì‚°ì�„ ì˜ˆê¸ˆí•˜ê² ë‹¤ê³ í•˜ë©´ 어떻게 ë� 까? 여러분ì�´ ì�€í–‰ ì§€ì �장ì�´ë�¼ë©´ ì ˆëŒ€ 빌ì�´ëž€ ê³ ê°�ì�„ ë†“ì¹˜ê³ ì‹¶ì§€ 않ì�„ 것ì�´ë‹¤.
- ì—시 빌게ì�´. ë�ˆì�˜ 힘ì�´ëž€. -김준ì„�
- ì—시 빌게ì�´. ë�ˆì�˜ 힘ì�´ëž€. -김준ì„�
- 리ë�¼(lira)를 통화로 사용하ë�˜ ì�´íƒˆë¦¬ì•„ê°€ ìœ ëŸ½ì�˜ 단ì�¼ 통화ì�¸ ìœ ë¡œ(euro)를 사용하게 ë�˜ë©´ì„œ 겪었ë�˜ ê³ í†µì�„ ìƒ�ìƒ�í•´ ë³´ìž�
2.7. 셀룰러 ì˜¤í† ë§ˆíƒ€ ¶
- p.52
- 셀룰러 ì˜¤í† ë§ˆíƒ€(Cellular automata)ì�˜ 프로그램 구현ì�€ OO 시스템ì�˜ 훌ë¥í•œ 예가 ë�œë‹¤. 셀룰러 ì˜¤í† ë§ˆíƒ€ 프로그램ì�€ 복잡한 ë¬¸ì œë¥¼ ì •í™•ížˆ ê°�ì²´ 지향ì �ì�¸ ë°©ì‹�으로 해결한다.
- �런 �름� 만들수 있어야하는�.. - 김준�
- �런 �름� 만들수 있어야하는�.. - 김준�
- êµ�통 í��름ì�„ 예측하는 것ì�€ 카오스 ì�´ë¡ ì�´ í•´ê²°í•˜ë ¤ëŠ” ìœ ëª…í•œ ë¬¸ì œì�´ë©°,, ê·¸ í•´ê²°ì�€ 매우 ì–´ë µë‹¤. ì�´ë•Œ ì‹œë®¬ë ˆì�´ì…˜ 모ë�¸ì�˜ 행위ì—� 기반하여 ì˜ˆì¸¡í• ìˆ˜ 있다는 ê°€ì •ì�„ 한다면 êµ�통 í��름ì�„ 모ë�¸ë§�, ì‹œë®¬ë ˆì�´ì…˜í•˜ëŠ”ê²ƒì�´ ìœ ìš©í• ê²ƒì�´ë‹¤.
- 셀룰러 ì˜¤í† ë§ˆíƒ€(Cellular automata)ì�˜ 프로그램 구현ì�€ OO 시스템ì�˜ 훌ë¥í•œ 예가 ë�œë‹¤. 셀룰러 ì˜¤í† ë§ˆíƒ€ 프로그램ì�€ 복잡한 ë¬¸ì œë¥¼ ì •í™•ížˆ ê°�ì²´ 지향ì �ì�¸ ë°©ì‹�으로 해결한다.
- p.54
- ëª¨ë“ OO 시스템과 마찬가지로 ì�´ëŸ¬í•œ 종류ì�˜ 룰ì�€ 주변 코드ì—� ì˜�í–¥ì�„ 미치지 않으면서ë�„ 바뀔수 있다.
- ëª¨ë“ OO 시스템과 마찬가지로 ì�´ëŸ¬í•œ 종류ì�˜ 룰ì�€ 주변 코드ì—� ì˜�í–¥ì�„ 미치지 않으면서ë�„ 바뀔수 있다.
- p.55
- ì–´ë–¤ ê°�체는 ìž�ì‹ ì�´ í�¬í•¨í•˜ê³ 있는 ê°�ì²´ì—� 해당 ê°�ì²´ê°€ 필요로 하는 외부 ì •ë³´ë¥¼ 넘겨줌으로ì�¨ ë¬¸ì œë¥¼ 해결한다. 즉 위임ì�„ 통해 ë¬¸ì œë¥¼ 해결한다. 메시지가 위임하는 ê°�체로 ì „ë‹¬ë�˜ì–´ 갈수ë¡� 추가ì �ì�¸ ì�¸ìž�를 í�¬í•¨í•˜ëŠ” 경향ì�´ 있다.
- 좋ì�€ í�´ëž˜ìŠ¤ëŠ” getter와 setter메소드를 ê°–ì§€ 않는ë�°, ì�´ëŸ° 메소드는 구현 ìƒ�세를 노출시키기 때문ì—� ê²°ê³¼ì �으로 ìœ ì§€ 보수를 ì–´ë µê²Œ 만들기 때문ì�´ë‹¤. 예를 들어 getter 메소드ì�˜ 리턴 타입ì�´ 바뀌게 ë�˜ë©´ getter를 ì •ì�˜í•˜ëŠ” ê°�ì²´ë¿� 아니ë�¼ 'getter'를 호출하는 ëª¨ë“ ì½”ë“œ ë˜�한 바꾸어 주어야 한다. ìž ì‹œ 후ì—� getter와 setter 메소드 ì—†ì�´ 시스템ì�„ ë””ìž�ì�¸í•˜ëŠ” 방법ì—� 대해 ì„¤ëª…í• ê²ƒì�´ë‹¤. 기대해ë�„ 좋다.
- ì–´ë–¤ ê°�체는 ìž�ì‹ ì�´ í�¬í•¨í•˜ê³ 있는 ê°�ì²´ì—� 해당 ê°�ì²´ê°€ 필요로 하는 외부 ì •ë³´ë¥¼ 넘겨줌으로ì�¨ ë¬¸ì œë¥¼ 해결한다. 즉 위임ì�„ 통해 ë¬¸ì œë¥¼ 해결한다. 메시지가 위임하는 ê°�체로 ì „ë‹¬ë�˜ì–´ 갈수ë¡� 추가ì �ì�¸ ì�¸ìž�를 í�¬í•¨í•˜ëŠ” 경향ì�´ 있다.
- p.56
- ë³´ë�¼ê³ ! 차들ì�´ ë�„시 안ì�„ ë�Œì•„다니잖아!!
- ë³´ë�¼ê³ ! 차들ì�´ ë�„시 안ì�„ ë�Œì•„다니잖아!!
2.8. ì ‘ê·¼ 메소드와 ìˆ˜ì • 메소드는 나ì�˜ë‹¤ ¶
- p.57
- ì�´ ë§�ì�´ 메소드가 ê°’ì�„ 반화하면 안 ë�œë‹¤ê±°ë‚˜ 'get'혹ì�€ 'set'기능ì�´ ì–¸ì œë‚˜ ë¶€ì �ì ˆí•˜ë‹¤ëŠ” 것ì�€ 아니다. ê°�체는 때때로 시스템 ì „ë°˜ì�„ í�˜ëŸ¬ë‹¤ë‹ˆë©° 작업ì�„ 수행하ë�„ë¡� ë�„와주어야 한다. 하지만 ë§Žì�€ 경우 get/set 메소드는 private 필드를 ì ‘ê·¼í•˜ëŠ” ìš©ë�„로만 ë¶€ì �ì ˆí•˜ê²Œ 사용ë�˜ë©°, ì�´ëŸ° 사용ì�´ ë§Žì�€ ë¬¸ì œë¥¼ ë°œìƒ�시킨다.
- ì�´ ë§�ì�´ 메소드가 ê°’ì�„ 반화하면 안 ë�œë‹¤ê±°ë‚˜ 'get'혹ì�€ 'set'기능ì�´ ì–¸ì œë‚˜ ë¶€ì �ì ˆí•˜ë‹¤ëŠ” 것ì�€ 아니다. ê°�체는 때때로 시스템 ì „ë°˜ì�„ í�˜ëŸ¬ë‹¤ë‹ˆë©° 작업ì�„ 수행하ë�„ë¡� ë�„와주어야 한다. 하지만 ë§Žì�€ 경우 get/set 메소드는 private 필드를 ì ‘ê·¼í•˜ëŠ” ìš©ë�„로만 ë¶€ì �ì ˆí•˜ê²Œ 사용ë�˜ë©°, ì�´ëŸ° 사용ì�´ ë§Žì�€ ë¬¸ì œë¥¼ ë°œìƒ�시킨다.
- p.58
- ìœ ì§€ 보수성ì�˜ 최대 ì � 중 하나ì�¸ 중복 코드를 작성해야 한다.
- ìœ ì§€ 보수성ì�˜ 최대 ì � 중 하나ì�¸ 중복 코드를 작성해야 한다.
- p.60
- ì�´ë¯¸ ë�°ì�´í„°ë¥¼ ê°–ê³ ìžˆëŠ” ê°�ì²´ê°€ ì�¼ì�„ 하게 하는것ì�€ 어떨까? 다시 ë§�í•´ ì‹ ì�˜ í�´ëž˜ìФì—�서 ì ‘ê·¼ 메소드를 통해 ê°€ì ¸ì˜¨ ë�°ì�´í„°ë¥¼ ê°–ê³ ì–´ë–¤ 작업ì�„ 하는 코드를 ì�´ ë�°ì�´í„°ë¥¼ ì €ìž¥í•˜ê³ ìžˆëŠ” ê°�체로 옮기면 어떨까? ì ‘ê·¼ 메소드는 사ë�¼ì§€ê³ 코드는 단순해진다.
- 아무 ìƒ�ê°� ì—†ì�´ ì ‘ê·¼ 메소드와 ìˆ˜ì • 메소드를 사용하는 것ì�€ public 필드를 사용하는 것ì�´ 위험한 것과 ê°™ì�€ ì�´ìœ 로 똑같ì�´ 위험하다.
- ��해보니 get, set�랑 public�랑 다를게없다.. - 서지혜
- ��해보니 get, set�랑 public�랑 다를게없다.. - 서지혜
- ì�´ë¯¸ ë�°ì�´í„°ë¥¼ ê°–ê³ ìžˆëŠ” ê°�ì²´ê°€ ì�¼ì�„ 하게 하는것ì�€ 어떨까? 다시 ë§�í•´ ì‹ ì�˜ í�´ëž˜ìФì—�서 ì ‘ê·¼ 메소드를 통해 ê°€ì ¸ì˜¨ ë�°ì�´í„°ë¥¼ ê°–ê³ ì–´ë–¤ 작업ì�„ 하는 코드를 ì�´ ë�°ì�´í„°ë¥¼ ì €ìž¥í•˜ê³ ìžˆëŠ” ê°�체로 옮기면 어떨까? ì ‘ê·¼ 메소드는 사ë�¼ì§€ê³ 코드는 단순해진다.
- 구현ì�€ë‹‰ì�´ë�¼ëŠ” ì›�리는 ê°�ì²´ 지향 시스템ì�˜ 품질ì�„ í�‰ê°€í•˜ëŠ” 좋ì�€ 지표가 ë�œë‹¤. í�´ëž˜ìФì�˜ 구현ì�„ 마ì�ŒëŒ€ë¡œ 바꾸어ë�„, 심지어 기존 í�´ëž˜ìŠ¤ë¥¼ ë²„ë¦¬ê³ ìƒˆë¡œìš´ í�´ëž˜ìŠ¤ë¥¼ 작성하ë�”ë�¼ë�„ ì�´ë¥¼ 사용하는 ê°�ì²´ì�˜ 코드ì—�는 ì˜�í–¥ì�„ 미치지 않ì�„ 수 있는가?
- 만약 구현 �닉� 하지 않는다면 다른 OO기능� 사용하는 것� � �미가 없게�다.
- p 62
- ì�´ëŸ¬í•œ '추측ì—� ì�˜í•œ ë””ìž�ì�¸í•˜ê¸°'ì „ëžµì�€ 사용하지ë�„ 않는 메소드를 작성하는ë�°, 즉 필요치 않ì�€ 기능ì�„ í�´ëž˜ìФì—� 추가하는 ë�° 불필요한 시간ì�„ ë‚비하게 한다.
- �? 디��너들� �� 디���가? - 서지혜
- �? 디��너들� �� 디���가? - 서지혜
- ì�´ëŸ¬í•œ '추측ì—� ì�˜í•œ ë””ìž�ì�¸í•˜ê¸°'ì „ëžµì�€ 사용하지ë�„ 않는 메소드를 작성하는ë�°, 즉 필요치 않ì�€ 기능ì�„ í�´ëž˜ìФì—� 추가하는 ë�° 불필요한 시간ì�„ ë‚비하게 한다.
2.8.1. 스스로를 표현하ë�¼ ¶
- p.62
- ë‚´ê°€ ì‹¤ì œë¡œëŠ” 비지니스 로ì§�ì—� ì–´ë–¤ UI 코드로 삽입하지 않았다는 사실ì�„ 기억하기 바란다.
- ë‚´ê°€ ì‹¤ì œë¡œëŠ” 비지니스 로ì§�ì—� ì–´ë–¤ UI 코드로 삽입하지 않았다는 사실ì�„ 기억하기 바란다.
2.8.2. ìž�바빈즈와 ìŠ¤íŠ¸ëŸ¿ì¸ ¶
- p63
- 불행히� 아무� �러한 getter/setter를 �런 ��대로 사용하지 않았다.
- 불행히� 아무� �러한 getter/setter를 �런 ��대로 사용하지 않았다.
2.8.3. ë¦¬íŒ©í† ë§� ¶
- p65
- ì�´í�´ë¦½ìŠ¤ëŠ” 현재 프로ì �트ì�˜ 범위ì—�서만 ë¦¬íŒ©í† ë§�í•´ 준다.
- ë‘�번째로, ìž�ë�™í™”ë�œ ë¦¬íŒ©í† ë§�ì�€ 단순한 작업ì—�는 매우 휼ë¥í•˜ê²Œ ë�™ìž‘하지만 í�° 변화ì—�는 ê·¸ë ‡ì§€ 못하다.
- 코드가 올바른 ë°©ì‹�으로 구조화ë�˜ì§€ 않았기 때문ì—� ìœ ì§€ 보수가 í•„ìš” ì�´ìƒ�으로 ì–´ë µë‹¤ëŠ” 것ì�´ë‹¤. ì�´ëŸ° 경우 ë¦¬íŒ©í† ë§�ì�´ 아닌 프로그램ì�˜ 재디ìž�ì�¸ì�´ 필요하다.
- ì�´í�´ë¦½ìŠ¤ëŠ” 현재 프로ì �트ì�˜ 범위ì—�서만 ë¦¬íŒ©í† ë§�í•´ 준다.
2.8.4. get/set 없는 ì‚¶ ¶
- p 67
- CRC카드를 통한 첫 번째 시�는 '어림 잡기'� ��다.
- CRC카드를 통한 첫 번째 시�는 '어림 잡기'� ��다.
- p68
- ì–´ë–¤ 사람들ì�€ ì�´ëŸ¬í•œ ë°©ì‹�으로 CRC카드를 ì�´ìš©í•´ ì‹¤ì œ 프로그램까지ë�„ ë””ìž�ì�¸í•˜ì§€ë§Œ ì�´ ë°©ì‹�ì�€ 복잡한 대규모 프로그램까지 ìˆ˜ìš©í• ì •ë�„로 효율ì �ì�´ì§€ëŠ” 않다. 대부분ì�˜ 프로그래머는 ì •ì‹� 프로세스를 사용하여 UML로 ë�™ì � 모ë�¸ê³¼ ì •ì � 모ë�¸ì�„ 개발한다.
- 모ë�¸ë§�ì�€ ë‚´ê°€ 마지막 경험 법칙ì—�서 언급했듯ì�´ 가능한 'ë¬¸ì œ ë�„ë©”ì�¸'안ì—� 머물러 있어야 한다. 하지만 ë§Žì�€ 개발ìž�들ì�´ ìž�ì‹ ì�€ ë¬¸ì œ ë�„ë©”ì�¸ì�„ 모ë�¸ë§�í•˜ê³ ìžˆë‹¤ê³ ìƒ�ê°�하지만 ì‹¤ì œë¡œëŠ” 구현 ë ˆë²¨ì—�서 모ë�¸ë§�ì�„ 한다.
- ì–´ë–¤ 사람들ì�€ ì�´ëŸ¬í•œ ë°©ì‹�으로 CRC카드를 ì�´ìš©í•´ ì‹¤ì œ 프로그램까지ë�„ ë””ìž�ì�¸í•˜ì§€ë§Œ ì�´ ë°©ì‹�ì�€ 복잡한 대규모 프로그램까지 ìˆ˜ìš©í• ì •ë�„로 효율ì �ì�´ì§€ëŠ” 않다. 대부분ì�˜ 프로그래머는 ì •ì‹� 프로세스를 사용하여 UML로 ë�™ì � 모ë�¸ê³¼ ì •ì � 모ë�¸ì�„ 개발한다.
2.8.5. ì–¸ì œ getter와 setter를 사용해ë�„ 괜찮ì�€ê°€? ¶
- p69
- ��터를 '꺼내는(pull)'것보다는 '넣는(push)'것� 보다 좋다.
- 'ì–´ë–¤ ìš©ë�„로 사용ë� 지를 모ë‘� ì˜ˆì¸¡í• ìˆ˜ 없어'와 ê°™ì�€ ë¬¸ì œëŠ” ìž�ë°” 패키지 ì „ë°˜ì—� í�¼ì ¸ 있다. ì�´ëŸ° 경우 ì�´ë¯¸ ë§�했듯ì�´ ê°�ì²´ì—�서 ëª¨ë“ getter와 setter를 ì œê±°í• ìˆ˜ 없다.
- ��터를 '꺼내는(pull)'것보다는 '넣는(push)'것� 보다 좋다.
3. ì�¸í„°íŽ˜ì�´ìŠ¤ë¡œ 프로그래ë°�하기 ê·¸ë¦¬ê³ ëª‡ ê°œì�˜ ìƒ�성 패턴 ¶
- 75p
- ì�¸í„°íŽ˜ì�´ìФ ê´€ì �ì—�서 프로그래ë°� 하는 것ì�€ OO 시스템ì�˜ 기본 ê°œë…�ì�´ë©° GoF와 ë””ìž�ì�¸ 패턴ì�€ ì�´ì�˜ 구체ì �ì�´ 예가 ë�œë‹¤.
- 하지만 ë§Žì�€ ìž�ë°” 프로그래머들ì�€ ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ ê±°ì�˜ 사용하지 ì•Šê³ extends 관계를 ë‚¨ìš©í•˜ê³ ìžˆë‹¤.
- 네 ì €ìš”. - 서지혜
- 네 ì €ìš”. - 서지혜
- ì�¸í„°íŽ˜ì�´ìФ ê´€ì �ì—�서 프로그래ë°� 하는 것ì�€ OO 시스템ì�˜ 기본 ê°œë…�ì�´ë©° GoF와 ë””ìž�ì�¸ 패턴ì�€ ì�´ì�˜ 구체ì �ì�´ 예가 ë�œë‹¤.
3.1. 왜 Extendsê°€ 나ì�œê°€? ¶
- 75p
- extends 키워드는 나�다.
- ... 명성 있는 ë””ìž�ì�´ë„ˆë�¼ë©´ 가능한 사용ì�„ ìž�ì œí• ì •ë�„로는 충분히 나ì�˜ë‹¤.
- ... 혹시ë�¼ë�„ ë‚´ê°€ extends를 ì ˆëŒ€ 사용하면 안 ë�œë‹¤ê³ ì£¼ìž¥í•˜ê³ ìžˆë‹¤ê³ ìƒ�ê°�하지는 ë§�기 바란다.
- ì•„ì €ì”¨ ë§Žì�´ 까임ì�˜ ì¦�ê±° -김준ì„�
- ì•„ì €ì”¨ ë§Žì�´ 까임ì�˜ ì¦�ê±° -김준ì„�
- extends 키워드는 나�다.
- ë””ìž�ì�¸ 패턴ì�€ í�¬ê²Œ ë³´ë©´ 구현 ìƒ�ì†�(extends)ì�„ ì�¸í„°íŽ˜ì�´ìФ ìƒ�ì†�(implements)으로 바꾸는 방법ì�„ ì„¤ëª…í•˜ê³ ìžˆë‹¤.
- "ë§Žì�€ 사람들ì�´ '우리 회사ì�˜ ì œí’ˆì�€ C++ì�„ ì�´ìš©í•´ 만들었기 때문ì—� ê°�ì²´ 지향ì �입니다' ë�¼ê³ 설명했다는 CEOì—� 대한 ì�´ì•¼ê¸°ë¥¼ 한다. 그런ë�° ì�´ 중 ì–´ë–¤ ì�´ë“¤ì�€ ì�´ ì�´ì•¼ê¸°ê°€ ë†�ë‹´ì�´ëž€ 사실ì�„ ëª¨ë¥´ê³ ìžˆë‹¤.
- 재미있네요. 나는 mfc는 ê°�ì²´ 지향ì �ì�´ë‹¤ ë�¼ëŠ” ë§�ê³¼ 알수없는 í�´ëž˜ìŠ¤ë“¤ì�„ 만들어 ë†“ê³ ê°�체지향ì�´ë�¼ê³ 한 ë§�ì�„ 들ì�€ì �ì�´ 있습니다. - 서지혜
- 재미있네요. 나는 mfc는 ê°�ì²´ 지향ì �ì�´ë‹¤ ë�¼ëŠ” ë§�ê³¼ 알수없는 í�´ëž˜ìŠ¤ë“¤ì�„ 만들어 ë†“ê³ ê°�체지향ì�´ë�¼ê³ 한 ë§�ì�„ 들ì�€ì �ì�´ 있습니다. - 서지혜
- �바 프로그래머들� 종종 extends와 같� 언어� 기능� �체 지향 �체와 혼�하곤 한다.
- 네 ì €ìš”. - 서지혜
- 네 ì €ìš”. - 서지혜
- 다형성ì�´ëž€ ê°œë…�ì�€ OOì�˜ ê³ ìœ í•œ 특성ì�´ë©°, 다형성ì�„ 사용하지 않는 프로그램ì�€ ê°�ì²´ 지향ì �ì�´ì§€ 않다는 주장ì�€ 설ë“�ë ¥ìžˆë‹¤.
- OO 시스템ì—�서는 ë�°ì�´í„° 캡ìŠ�화가 ì„ íƒ�ì�´ 아닌 필수ì�´ë‹¤.
- extends와 implements ê°„ì�˜ ìœ ì‚¬ì„±ì�€ C++ 언어ì—�서는 명확하다. C++는 ì�´ 둘ì�„ 구분하지 않기 때문ì�´ë‹¤.
- C++ì�„ ë°°ìš°ê³ ìž�바를 ë°°ìš°ë©´ ì�µìˆ™í•œ 구현 ìƒ�ì†�ì�„ ë§Žì�´ 사용하게 ë�˜ì§€. C++ì—�ë�„ ì�¸í„°íŽ˜ì�´ìФì�˜ ê°œë…�ì�´ 있지만 시작부터 구체 í�´ëž˜ìŠ¤ë¥¼ 만드는 습관때문ì—� ê±°ì�˜ ì“°ì§€ 않았었다. - 서지혜
- C++ì�„ ë°°ìš°ê³ ìž�바를 ë°°ìš°ë©´ ì�µìˆ™í•œ 구현 ìƒ�ì†�ì�„ ë§Žì�´ 사용하게 ë�˜ì§€. C++ì—�ë�„ ì�¸í„°íŽ˜ì�´ìФì�˜ ê°œë…�ì�´ 있지만 시작부터 구체 í�´ëž˜ìŠ¤ë¥¼ 만드는 습관때문ì—� ê±°ì�˜ ì“°ì§€ 않았었다. - 서지혜
3.2.1. ìœ ì—°ì„±ì�˜ ìƒ�실 ¶
- 77p
- 구현 ìƒ�ì†�ì�´ ë�„대체 왜 나ì� 까? 명시ì �으로 구체 í�´ëž˜ìФì�˜ ì�´ë¦„ì�„ 사용하면 íŠ¹ì • 구현ì—� 종ì†�ë�˜ëŠ”ë�° ì�´ëŠ” ê²°ê³¼ì �으로 ìˆ˜ì •ì�„ í•„ìš” ì�´ìƒ�으로 ì–´ë µê²Œ ë§Œë“ ë‹¤.
- 구현 ìƒ�ì†�ì�´ ë�„대체 왜 나ì� 까? 명시ì �으로 구체 í�´ëž˜ìФì�˜ ì�´ë¦„ì�„ 사용하면 íŠ¹ì • 구현ì—� 종ì†�ë�˜ëŠ”ë�° ì�´ëŠ” ê²°ê³¼ì �으로 ìˆ˜ì •ì�„ í•„ìš” ì�´ìƒ�으로 ì–´ë µê²Œ ë§Œë“ ë‹¤.
- 78p
- ì• ìž�ì�¼ ë°©ë²•ë¡ ì�´ ëª¨ë“ í”„ë¡œì �트ì—� 들어맞는 것ì�€ 아니지만, 개발 기간 ë�™ì•ˆ 요구 사í•ì�˜ 변화가 있는 중소 규모 프로ì �트ì—�는 매우 효과ì �ì�´ë‹¤.
- 중소규모 ë§�ê³ ëŒ€ê·œëª¨ 프로ì �트는 어떨까...? - 김준ì„�
- 중소규모 ë§�ê³ ëŒ€ê·œëª¨ 프로ì �트는 어떨까...? - 김준ì„�
- ì• ìž�ì�¼ ë°©ë²•ë¡ ì�´ ëª¨ë“ í”„ë¡œì �트ì—� 들어맞는 것ì�€ 아니지만, 개발 기간 ë�™ì•ˆ 요구 사í•ì�˜ 변화가 있는 중소 규모 프로ì �트ì—�는 매우 효과ì �ì�´ë‹¤.
- ì• ìž�ì�¼ 병행 개발ì�˜ 중심ì—�는 ìœ ì—°ì„±ì�´ëž€ ê°œë…�ì�´ 있다. 새로 추가ë�œ 요구 사í•ì�„ 쉽게 ë°˜ì˜�í• ìˆ˜ 있는 코드를 ë§Œë“ ë‹¤ëŠ” 것ì�´ë‹¤. ë˜�한 아마ë�„ í•„ìš”í• ì§€ë�„ 모르는 기능ì�„ 구현하기보다는 ê¼ í•„ìš”í•œ 기능ì�„ 구현하ë�˜, 프로그램ì�€ 변화를 ìˆ˜ìš©í• ìˆ˜ 있어야 한다.
- ì• ìž�ì�¼ì�´ëž€ 민첩하게 대ì�‘한다는 뜻ì�´ë‹¤. ì�´ëŸ° ì�˜ë¯¸ì—�서 ì• ìž�ì�¼ì�´ 변화를 ìˆ˜ìš©í• ìˆ˜ 있는 ê°�ì²´ 지향ì�„ 사용하는 것ì�´ 당연한듯하다. - 서지혜
- ì• ìž�ì�¼ì�´ëž€ 민첩하게 대ì�‘한다는 뜻ì�´ë‹¤. ì�´ëŸ° ì�˜ë¯¸ì—�서 ì• ìž�ì�¼ì�´ 변화를 ìˆ˜ìš©í• ìˆ˜ 있는 ê°�ì²´ 지향ì�„ 사용하는 것ì�´ 당연한듯하다. - 서지혜
- ... 변화는 �런 �으로 파급�다.
3.2.2. ê²°í•©ë�„ ¶
- 80p
- 예를 들면 ìƒ�수가 아닌 ëª¨ë“ í•„ë“œëŠ” í•ìƒ� privateì�´ì–´ì•¼ 한다. ì •ë§�? 예외는 없다. ì ˆëŒ€ë¡œ!
- protected ì�¸ìŠ¤í„´ìŠ¤ 변수는 ì •ë§� ì—겹다. protected 변수는 publicì�„ ì�˜ë¯¸í•˜ëŠ” 다른 방법ì�¼ ë¿�ì�´ë‹¤.
- 나는 구현 ìƒ�ì†�ì�„ ì‚¬ìš©í• ë•Œ get/setì�„ 만드는 것ë�„ 귀찮아 protected를 ì�¼ì—ˆëŠ”ë�°, 마치 나ì—�게 하는 ë§� 같군. 기분ì�´ 안좋아진다... - 서지혜
- 나는 구현 ìƒ�ì†�ì�„ ì‚¬ìš©í• ë•Œ get/setì�„ 만드는 것ë�„ 귀찮아 protected를 ì�¼ì—ˆëŠ”ë�°, 마치 나ì—�게 하는 ë§� 같군. 기분ì�´ 안좋아진다... - 서지혜
- 예를 들면 ìƒ�수가 아닌 ëª¨ë“ í•„ë“œëŠ” í•ìƒ� privateì�´ì–´ì•¼ 한다. ì •ë§�? 예외는 없다. ì ˆëŒ€ë¡œ!
- p81
- 나는 개발ì�„ 하면서 OO ì›�ì¹™ ì �ìš©ì�˜ '엄격성(strictness)'ê³¼ 코드를 빨리 ìž‘ì„±í•˜ê³ ìœ ì§€ 보수하기 좋ì�€ 코드를 작성하는 것 사ì�´ì—� 높ì�€ ìƒ�관관계가 있다는 사실ì�„ 깨달았다.
- 나는 개발ì�„ 하면서 OO ì›�ì¹™ ì �ìš©ì�˜ '엄격성(strictness)'ê³¼ 코드를 빨리 ìž‘ì„±í•˜ê³ ìœ ì§€ 보수하기 좋ì�€ 코드를 작성하는 것 사ì�´ì—� 높ì�€ ìƒ�관관계가 있다는 사실ì�„ 깨달았다.
3.2.3. 깨지기 쉬운 기반 í�´ëž˜ìФ ë¬¸ì œ ¶
- p81
- 기반 í�´ëž˜ìŠ¤ëŠ” 기반 í�´ëž˜ìŠ¤ë§Œì�„ 따로 ë–¨ì–´ëœ¨ë ¤ ë†“ê³ ì•ˆì „í•˜ê²Œ ìˆ˜ì •í• ìˆ˜ 없으며, ëª¨ë“ íŒŒìƒ� í�´ëž˜ìŠ¤ë¥¼ 함께 ì‚´íŽ´ë³´ê³ í…ŒìŠ¤íŠ¸í•´ 보아야 한다.
- 슈í�¼ í�´ëž˜ìŠ¤ë¥¼ ìˆ˜ì •í•˜ë©´ 알수없는 새ë�¼ ì—�러들ì�´ 창발한다ㅋㅋㅋ - 서지혜
- 슈í�¼ í�´ëž˜ìŠ¤ë¥¼ ìˆ˜ì •í•˜ë©´ 알수없는 새ë�¼ ì—�러들ì�´ 창발한다ㅋㅋㅋ - 서지혜
- 기반 í�´ëž˜ìŠ¤ëŠ” 기반 í�´ëž˜ìŠ¤ë§Œì�„ 따로 ë–¨ì–´ëœ¨ë ¤ ë†“ê³ ì•ˆì „í•˜ê²Œ ìˆ˜ì •í• ìˆ˜ 없으며, ëª¨ë“ íŒŒìƒ� í�´ëž˜ìŠ¤ë¥¼ 함께 ì‚´íŽ´ë³´ê³ í…ŒìŠ¤íŠ¸í•´ 보아야 한다.
- p86
- 구현 ìƒ�ì†�ì�„ 사용하면 기반 í�´ëž˜ìŠ¤ë¥¼ ìˆ˜ì •í• ë•Œë§ˆë‹¤ 파ìƒ� í�´ëž˜ìŠ¤ë“¤ì�´ ì œëŒ€ë¡œ ìž‘ë�™í•˜ëŠ”ì§€ë¥¼ 테스트해야 한다.
- 구현 ìƒ�ì†�ì�„ 사용하면 기반 í�´ëž˜ìŠ¤ë¥¼ ìˆ˜ì •í• ë•Œë§ˆë‹¤ 파ìƒ� í�´ëž˜ìŠ¤ë“¤ì�´ ì œëŒ€ë¡œ ìž‘ë�™í•˜ëŠ”ì§€ë¥¼ 테스트해야 한다.
- p87
- 기반 í�´ëž˜ìŠ¤ë¥¼ ìˆ˜ì •í• ë•Œë§ˆë‹¤ 파ìƒ� í�´ëž˜ìŠ¤ë¥¼ ê²€í† í•´ 보아야 한다면 ì�´ëŠ” 기반 í�´ëž˜ìŠ¤ë¥¼ í™•ìž¥í•˜ê³ ìžˆëŠ” 것ì�´ 아니ë�¼ ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ êµ¬í˜„í•˜ê³ ìžˆëŠ” 것ì�´ë‹¤.
- ê·¸ëŸ¬ê³ ë³´ë‹ˆ ì�¼ì�¼ì�´ 오버ë�¼ì�´ë”©í• ë°”ì—�는 ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ implements하는게 ë�” 나ì�„거같네? - 서지혜
- ê·¸ëŸ¬ê³ ë³´ë‹ˆ ì�¼ì�¼ì�´ 오버ë�¼ì�´ë”©í• ë°”ì—�는 ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ implements하는게 ë�” 나ì�„거같네? - 서지혜
- 기반 í�´ëž˜ìŠ¤ë¥¼ ìˆ˜ì •í• ë•Œë§ˆë‹¤ 파ìƒ� í�´ëž˜ìŠ¤ë¥¼ ê²€í† í•´ 보아야 한다면 ì�´ëŠ” 기반 í�´ëž˜ìŠ¤ë¥¼ í™•ìž¥í•˜ê³ ìžˆëŠ” 것ì�´ 아니ë�¼ ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ êµ¬í˜„í•˜ê³ ìžˆëŠ” 것ì�´ë‹¤.
3.2.4. 다중 ìƒ�ì†� ¶
- p90
- 구현 ��� '나�다면' 분명 다중 구현 ��� � 나�다.
- 구현 ��� '나�다면' 분명 다중 구현 ��� � 나�다.
3.2.5. í”„ë ˆìž„ì›Œí�¬ ¶
- p91
- 깨지기 쉬운 기반 í�´ëž˜ìФ ë¬¸ì œë¥¼ í”„ë ˆìž„ì›Œí�¬ 기반 프로그래ë°�ì—� 대한 언급 ì—†ì�´ ë§ˆì¹ ìˆ˜ëŠ” 없다. MFC(Microsoft's Foundation Class) ë�¼ì�´ë¸ŒëŸ¬ë¦¬ì™€ ê°™ì�€ í”„ë ˆìž„ì›Œí�¬ëŠ” í�´ëž˜ìФ ë�¼ì�´ë¸ŒëŸ¬ë¦¬ë¥¼ 만드는 ì�¸ê¸°ìžˆëŠ” 방법ì�´ ë�˜ì—ˆë‹¤.
- 나는 처ì�Œë¶€í„° MFCê°€ 별로 마ì�Œì—� 안들었다. 기능ì�„ 하나 êµ¬í˜„í•˜ë ¤ë©´ ì�´ê³³ì €ê³³ì�„ ì†�대야 해서.. - 서지혜
- 나는 처ì�Œë¶€í„° MFCê°€ 별로 마ì�Œì—� 안들었다. 기능ì�„ 하나 êµ¬í˜„í•˜ë ¤ë©´ ì�´ê³³ì €ê³³ì�„ ì†�대야 해서.. - 서지혜
- 마ì�´í�¬ë¡œì†Œí”„트ì�˜ ë¬¸ì œ í•´ê²° ë°©ì‹�ì�´ í•ìƒ� 올바른 것ì�€ 아니다.
- 수경�가 �어주었� MS사� ��들� �하는건 �움� 안�다는게 기억나는군. - 김준�
- 수경�가 �어주었� MS사� ��들� �하는건 �움� 안�다는게 기억나는군. - 김준�
- 깨지기 쉬운 기반 í�´ëž˜ìФ ë¬¸ì œë¥¼ í”„ë ˆìž„ì›Œí�¬ 기반 프로그래ë°�ì—� 대한 언급 ì—†ì�´ ë§ˆì¹ ìˆ˜ëŠ” 없다. MFC(Microsoft's Foundation Class) ë�¼ì�´ë¸ŒëŸ¬ë¦¬ì™€ ê°™ì�€ í”„ë ˆìž„ì›Œí�¬ëŠ” í�´ëž˜ìФ ë�¼ì�´ë¸ŒëŸ¬ë¦¬ë¥¼ 만드는 ì�¸ê¸°ìžˆëŠ” 방법ì�´ ë�˜ì—ˆë‹¤.
- p92
- 구현 ìƒ�ì†� 기반 아키í…�처는 깨지기 쉬운 기반 í�´ëž˜ìФ ë¬¸ì œ 외ì—�ë�„ 너무 ë§Žì�€ í�´ëž˜ìŠ¤ë¥¼ 구현해 주어야 하는 ë¬¸ì œë¥¼ ê°–ê³ ìžˆë‹¤.
- 구현 ìƒ�ì†� 기반 아키í…�처는 깨지기 쉬운 기반 í�´ëž˜ìФ ë¬¸ì œ 외ì—�ë�„ 너무 ë§Žì�€ í�´ëž˜ìŠ¤ë¥¼ 구현해 주어야 하는 ë¬¸ì œë¥¼ ê°–ê³ ìžˆë‹¤.
3.2.6. Template method와 Factory Method 패턴 ¶
- p99
- Factory Method 패턴ì�€ 좋ì�€ ì„ íƒ�ì�´ 아니었다. ì�´ë²ˆ 장ì�˜ ë’¤ì—�서 살펴볼 Strategy 패턴 등ì�€ Factory Method 패턴ì�˜ ë©‹ì§„ 대안ì�´ ë�œë‹¤.
- 즉 아무ë�„ í•„ìš”í•˜ë‹¤ê³ ìš”êµ¬í•˜ì§€ 않ì�€ 부분까지 ìœ ì—°í•˜ë‹¤. ì�´ì™€ ê°™ì�€ 복잡ë�„를 필요로 하는 시스템ì�´ ì‹¤ì œë¡œ 있ì�„지는 ëª¨ë¥´ê² ì§€ë§Œ, 스윙ì�„ 사용하다 ë³´ë©´ "왜 ì�´ì •ë�„ì�˜ ìœ ì—°ì„±ì�´ í•„ìš”í• ê¹Œ?" ë�¼ëŠ” ìƒ�ê°�ì�„ ìž�주하게 ë�˜ë©°, ë˜�한 ê³¼ë�„한 ìœ ì—°ì„±ìœ¼ë¡œ ì�¸í•œ 복잡함ì�´ 별 ì�´ì � ì—†ì�´ 개발 기간ì�„ 길게 ë§Œë“ ë‹¤.
- 아오... 스윙 진짜! -김준�
- 아오... 스윙 진짜! -김준�
- Factory Method 패턴ì�€ 좋ì�€ ì„ íƒ�ì�´ 아니었다. ì�´ë²ˆ 장ì�˜ ë’¤ì—�서 살펴볼 Strategy 패턴 등ì�€ Factory Method 패턴ì�˜ ë©‹ì§„ 대안ì�´ ë�œë‹¤.
3.2.7. 깨지기 쉬운 기반 í�´ëž˜ìФ ë¬¸ì œ ì •ë¦¬ ¶
- p101
- 여러분ì�€ '꼼수'ì—� 대한 ìƒ�ê°�í• í•„ìš”ê°€ 없는 코드를 작성해야 하기 때문ì�´ë‹¤.
- 프로그램ì�„ ì •ìƒ�ì �으로 ë�™ìž‘하게 í• ìˆ˜ 있는 꼼수를 발견했다면 ë� 그런대로 괜찮다. 하지만 ë‚´ 주장ì�˜ 핵심ì�€ ì• ì´ˆì—� ìƒ�ì†�으로 ì�¸í•œ ë¬¸ì œê°€ ë°œìƒ�하지 않ë�„ë¡� 했어야 한다는 것ì�´ë‹¤.
- ê·¸ë ‡ì§€.. - 서지혜
- ê·¸ë ‡ì§€.. - 서지혜
- 여러분ì�€ '꼼수'ì—� 대한 ìƒ�ê°�í• í•„ìš”ê°€ 없는 코드를 작성해야 하기 때문ì�´ë‹¤.
- p103
- ëª¨ë“ ì„ íƒ�ì—�는 íŠ¸ë ˆì�´ë“œ 오프가 있으며 해당 방법과 ì�´ë¥¼ ëŒ€ì²´í• ìˆ˜ 있는 방법ì�˜ 장ì �ê³¼ 단ì �ì�„ 잘 í—¤ì•„ë ¤ 조율해야 í• ê²ƒì�´ë‹¤.
- ëª¨ë“ ì„ íƒ�ì—�는 íŠ¸ë ˆì�´ë“œ 오프가 있으며 해당 방법과 ì�´ë¥¼ ëŒ€ì²´í• ìˆ˜ 있는 방법ì�˜ 장ì �ê³¼ 단ì �ì�„ 잘 í—¤ì•„ë ¤ 조율해야 í• ê²ƒì�´ë‹¤.
3.3. ì–¸ì œ extends를 사용해ë�„ 좋ì�€ê°€? ¶
- p103
- ì�´ì œ ì–¸ì œ extends 관계를 사용해ë�„ 좋ì�„ì§€ ë…¼ì�˜í•´ ë³´ë�„ë¡� 하ìž�.
- ìš°ì„ í�´ëž˜ìФ ì •ê·œí™”(ë�°ì�´í„°ë² ì�´ìФ ë””ìž�ì�¸ì—�서 ë¹Œë ¤ì˜¨ 용어ì�´ë‹¤)를 í• ë•Œ ìœ ìš©í•˜ê²Œ ì‚¬ìš©í• ìˆ˜ 있다.
- ê·¸ë ‡êµ°. ì •ê·œí™” 계층구조는 위ì—� 있는 코드를 아래ì—�서 ì�¨ì„œ 만드는거니까 ìƒ�ì†�ì�„ ì�´ìš©í•˜ëŠ”ê²Œ 편하다는거군? ì˜ˆì œ 없나 ê·¼ë�°? - 김준ì„�
- ê·¸ë ‡êµ°. ì •ê·œí™” 계층구조는 위ì—� 있는 코드를 아래ì—�서 ì�¨ì„œ 만드는거니까 ìƒ�ì†�ì�„ ì�´ìš©í•˜ëŠ”ê²Œ 편하다는거군? ì˜ˆì œ 없나 ê·¼ë�°? - 김준ì„�
- 디��� 하는 � 어떤 방법� 따르��는 결과� � �향� 미친다.
- ì�´ì œ ì–¸ì œ extends 관계를 사용해ë�„ 좋ì�„ì§€ ë…¼ì�˜í•´ ë³´ë�„ë¡� 하ìž�.
- p104
- 올바른 OOë””ìž�ì�¸ì�€ 다ì�Œê³¼ ê°™ì�€ ê³¼ì •ì�„ 밟는다.
- 여기 5개가 있는� �것� 외워야 하는가!? - 김준�
- 여기 5개가 있는� �것� 외워야 하는가!? - 김준�
- ë�™ì � 모ë�¸ë§�으로부터 í�´ëž˜ìФ 다ì�´ì–´ê·¸ëž¨ì�„ ë�„출하ë�¼. ì�´ë ‡ê²Œ 하면 ì‹¤ì œ 필요한 ì—°ì‚°ê³¼ 관계만ì�´ í�¬í•¨ë�˜ê¸° 때문ì—� ì •ì � 모ë�¸ì�´ 현실ì �ì�´ ë�˜ê³ 가벼워진다.
- 형진ì�´ê°€ ì§€ë�„해준 ë�™ì � 모ë�¸ë§�으로 우리가 í•˜ê³ ìžˆë�˜ DB와 ìž„ìƒ�ì�´ 하는 SE를 모ë�¸ë§�í–ˆì�„때는 ì°¸ 재밌었지. 확실히. ë‚´ê°€ ì§ í”„ë¡œê·¸ëž¨ë³´ë‹¨ 복잡ë�„ê°€ 낮아보였어. 부럽. - 김준ì„�
- 형진ì�´ê°€ ì§€ë�„해준 ë�™ì � 모ë�¸ë§�으로 우리가 í•˜ê³ ìžˆë�˜ DB와 ìž„ìƒ�ì�´ 하는 SE를 모ë�¸ë§�í–ˆì�„때는 ì°¸ 재밌었지. 확실히. ë‚´ê°€ ì§ í”„ë¡œê·¸ëž¨ë³´ë‹¨ 복잡ë�„ê°€ 낮아보였어. 부럽. - 김준ì„�
- 올바른 OOë””ìž�ì�¸ì�€ 다ì�Œê³¼ ê°™ì�€ ê³¼ì •ì�„ 밟는다.
- p105
- 'is-a'는 그리 훌ë¥í•œ ë””ìž�ì�¸ ë�„구가 아니다. 우리가 늘 사용하는 ìž�ì—°ì–´ì—� 휘둘리지 ë§�ìž�.
- í�´ëž˜ìФ ìƒ�ì†� 기반 계층구조ì�¼ë•ŒëŠ” ìœ ìš©í• ë“¯ 하지만. 우리가 ì›�하는 extends를 ì œê±°í•˜ëŠ” ë�™ì � ë””ìž�ì�¸ 시ì—�는 그리 ìœ ìš©í•œ ë�„구가 아닌것 같다. 'is-a'ê°€ 얼마나 ë‚ ìž˜ëª»ë�œ 길로 ì�´ë�Œì—ˆë�˜ê°€! - 김준ì„�
- í�´ëž˜ìФ ìƒ�ì†� 기반 계층구조ì�¼ë•ŒëŠ” ìœ ìš©í• ë“¯ 하지만. 우리가 ì›�하는 extends를 ì œê±°í•˜ëŠ” ë�™ì � ë””ìž�ì�¸ 시ì—�는 그리 ìœ ìš©í•œ ë�„구가 아닌것 같다. 'is-a'ê°€ 얼마나 ë‚ ìž˜ëª»ë�œ 길로 ì�´ë�Œì—ˆë�˜ê°€! - 김준ì„�
- 단순한 í�´ëž˜ìФ 계층 구조는 복잡한 계층 구조보다 ë§Œë“¤ê³ ìœ ì§€ 보수하기 쉽다. ë˜�한 ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ ì�´ìš©í•˜ì—¬ 구현 ìƒ�ì†�ì�´ 하는 것과 ê°™ì�€ 작업ì�„ ìˆ˜í–‰í• ìˆ˜ë�„ 있다.
- ì�Œ.. 확실히 ì�´ ì±…ì�€ 구현ìƒ�ì†�ì�˜ 장ì �ì—�대해 충분히 알아들어야지 extendsì�˜ 장ì �ì—� 대해 ì�´í•´í• 수 있ì�„것 같다. ì�´ëŸ°ê²½ìš°ê°€ 어떤때ì�¸ì§€ 모르니까 - 김준ì„�
- ì�Œ.. 확실히 ì�´ ì±…ì�€ 구현ìƒ�ì†�ì�˜ 장ì �ì—�대해 충분히 알아들어야지 extendsì�˜ 장ì �ì—� 대해 ì�´í•´í• 수 있ì�„것 같다. ì�´ëŸ°ê²½ìš°ê°€ 어떤때ì�¸ì§€ 모르니까 - 김준ì„�
- 'is-a'는 그리 훌ë¥í•œ ë””ìž�ì�¸ ë�„구가 아니다. 우리가 늘 사용하는 ìž�ì—°ì–´ì—� 휘둘리지 ë§�ìž�.
- ìƒ�ì†�한 메소드ì—�서 예외를 ë�˜ì§€ì§€ ë§�ë�¼. 즉 리스코프 대체 ì›�ì¹™(LSP)를 지키ë�¼. LSP를 어기면 다형성ì�„ ì�´ìš©í•œ 코딩ì�„ í• ìˆ˜ ì—†ê³ , ê²°ê³¼ì �으로 개방 í��쇄ì�˜ ì›�ì¹™(OCP)ë�„ 지킬 수 없게 ë�œë‹¤.
- ê¸°ì–µí•´ì•¼í• ë“¯...? - 김준ì„�
- ê¸°ì–µí•´ì•¼í• ë“¯...? - 김준ì„�
3.4. extends ì œê±°í•˜ê¸° ¶
- p107
- 여러분ì�´ 시스템ì�„ ë¦¬íŒ©í† ë§�í•˜ê³ ìžˆë‹¤ ê°€ì •í•´ ë³´ìž�. 차근차근 시작해보ìž�.
- 천리길ë�„ 한걸ì�Œë¶€í„°. ì�´ 부분ì�´ 2장ì�˜ 알짜배기 ê°™ì�€ë�°. ì •ë§� 길다. ê·¸ë¦¬ê³ ìž¬ë°Œë‹¤. - 김준ì„�
- 천리길ë�„ 한걸ì�Œë¶€í„°. ì�´ 부분ì�´ 2장ì�˜ 알짜배기 ê°™ì�€ë�°. ì •ë§� 길다. ê·¸ë¦¬ê³ ìž¬ë°Œë‹¤. - 김준ì„�
- 여러분ì�´ 시스템ì�„ ë¦¬íŒ©í† ë§�í•˜ê³ ìžˆë‹¤ ê°€ì •í•´ ë³´ìž�. 차근차근 시작해보ìž�.
~~java
interface Employee
{ void youAreFired();
}
- ì§�ì›�ì�€ í•ìƒ� í•´ê³ ë� 준비를 해야한다. - 김준ì„�
3.4.1. íŒ©í† ë¦¬ì™€ 싱글톤 ¶
- p108
- ë§Žì�€ 패턴들ì�´ 구현 시 Abstract Factoryì—� ì�˜ì¡´ 하는 경우가 많기 때문ì—� Abstract Factory는 ì�¼ì¢…ì�˜ 빌딩 블ë¡�ì�´ ë�˜ëŠ” 패턴ì�´ë�¼ í• ìˆ˜ 있다.
- Abstract Factory는 다른ì�´ë“¤ì—�게 ë„�리 잘 ì•Œë ¤ì ¸(?) ì“°ì�´ëŠ” ìœ ìš©í•œ 패턴ì�¸ê°€ë³´ë‹¤ - 김준ì„�
- Abstract Factory는 다른ì�´ë“¤ì—�게 ë„�리 잘 ì•Œë ¤ì ¸(?) ì“°ì�´ëŠ” ìœ ìš©í•œ 패턴ì�¸ê°€ë³´ë‹¤ - 김준ì„�
- Abstract Factoryì�˜ ëª¨ë“ ì‹¤ì²´í™”ì—�서 공통ë�˜ëŠ” ì£¼ì œëŠ” íŒ©í† ë¦¬ë¥¼ 사용하여 ì •í™•í•œ 타입ì�„ 모르는 ê°�체를 ìƒ�성한다는 것ì�´ë‹¤.
- ë§Žì�€ 패턴들ì�´ 구현 시 Abstract Factoryì—� ì�˜ì¡´ 하는 경우가 많기 때문ì—� Abstract Factory는 ì�¼ì¢…ì�˜ 빌딩 블ë¡�ì�´ ë�˜ëŠ” 패턴ì�´ë�¼ í• ìˆ˜ 있다.
- p110
~~java
public static class EmployeeFactory
{ private Factory(){/*비어있다/}
public static Employee create()
{ return new Employee()
{ public void youAreFired(){/*많�코드*/}
}
}
}
- peon ì�´ëŸ°ê±° ì—†ì�´ 그냥 ë‚´ë¶€ í�´ëž˜ìŠ¤ë¥¼ Employee()를 implement시킨걸로 반환시켜버리는군. ì�´ë¦„ì¡°ì°¨ 없으니 private Peon으로 ë§Œë“ ê²ƒë³´ë‹¤ 심한ë�°? ì •ë§� ìƒ�ìƒ�ë�„ ëª»í• í�´ëž˜ìŠ¤ìž„ - 김준ì„�
- p111
- ìœ ì�¼ì„±'ê³¼ ì „ì— ì ‘ê·¼'ì�´ëž€ ì¡°ê±´ì�„ 만족시키면 Singleton 패턴ì�˜ 실체화ë�¼ í• ìˆ˜ 있다. Employee factory는 ë‘� ì¡°ê±´ì�„ 모ë‘� 만족시키므로 합당한 Singleton 패턴 실체화ì�´ë‹¤.
- ì „ì—ì ‘ê·¼ ì�´ëŸ°ê²Œ 많으면 관리하기 힘들다는거 ì•„ë…€? - 김준ì„�
- ì „ì—ì ‘ê·¼ ì�´ëŸ°ê²Œ 많으면 관리하기 힘들다는거 ì•„ë…€? - 김준ì„�
- ìœ ì�¼ì„±'ê³¼ ì „ì— ì ‘ê·¼'ì�´ëž€ ì¡°ê±´ì�„ 만족시키면 Singleton 패턴ì�˜ 실체화ë�¼ í• ìˆ˜ 있다. Employee factory는 ë‘� ì¡°ê±´ì�„ 모ë‘� 만족시키므로 합당한 Singleton 패턴 실체화ì�´ë‹¤.
3.4.2. Singletonì—�서ì�˜ ìŠ¤ë ˆë”© ì�´ìŠˆ ¶
- p113
- ëª¨ë“ ê²ƒì�„ static으로 하는 ì „ëžµì�€ ë‹¨ìˆœí•˜ê³ ë©‹ì§€ì§€ë§Œ ë§Žì�€ 경우 ì‚¬ìš©í• ìˆ˜ 없다.
- Gara Static Hell o! - 김준�
- Gara Static Hell o! - 김준�
- ëª¨ë“ ê²ƒì�„ static으로 하는 ì „ëžµì�€ ë‹¨ìˆœí•˜ê³ ë©‹ì§€ì§€ë§Œ ë§Žì�€ 경우 ì‚¬ìš©í• ìˆ˜ 없다.
- p114
~~java
class Singleton
{ private static Singleton instance = null;
public static instance()
{ if( instance == null)
{ instance = new Singleton();
}
return instance;
}
//...
}
- Javaì—�서 GUI등 í�´ëž˜ìФ ìž�ë�™ ìƒ�성 툴ì�„ 사용하면 대부분 ì € 모양ì�„ ì�´ìš©í•´ì„œ 나온다. ê·¼ë�° ì •ë§� 많으면 보기 ì§œì¦�난다. -김준ì„�
3.4.3. Double-Checked Locking(사용하지 ë§�ë�¼) ¶
- p116
- DCLì�„ ì—†ì• ëŠ” ì�¼ì�€ ë°”í€´ë²Œë ˆë¥¼ 박멸하는 ì�¼ì—� ë¹„ìœ ë�˜ê³¤ 한다. 10마리를 죽ì�´ë©´ 하수구ì—�서 1000마리가 기어 나온다.
- .... ë°”í€´ë²Œë ˆë�¼ë‹ˆ. ì�´ê±° 사람한테 ë¹„ìœ í•œê±°ìž„? - 김준ì„�
- .... ë°”í€´ë²Œë ˆë�¼ë‹ˆ. ì�´ê±° 사람한테 ë¹„ìœ í•œê±°ìž„? - 김준ì„�
- ì�´ ì£¼ì œì—� 대해 글ì�„ 쓸 때마다 DCL ë¬¸ì œë¥¼ í•´ê²°í–ˆë‹¤ê³ ìƒ�ê°�하는 '매우 똑똑한'프로그래머들로 부터 ìˆ˜ì‹ í†µì�˜ ë©”ì�¼ì�„ 받았다. 그들ì�€ 모ë‘� í‹€ë ¸ìœ¼ë©° ì–´ë– í•œ 꼼수ë�„ ì œëŒ€ë¡œ ë�™ìž‘하지 않는다. ë�” ì�´ìƒ� 내게 ë©”ì�¼ì�„ ë³´ë‚´ì§€ ë§�기를 바란다.
- ë‹¨ê³¨ì£¼ì œ. 얼마나 ë§Žì�´ 싸운거야? - 김준ì„�
- ë‹¨ê³¨ì£¼ì œ. 얼마나 ë§Žì�´ 싸운거야? - 김준ì„�
- DCLì�„ ì—†ì• ëŠ” ì�¼ì�€ ë°”í€´ë²Œë ˆë¥¼ 박멸하는 ì�¼ì—� ë¹„ìœ ë�˜ê³¤ 한다. 10마리를 죽ì�´ë©´ 하수구ì—�서 1000마리가 기어 나온다.
3.4.4. Singleton 죽ì�´ê¸° ¶
- p117
- 멋지게 커넥션� 닫는 방법� 없�까?
- íƒëŒ„스를 ì¶”ê³ ë¬¼êµ¬ë‚˜ë¬´ì„œì„œ 왼ì†�ì�„ 들어 ì½”ë�¼ë¦¬ë¥¼ 들어올린뒤 닫으면 멋질듯 - 김준ì„�
- íƒëŒ„스를 ì¶”ê³ ë¬¼êµ¬ë‚˜ë¬´ì„œì„œ 왼ì†�ì�„ 들어 ì½”ë�¼ë¦¬ë¥¼ 들어올린뒤 닫으면 멋질듯 - 김준ì„�
- 멋지게 커넥션� 닫는 방법� 없�까?
- p118
- 종료ìž�ì—� 대한 나ì�˜ ì�¼ë°˜ì �ì�¸ ì¡°ì–¸ì�€ '사용하지 ë§�ë�¼' ì�´ë‹¤.
- ê·¸ë¦¬ê³ ë©‹ì§€ê²Œ ë‹«ì�€ê²Œ 하지 ë§�ë�¼ëŠ” 것임 - 김준ì„�
- ê·¸ë¦¬ê³ ë©‹ì§€ê²Œ ë‹«ì�€ê²Œ 하지 ë§�ë�¼ëŠ” 것임 - 김준ì„�
- 종료ìž�ì—� 대한 나ì�˜ ì�¼ë°˜ì �ì�¸ ì¡°ì–¸ì�€ '사용하지 ë§�ë�¼' ì�´ë‹¤.
- p119
- �한 셧다운 훅 안�서 Singleton� 사용한다면 죽었다 �살아나는 좀비 Singleton� 만들 위험� 있다.
- ê·¸ë¦¬ê³ ì¢€ë¹„ê°€ 너ì�˜ 뇌를 ë¨¹ê² ì§€(Zombie ate your brain) - 김준ì„�
- ê·¸ë¦¬ê³ ì¢€ë¹„ê°€ 너ì�˜ 뇌를 ë¨¹ê² ì§€(Zombie ate your brain) - 김준ì„�
- �한 셧다운 훅 안�서 Singleton� 사용한다면 죽었다 �살아나는 좀비 Singleton� 만들 위험� 있다.
3.4.5. Abstract Factory 패턴 ¶
- p120
- 앞ì—�서 ê°�체를 ìƒ�ì„±í• ë•Œ Singleton 패턴과 Abstract Factory 패턴ì�´ ìž�주 함께 사용ë�œë‹¤ê³ 설명했다. 그러므로 Abstract Factoryì—� 대해 좀 ë�” 알아보기로 하ìž�.
- ê·¸ë ‡êµ°. 그러므로... - 김준ì„�
- ê·¸ë ‡êµ°. 그러므로... - 김준ì„�
- 앞ì—�서 ê°�체를 ìƒ�ì„±í• ë•Œ Singleton 패턴과 Abstract Factory 패턴ì�´ ìž�주 함께 사용ë�œë‹¤ê³ 설명했다. 그러므로 Abstract Factoryì—� 대해 좀 ë�” 알아보기로 하ìž�.
- ê²°ê³¼ì �으로 프로그래머는 외부 코드ì—� ì˜�í–¥ì�„ 미치지 않으면서 구체 Peon í�´ëž˜ìŠ¤ë¥¼ 마ì�ŒëŒ€ë¡œ, 심지어 ê·¸ ì�´ë¦„ì¡°ì°¨ë�„ 바꿀 수 있다.
- 근� �름� 없으면 어떻게 죽�나? youAreFired()같� �살� 만들어놔야하나? garbage Collector를 �용해야하나? -김준�
- 근� �름� 없으면 어떻게 죽�나? youAreFired()같� �살� 만들어놔야하나? garbage Collector를 �용해야하나? -김준�
- p121
- Abstract Factory 패턴ì�€ ê´€ë ¨ë�œ ì�¼ë ¨ì�˜ í�´ëž˜ìФ 'êµ°(family)'중 하나를 ìƒ�성한다.
- Abstract Factory 패턴ì�€ ê´€ë ¨ë�œ ì�¼ë ¨ì�˜ í�´ëž˜ìФ 'êµ°(family)'중 하나를 ìƒ�성한다.
- p122
- Abstract Factory 패턴ì�˜ 주요 장ì �ì�€ 격리(isolation)ì�´ë©°, ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ 통해 ê°�ì²´ ìƒ�성ì�„ 가능 하ë�„ë¡� 해준다.
- Abstract Factory 패턴ì�˜ 주요 장ì �ì�€ 격리(isolation)ì�´ë©°, ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ 통해 ê°�ì²´ ìƒ�성ì�„ 가능 하ë�„ë¡� 해준다.
- p123
- ì�´ë¦„ì�´ 있는 í�´ëž˜ìФ ëŒ€ì‹ ì�µëª…ì�˜ ë‚´ë¶€ í�´ëž˜ìŠ¤ë¥¼ 사용하여 코드를 단순화시켰다(단순함ì�€ ì–¸ì œë‚˜ 좋다)
- 난 ì •ë§� ì§„ì§œ 단순한거 좋아해. ê·¼ë�° ì�´ê±° 여러개를 만들면..? ì�´ë¦„ 안줘ë�„ ë�˜ëŠ”ê±° 맞는겨? - 김준ì„�
- 난 ì •ë§� ì§„ì§œ 단순한거 좋아해. ê·¼ë�° ì�´ê±° 여러개를 만들면..? ì�´ë¦„ 안줘ë�„ ë�˜ëŠ”ê±° 맞는겨? - 김준ì„�
- ì�´ë¦„ì�´ 있는 í�´ëž˜ìФ ëŒ€ì‹ ì�µëª…ì�˜ ë‚´ë¶€ í�´ëž˜ìŠ¤ë¥¼ 사용하여 코드를 단순화시켰다(단순함ì�€ ì–¸ì œë‚˜ 좋다)
- p124
- ìž�바가 ì�¸í„°íŽ˜ì�´ìФì—�서 static 메소드를 ì§€ì›�했다면 좋았겟지만 현재는 ê·¸ë ‡ì§€ 않다.
- 과거ì—�ë�„ ê·¸ëž¬ê³ í˜„ìž¬ê¹Œì§€ ê·¸ë ‡ì§€ 않다는거지? 미래ì—�는 ì €ìž�ê°€ ë§�하는 ì�´ë””ì—„ì�´ ë�˜ì—ˆìœ¼ë©´ ì¢‹ê² êµ° - 김준ì„�
- 과거ì—�ë�„ ê·¸ëž¬ê³ í˜„ìž¬ê¹Œì§€ ê·¸ë ‡ì§€ 않다는거지? 미래ì—�는 ì €ìž�ê°€ ë§�하는 ì�´ë””ì—„ì�´ ë�˜ì—ˆìœ¼ë©´ ì¢‹ê² êµ° - 김준ì„�
- ìž�바가 ì�¸í„°íŽ˜ì�´ìФì—�서 static 메소드를 ì§€ì›�했다면 좋았겟지만 현재는 ê·¸ë ‡ì§€ 않다.
- 패턴ì�€ 여러 ë°©ì‹�으로 ì‹¤ì²´í™”í• ìˆ˜ 있다. 중요한 것ì�€ 문맥과 ì�˜ë�„ì�´ì§€ ì •ì � 구조가 아니다.
3.4.6. 패턴 비빔밥 ¶
- p124
- 'ê´€ì �ì�„ 바꾸면 ë³´ì�´ëŠ” 것ì�´ 다르다'는 것ì�„ 보여주는 ìž�ë°”ì�˜ í�¥ë¯¸ë¡œìš´ 예를 하나 ë�” 살펴보ìž�.
- 'ê´€ì �ì�„ 바꾸면 ë³´ì�´ëŠ” 것ì�´ 다르다'는 것ì�„ 보여주는 ìž�ë°”ì�˜ í�¥ë¯¸ë¡œìš´ 예를 하나 ë�” 살펴보ìž�.
- p125
- ê´€ì �ì�„ 바꾸어 ë³´ë©´
URLConnection� InputStream구현체들� �성하는 Abstract Factroy�기� 하다.
- ê´€ì �ì�„ 바꾸어 ë³´ë©´
- p126
- ì�´ ì˜ˆì œì�˜ 핵심ì�€ ê´€ì �ì�˜ ì „í™˜ì—� ì�µìˆ™í•´ì§€ìž�는 것ì�´ë‹¤.
- ì •ë§� ê·¸ëŸ¬ê³ ì‹¶ìŠµë‹ˆë‹¤. - 김준ì„�
- ì •ë§� ê·¸ëŸ¬ê³ ì‹¶ìŠµë‹ˆë‹¤. - 김준ì„�
- ì�´ ì˜ˆì œì�˜ 핵심ì�€ ê´€ì �ì�˜ ì „í™˜ì—� ì�µìˆ™í•´ì§€ìž�는 것ì�´ë‹¤.
3.4.7. íŒ©í† ë¦¬ë¥¼ ì�´ìš©í•œ ë�™ì � ìƒ�성 ¶
- p128
- 하드 코딩ì�„ 통해 ì–´ë–¤ ê°�체를 ìƒ�ì„±í• ì§€ë¥¼ ê²°ì •í•˜ê²Œ ë�˜ë©´ 프로그램ì�´ 실행ë�˜ê³ 잇는 ë�„중ì—�는 행위를 바꾸지 못한다.
- 첨� 하드 코딩� 봤�때. Hard지� 쓰는 �코딩� ��했었다. 나만그런가? - 김준�
- 첨� 하드 코딩� 봤�때. Hard지� 쓰는 �코딩� ��했었다. 나만그런가? - 김준�
- 하드 코딩ì�„ 통해 ì–´ë–¤ ê°�체를 ìƒ�ì„±í• ì§€ë¥¼ ê²°ì •í•˜ê²Œ ë�˜ë©´ 프로그램ì�´ 실행ë�˜ê³ 잇는 ë�„중ì—�는 행위를 바꾸지 못한다.
- p128
- ê·¸ë¦¬ê³ Class.forName()ì�„ ì�´ìš©í•˜ì—¬ 앞ì—�서 ë§Œë“ ì�´ë¦„ì—� 해당하는 Class ê°�체를 ìƒ�성하게 ë�œë‹¤.
- 진짜.. �바� 대해 나는 아� 반� 모르는듯 하다. - 김준�
- 진짜.. �바� 대해 나는 아� 반� 모르는듯 하다. - 김준�
- ê·¸ë¦¬ê³ Class.forName()ì�„ ì�´ìš©í•˜ì—¬ 앞ì—�서 ë§Œë“ ì�´ë¦„ì—� 해당하는 Class ê°�체를 ìƒ�성하게 ë�œë‹¤.
3.4.8. Command 패턴과 Strategy 패턴 ¶
- p131
- ê°�체를 ì¶”ìƒ�ì �ì�¸ 방법으로 ìƒ�성하는 ë�° ìœ ìš©í•œ 다른 패턴ì�€ Strategy 패턴ì�´ë‹¤. ê·¸ë¦¬ê³ Strategy 패턴ì�€ 좀 ë�” ì�¼ë°˜ì �ì�¸ 패턴ì�¸ Command 패턴ì�˜ 특별한 경우ë�¼ í• ìˆ˜ 있다.
- C혹ì�€ C++ì—�서는 ì•Œê³ ë¦¬ì¦˜ì�„ 구현하는 함수를 작성한 후 함수 í�¬ì�¸í„°ë¥¼ 넘겨주는 ë°©ì‹�으로 ì•Œê³ ë¦¬ì¦˜ì�„ ì „ë‹¬í• ìˆ˜ 있다.
- ì•„.. 함수 í�¬ì�¸í„°. 좀 ì‹ ê¸°í–ˆì—ˆì�Œ. Javaì—�ì„ Cì—�서보다는 ë§Žì�´ ì�´ 패턴들ì�´ ì�´ë””ì—„ì—� 가까워진듯. - 김준ì„�
- ì•„.. 함수 í�¬ì�¸í„°. 좀 ì‹ ê¸°í–ˆì—ˆì�Œ. Javaì—�ì„ Cì—�서보다는 ë§Žì�´ ì�´ 패턴들ì�´ ì�´ë””ì—„ì—� 가까워진듯. - 김준ì„�
- ê°�체를 ì¶”ìƒ�ì �ì�¸ 방법으로 ìƒ�성하는 ë�° ìœ ìš©í•œ 다른 패턴ì�€ Strategy 패턴ì�´ë‹¤. ê·¸ë¦¬ê³ Strategy 패턴ì�€ 좀 ë�” ì�¼ë°˜ì �ì�¸ 패턴ì�¸ Command 패턴ì�˜ 특별한 경우ë�¼ í• ìˆ˜ 있다.
- ìž�ë°” ìŠ¤ë ˆë“œëŠ” ì „í˜•ì �ì�¸ Command패턴ì�˜ 구현체ì�´ë‹¤.
- p132
- Strategy 패턴ì�€ íŠ¹ì • ì—°ì‚°ì�„ '어떻게' ìˆ˜í–‰í• ê²ƒì�¸ì§€ì—� 대한 ì „ëžµì�„ 캡ìŠ�화한 Strategy ê°�체를 ì „ë‹¬í•œë‹¤.
- Strategy 패턴ì�€ íŠ¹ì • ì—°ì‚°ì�„ '어떻게' ìˆ˜í–‰í• ê²ƒì�¸ì§€ì—� 대한 ì „ëžµì�„ 캡ìŠ�화한 Strategy ê°�체를 ì „ë‹¬í•œë‹¤.
- p135
- 사실 거� 대부분� �황�서 Strategy는 Factory Method� 좋� 대안� �다.
- 사실 거� 대부분� �황�서 Strategy는 Factory Method� 좋� 대안� �다.
4. ë�¼ì�´í”„ 게임 ¶
- p139
- 아마ë�„ ë�¼ì�´í”„ 게임ì�€ 지구ìƒ�ì—�서 가장 ë§Žì�´ 구현ë�œ ì• í”Œë¦¬ì¼€ì�´ì…˜ 중 하나ì�¼ 것ì�´ë‹¤.
- ì�´ Life Gameë§�ê³ Life Game 류를 뜻하는거겟지? - 김준ì„�
- ì�´ Life Gameë§�ê³ Life Game 류를 뜻하는거겟지? - 김준ì„�
- 10ê°œì�˜ ë””ìž�ì�¸ 패턴ì�„ ì‹¤ì œ 프로ì �트ì—�서 사용하는 것처럼 함께 사용해 볼것ì�´ë‹¤. 다행히 프로그램ì�´ ì�´í•´í•˜ì§€ ëª»í• ì •ë�„로 거대하지는 않다. í�´ëž˜ìŠ¤ì™€ ì�¸í„°íŽ˜ì�´ìŠ¤ë¥¼ 모ë‘� í•©ì³� 20ê°œ ë°–ì—� ë�˜ì§€ 않는다.
- ... ì�Œ.. 20ê°œ. GUIì“°ë©´ ê·¸ì •ë�„ 나오긴 í• ê²ƒê°™ì•„. - 김준ì„�
- ... ì�Œ.. 20ê°œ. GUIì“°ë©´ ê·¸ì •ë�„ 나오긴 í• ê²ƒê°™ì•„. - 김준ì„�
- 나ì�˜ ë�¼ì�´í”„ 구현ì�€ ìž�ë°” í�´ë�¼ì�´ì–¸íЏ 측 GUI ë�¼ì�´ë¸ŒëŸ¬ë¦¬(스윙)ì�„ 사용하며, 여러분ì�´ 스윙ì�˜ 기본ì �ì�¸ 기능ì�€ ì•Œê³ ìžˆë‹¤ê³ ê°€ì •í•œë‹¤.
- 'ë ˆë²¨ì�´ 낮아 해당 ì§€ì—ì—� ì§„ìž…í• ìˆ˜ 없습니다.','퀘스트를 수행하는ë�° 필요한 ì•„ì�´í…œì�„ ê°€ì§€ê³ ìžˆì§€ 않습니다'를 머리ì—� ë�„ìš°ì§€ 않ì�„수 있어서 좋군. - 김준ì„�
- 'ë ˆë²¨ì�´ 낮아 해당 ì§€ì—ì—� ì§„ìž…í• ìˆ˜ 없습니다.','퀘스트를 수행하는ë�° 필요한 ì•„ì�´í…œì�„ ê°€ì§€ê³ ìžˆì§€ 않습니다'를 머리ì—� ë�„ìš°ì§€ 않ì�„수 있어서 좋군. - 김준ì„�
- �번장�는 많� 코드가 나온다.
- 나는 종종 ì „ì²´ 코드를 보여주지 않는 책들 때문ì—� ì¢Œì ˆí•˜ê³¤ 했다.
- 마지막으로 ì�´ë²ˆ ìž�ì�˜ 코드는 ìµœì„ ì�˜ ë�¼ì�´í”„ 게임 구현ì�€ 아니다.
- 아마ë�„ ë�¼ì�´í”„ 게임ì�€ 지구ìƒ�ì—�서 가장 ë§Žì�´ 구현ë�œ ì• í”Œë¦¬ì¼€ì�´ì…˜ 중 하나ì�¼ 것ì�´ë‹¤.
4.1. ë�¼ì�´í”„ 얻기 ¶
- p140
- ë�¼ì�´í”„는 1장ì—�서 ë…¼ì�˜í•œ 것과 ê°™ì�€ 간단한 셀룰러 ì˜¤í† ë§ˆíƒ€ì�´ë‹¤.
- �류학�� 내 친구는 ��프 게임�서 발견�는 패턴� �간 사회�서 발견�는 행� 패턴� 연�시킨다는 �야기를 했다.
- 어떻게 만났�까 �금하다. - 김준�
- 어떻게 만났�까 �금하다. - 김준�
- ì „ì²´ì�˜ í–‰ë�™ì�€ ì •ë§�ì�´ì§€ í�¥ë¯¸ë¡ë‹¤.
- �간� 참 재밌어 - 김준�
- �간� 참 재밌어 - 김준�
- ë�¼ì�´í”„는 1장ì—�서 ë…¼ì�˜í•œ 것과 ê°™ì�€ 간단한 셀룰러 ì˜¤í† ë§ˆíƒ€ì�´ë‹¤.
- 서울대 컴퓨터 공학부ì�˜ 문병로 êµ�수는 ì–´ë–¤ 사람ì�˜ 창조성ì�€ ì–´ë ¤ì„œë¶€í„° ê·¸ 사람ì�´ 쌓아 놓ì�€ ì‚¬ê³ ë¹Œë”© 블ë¡�ì�˜ 질ì—� ì�˜í•´ ê²°ì •ë�œë‹¤ê³ 했다.
- 난 무슨ìƒ�ê°�ì�„ í–ˆì�„까? ì�¼ê¸°ë¥¼ ë³´ê³ ì‹¶ë‹¤. - 김준ì„�
- 난 무슨ìƒ�ê°�ì�„ í–ˆì�„까? ì�¼ê¸°ë¥¼ ë³´ê³ ì‹¶ë‹¤. - 김준ì„�
4.2. ë�¼ì�´í”„ 구조를 차트로 표현하기 ¶
- p143
- ì�´í•´í•˜ë ¤ í• ë•Œì—” ì •ì �ì�¸ 구조부터 살펴보는 것ì�´ í�° 그림ì�„ 잡기ì—� 좋다.
- 존나 좋쿤? - 김준�
- 존나 좋쿤? - 김준�
- ì�´í•´í•˜ë ¤ í• ë•Œì—” ì •ì �ì�¸ 구조부터 살펴보는 것ì�´ í�° 그림ì�„ 잡기ì—� 좋다.
- ì�´ 그림ì�€ 잡다한 세부 사í•ì�„ ìƒ�ëžµí•˜ê³ í•µì‹¬ ë””ìž�ì�¸ 패턴만ì�„ 보여준다.
- 실세계�서 패턴� 사용하는 법� 그대로 보여준다.
- ì�´ë“¤ 다ì�´ì–´ê·¸ëž¨ì�„ 프로그래머ì�¸ ë‚´ ì•„ë‚´ ë�°ì–´ë“œë¦¬ì—�게 처ì�Œ 보여주었ì�„ 때 그녀ì�˜ ë°˜ì�‘ì�€ "너무 복잡해요. ì�´ëŸ° 다ì�´ì–´ê·¸ëž¨ì�€ ë³´ê³ ì‹¶ì§€ 않ì�€ê±¸ìš”?" 였다. 하지만 앞으로 여러분과 함께 í• ê²ƒê³¼ ê°™ì�€ ë°©ì‹�으로 시스템ì—� 대해 ì‚´íŽ´ë³´ê³ ë‚œ ë’¤ì—� 그녀ì�˜ ë°˜ì�‘ì�€ "ì�´ 다ì�´ì–´ê·¸ëž¨ì�˜ í‘œí˜„ë ¥ì�€ ì •ë§� 대단하군요! í’�부하다(rich)는 ë§�ì�´ ì �í•©í• ê²ƒ 같아요"로 바뀌었다.
- ì•„ë‚´ë�„ 프로그래머다. ì§„ì •í•œ 화개장터시다. 마치 엄마 코딩봇처럼.. - 김준ì„�
- ì•„ë‚´ë�„ 프로그래머다. ì§„ì •í•œ 화개장터시다. 마치 엄마 코딩봇처럼.. - 김준ì„�
- '복잡한'ì—�서 'í’�부한'으로ì�˜ ì „ì�´ëŠ” 중요한 것ì�´ë©°, 여러분ì�´ 별 ì–´ë ¤ì›€ ì—†ì�´ 패턴ì�„ ì�‘ìš©í• ìˆ˜ 있ì�„ 때 ì�¼ì–´ë‚˜ëŠ” 현ìƒ� 중 하나ì�´ë‹¤.
- 패턴 '잘� 붙�기(cut-and-paste)'란 개�� 넌센스�다. 패턴� 멋지게 분리하여 갈�하게 잘� 붙� 수 있는 방�으로는 거� 사용�지 않는다.
4.3. Clock 서브시스템 : Observer ë””ìž�ì�¸ 패턴 ¶
- p147
- p148
class BadJmenuItem
- Bad를 붙였어. - 김준�
- Bad를 붙였어. - 김준�
- ��� �용하여 �벤트 통지를 하면 �벤트를 발�시키는 �체와 �벤트를 처리하는 �체 사�� 결합�가 매우 높아진다.
- 패턴ì�˜ ì�˜ë�„를 잘 나타내주는 훌ë¥í•œ ì�´ë¦„ì�´ë‹¤.
- Namingì�€ í•ìƒ� 중요하지. ê·¼ë�° ì•„ì§�ë�„ 난 잘 ëª¨ë¥´ê² ë‹¨ ë§�야 - 김준ì„�
- Namingì�€ í•ìƒ� 중요하지. ê·¼ë�° ì•„ì§�ë�„ 난 잘 ëª¨ë¥´ê² ë‹¨ ë§�야 - 김준ì„�
- p149
- ì�´ë²¤íЏ 통지는 ì¶œíŒ�ìž�ì—�서 구ë�…ìž�ì—�게로 ì§�ì ‘ 배달ë�œë‹¤. '중개ìž�' ê°�체를 ìƒ�ì„±í•˜ê³ ìœ ì§€ ë³´ìˆ˜í• í•„ìš”ê°€ 없게 ë�œë‹¤.
- 중간 마진� 빼면 소비�와 �매�가 만족합니다. - 김준�
- 중간 마진� 빼면 소비�와 �매�가 만족합니다. - 김준�
- Clockì�€ Subject/Publisher ì—í• ì�„ 맡는다.
- ì�´ë²¤íЏ 통지는 ì¶œíŒ�ìž�ì—�서 구ë�…ìž�ì—�게로 ì§�ì ‘ 배달ë�œë‹¤. '중개ìž�' ê°�체를 ìƒ�ì„±í•˜ê³ ìœ ì§€ ë³´ìˆ˜í• í•„ìš”ê°€ 없게 ë�œë‹¤.
- p151
- Clockì�´ ì „í˜•ì �ì�¸ GoF Singleton ìž„ì�„ 주ì�˜ 깊게 보기 바란다.
- 좀 ë�” 단순한 구현ì�„ ì‚¬ìš©í•˜ë ¤ 시ë�„í•´ 보았늗네 Clock Singletonì�´ 너무 ì�¼ì°� ìƒ�성ë�˜ì–´ 메뉴가 올바로 ì„¤ì •ë�˜ì§€ 않는 ë¬¸ì œê°€ ë°œìƒ�했다. 'ê³ ì „ì �'ì�¸ Singletonì�´ ì�´ëŸ° ë¬¸ì œë¥¼ í•´ê²°í•´ 준다.
- Java는 í”Œë ›í�¼ 기반ì�´ê¸° 때문ì—� 나오는 ë¬¸ì œë¡œ 'ê³ ì „ì �'ì�¸ Singletonì�€ 컴파ì�¼ë�™ì•ˆ 해당 Singleton í�´ëž˜ìŠ¤ë¥¼ êµ¬ì„±í• ì¶©ë¶„í•œ ì •ë³´ë¥¼ 가지는 기회를 주기때문ì—� ì�´ëŸ°ë¬¸ì œë¥¼ í•´ê²°í•´ 주는것ì�´ë‹¤. ì—시 ì±…ì�„ ì�½ì�€ 보람ì�´ 있군! - 김준ì„�
- Java는 í”Œë ›í�¼ 기반ì�´ê¸° 때문ì—� 나오는 ë¬¸ì œë¡œ 'ê³ ì „ì �'ì�¸ Singletonì�€ 컴파ì�¼ë�™ì•ˆ 해당 Singleton í�´ëž˜ìŠ¤ë¥¼ êµ¬ì„±í• ì¶©ë¶„í•œ ì •ë³´ë¥¼ 가지는 기회를 주기때문ì—� ì�´ëŸ°ë¬¸ì œë¥¼ í•´ê²°í•´ 주는것ì�´ë‹¤. ì—시 ì±…ì�„ ì�½ì�€ 보람ì�´ 있군! - 김준ì„�
- Clockì�´ ì „í˜•ì �ì�¸ GoF Singleton ìž„ì�„ 주ì�˜ 깊게 보기 바란다.
4.3.1. Observer 구현하기 : Publisher í�´ëž˜ìФ ¶
- p154
- 지금까지 ë§Žì�€ 개발ìž�들ì�˜ 경험ì�„ 통해 Observer는 구현하기 매우 ì–´ë µë‹¤ê³ ë°�í˜€ì¡Œê³ , 특히 스윙과 ê°™ì�´ 여러 ìŠ¤ë ˆë“œê°€ ìƒ�호 작용하는 환경ì—�서는 ë�”ìš± 그러하다.
- ëª¨ë“ ì‹¤ì œ 처리는 스윙 ì�´ë²¤íЏ ìŠ¤ë ˆë“œì—�서 ì�¼ì–´ë‚˜ë©°, ì�´ ì�´ë²¤íЏ ìŠ¤ë ˆë“œê°€ 사용ìž� ìž…ë ¥ ì•¡ì…˜ì—� ë°˜ì�‘한다. 하지만 나는 여러 ìŠ¤ë ˆë“œ 중 ë©”ì�¸ ìŠ¤ë ˆë“œì—�서 ë©”ì�¸ ê°�ì²´ 모ë�¸ì�´ ë�™ìž‘해지는 스윙 ì�´ë²¤íЏ ìŠ¤ë ˆë“œë¡œë¶€í„° ë°œìƒ�í•˜ê³ , 스윙ì�€ ë§Žì�€ 비ë�™ê¸° 메시지를 ë©”ì�¸ ê°�ì²´ 모ë�¸ì—� 보내게 ë�˜ëŠ”ë�°, ë©”ì�¸ ìŠ¤ë ˆë“œëŠ” 스윙 ì�´ë²¤íЏ ìŠ¤ë ˆë“œê°€ ì–¸ì œ ì�´ë²¤íŠ¸ë¥¼ 보낼지 ì˜ˆì¸¡í• ìˆ˜ 없다.
- 지금까지 ë§Žì�€ 개발ìž�들ì�˜ 경험ì�„ 통해 Observer는 구현하기 매우 ì–´ë µë‹¤ê³ ë°�í˜€ì¡Œê³ , 특히 스윙과 ê°™ì�´ 여러 ìŠ¤ë ˆë“œê°€ ìƒ�호 작용하는 환경ì—�서는 ë�”ìš± 그러하다.
- p155
- ìŠ¤ë ˆë“œë¥¼'굶겨 죽ì�¼ 수ë�„'있게 ë�œë‹¤.
- ... 아사는 무서운것�야 - 김준�
- ... 아사는 무서운것�야 - 김준�
- 만약 ì�´ì™€ ê°™ì�€ '기아'를 ì—†ì• ê¸° 위해 fireEvent()ì—�서 Synchronized를 ì œê±°í•œë‹¤ 하ë�”ë�¼ë�„ ì—시 ê³ ì•½í•œ ë¬¸ì œê°€ ë°œìƒ�한다. ì–´ë–¤ ìŠ¤ë ˆë“œì—�서 subscribe()혹ì�€ cancle()메소드를 수행하는 ë�™ì•ˆ, 다른 ìŠ¤ë ˆë“œì—�서 fireEvent()를 수행시킬 수 있기 대문ì�´ë‹¤. ë�™ê¸°í™”를 하지 않는다면 구ë�… ê°�ì²´ 리스트를 ìˆ˜ì •í•˜ëŠ” ë�„중ì—� 다른 ìŠ¤ë ˆë“œì—�서 ì ‘ê·¼í• ìˆ˜ 있게 ë�˜ê¸° 때문ì—� ê²°ê³¼ì �으로 subscribers 리스트가 ë§�가질 위험ì�´ 있다.
- ìŠ¤ë ˆë“œë¥¼'굶겨 죽ì�¼ 수ë�„'있게 ë�œë‹¤.
- p156
- 예외를 사용하는 방법ì�€ Observerì—� 너무 ë§Žì�€ ì§�ì�„ ë– ë„˜ê¸°ëŠ” 것ì�´ë‹¤.
- 예외를 사용하는 방법ì�€ Observerì—� 너무 ë§Žì�€ ì§�ì�„ ë– ë„˜ê¸°ëŠ” 것ì�´ë‹¤.
- p157
- ì�´ë²¤íЏ 통지가 복사본으로부터 ì�´ë£¨ì–´ì§€ë¯€ë¡œ 구ë�… ê°�ì²´ê°€ 구ë�…ì�„ 취소한 후ì—�ë�„ ì�´ë²¤íЏ 통지를 í• ê°€ëŠ¥ì„±ì�´ 있다.
- 코드를 ë°©ì–´ì �으로 작성하기 바란다.
- ë’¤ì—�서 살펴볼 코드3-3ì—� 있는 Publisher í�´ëž˜ìŠ¤ëŠ” 복사를 너무 ë§Žì�´ 하는 ë¬¸ì œë¥¼ 멋지게 해결한다.
- ìŠ¤í† ë¦¬í…”ë§� 하나는 멋지게 하시는것 같다. -김준ì„�
- ìŠ¤í† ë¦¬í…”ë§� 하나는 멋지게 하시는것 같다. -김준ì„�
- ì�´ë²¤íЏ 통지가 복사본으로부터 ì�´ë£¨ì–´ì§€ë¯€ë¡œ 구ë�… ê°�ì²´ê°€ 구ë�…ì�„ 취소한 후ì—�ë�„ ì�´ë²¤íЏ 통지를 í• ê°€ëŠ¥ì„±ì�´ 있다.
- Command ê°�ì²´ê°€ Observerì—� 어떻게 í†µì§€í• ê²ƒì�¸ê°€ì—� 대한 ì •ë³´ë¥¼ 캡ìŠ�화하기 때문ì—�, Publisher는 통지 매커니즘ì�„ Commandê°�ì²´ì—� ìœ„ìž„í• ìˆ˜ 있다.
- Nodeì�˜ ëª¨ë“ í•„ë“œëŠ” finalì�´ë¯€ë¡œ Node는 '불변(immutable)'ê°�ì²´ì�´ë©° 한 번 ìƒ�성하면 ìˆ˜ì •í• ìˆ˜ 없다. ê²°ê³¼ì �으로 여러 ìŠ¤ë ˆë“œê°€ Node ê°�ì²´ì—� ì ‘ê·¼í•˜ë�”ë�¼ë�„ ì•ˆì „í•˜ë©° ë�™ê¸°í™”를 하지 않아ë�„ ë�œë‹¤.
- ì�´ê±° ì •ë§� 멋지다! - 김준ì„�
- ì�´ê±° ì •ë§� 멋지다! - 김준ì„�
- 만약 외부 í�´ëž˜ìФì�˜ 메소드가 ë‚´ë¶€ í�´ëž˜ìФì—�서 ì„ ì–¸ë�œ ì ‘ê·¼ 권한ì�„ 어기면서 ì ‘ê·¼í•˜ê³ ìžˆë‹¤ë©´ 약간ì�˜ ìœ ì§€ 보수성과 약간ì�˜ 코드 단순화를 ë§žêµ�환 í•˜ê³ ìžˆëŠ”ê²ƒì�´ë‹¤.
- 어투는 좀 잘못ë�œ Trade-Offë�¼ê³ 하는듯 하다. - 김준ì„�
- 어투는 좀 잘못ë�œ Trade-Offë�¼ê³ 하는듯 하다. - 김준ì„�
- ë§Žì�€ 프로그래머들ì�´ 재귀 ì•Œê³ ë¦¬ì¦˜ì�´ ë¶ˆë¶„ëª…í•˜ê³ ë¹„íš¨ìœ¨ì �ì�´ê¸° 때문ì—� ì–¸ì œë‚˜ '나ì�˜ë‹¤'ê³ ìƒ�ê°�í•˜ê³ ìžˆëŠ” 것같다.
- ê·¸ ì–‘ì�´ 얼마나 ë� ì§€ 불분명하기 때문ì—� '복불복'ëŠ�낌ì�´ 들어 비효율ì �ì�´ì§€ - 김준ì„�
- ê·¸ ì–‘ì�´ 얼마나 ë� ì§€ 불분명하기 때문ì—� '복불복'ëŠ�낌ì�´ 들어 비효율ì �ì�´ì§€ - 김준ì„�
- 재귀를 ì�´ìš©í•œ 구현ì—�서는 노드ì—� 대한 ë ˆí�¼ëŸ°ìŠ¤ê°€ ê°� 재귀 호출ì�˜ 로컬 변수ì�´ê¸° 때문ì—� ì�´ë¥¼ ìœ ì§€í•˜ê¸° 매우 쉽다.
5. 소형 ë�°ì�´í„°ë² ì�´ìФ 구현하기 ¶
- 오랜만ì—� ì�´ 페ì�´ì§€ 다시 ë³´ê³ ìžˆëŠ”ë�° 준ì„�ì„ ë°°ê»˜ì„œ 꾸준히 밑줄ì�„ 열심히 ê¸‹ê³ ê³„ì…¨ë‹¤ëŠ” 사실ì—� 새삼 ê°�íƒ„í•˜ê³ ê°‘ë‹ˆë‹¤...! - 김수경










