From ["ProjectZephyrus/ClientJourney"] ''주ì„ì´ ì—†ëŠ” 코드ë¼ì„œ 그런지 í•´ì„하는 ë° ì• ë¨¹ì—ˆë‹¤'' ê·¸ë ‡ë‹¤ë©´ ìžì‹ ì´ ê·¸ 코드를 í•´ì„하면서 ì–»ì€ ì§€ì‹ì„ ê·¸ ì½”ë“œì— ì ìš©í–ˆë”ë¼ë©´(좀 ë” ì˜ë¯¸ìžˆëŠ” 변수ì´ë¦„, ë©”ì¨ë“œì´ë¦„ 사용, 코드 ì¼ë¶€ë¶„ì„ ì˜ë¯¸ìžˆëŠ” ì´ë¦„ì˜ ë©”ì¨ë“œë¡œ 추출 등) ì–´ë• ì„까요? --JuNe ì•„..["Refactoring"] 하ë¼ëŠ” ê±°êµ°ìš”.. 사실 설계 ìžì²´ì—ì„œë„ ë¹ ì§„ ìƒíƒœë¼ ì „ì²´ 구조 ì´í•´í•˜ëŠ”ë° ê°€ìž¥ í¬ê²Œ ì• ë¥¼ 먹었습니다. 아무튼 진짜 ì´í•´í•œ í›„ì— ì½”ë“œë¥¼ ìˆ˜ì •í•´ 놓는 ê²ƒë„ ì¢‹ì€ ë°©ë²•ì¸ê±´ ë¶„ëª…í•˜ë‹¤ê³ ìƒê°í•©ë‹ˆë‹¤. ^^; --ì°½ì„ ì²˜ìŒì— Javadoc ì„ ì“¸ê¹Œ 하다가 ê³„ì† ì£¼ì„ì´ ì½”ë“œì— ì•„ë¥¸ ê±°ë ¤ì„œ ë°©í•´ê°€ ë˜ì—ˆë˜ 관계로; (["IntelliJ"] 3.0 ì´í›„부턴 Source Folding ì´ ì§€ì›í•˜ê¸° ë•Œë¬¸ì— Javadocì„ ë‹«ì„ ìˆ˜ 있지만) 주ì„ì„ ì•ˆì“°ê³ í”„ë¡œê·¸ëž˜ë°ì„ 한게 화근ì¸ê°€ ë³´êµ°. 설계 시기를 ë”°ë¡œ 뺀 ì ì€ ì—†ì§€ë§Œ, Pair í• ë•Œë§ˆë‹¤ 매번 Class Diagram ì„ ê·¸ë¦¬ê³ ì„¤ëª…í–ˆë˜ ê²ƒìœ¼ë¡œ 기억하는ë°, ê·¸ëž˜ë„ ì „ì²´êµ¬ì¡°ê°€ ì´í•´ê°€ 가지 않았다면 ë‚´ ìž˜ëª»ì´ í¬ì§€. 다ìŒë¶€í„°ëŠ” ìƒë¯¼ì´ì²˜ëŸ¼ ìœ„í‚¤ì— Class Diagram ì—…ë°ì´íŠ¸ëœ 것 ì˜¬ë¦¬ê³ , Javadoc 만들어서 generation í•œ 것 올리ë„ë¡ ë…¸ë ¥ì„ í•´ì•¼ ê² êµ°. 요새들어서 주ì„ì„ ìž˜ ì•ˆì“°ê³ ì½”ë“œë¥¼ 알아보기 쉽게 ì“°ë ¤ê³ ë…¸ë ¥í•˜ê¸´ 하는ë°, ì•„ì§ ìˆ˜ë ¨ì´ ë¶€ì¡±í•´ì„œì¸ì§€ 코드는 코드대로 ì–´ë µê³ ì£¼ì„ì€ ì£¼ì„대로 없나 보다. íí; 약간 변명ì´ë¼ë©´, ê°œì¸ì 경험ì—서는 주ì„ì´ ë‹¬ë¦° 코드는 주ì„ì— ì‹œì„ ì´ ë¨¼ì €ê°€ê³ , 주ì„ì´ ì—†ëŠ” 코드ì—는 함수 í”„ë¡œí† íƒ€ìž…ì— ì‹œì„ ì´ ë¨¼ì €ê°„ë‹¤ë¼ëŠ” 것. 하지만, ì˜ë„ê°€ ì „í•´ì§€ì§€ 않았다면 ì—ì‹œ ë 무ì˜ë¯¸í•œê²ƒì´ê² 지. --ì„천 ë‚´ê°€ 가지는 주ì„ì˜ ê´€ì ì€ ì§€í•˜ì² ì—ì„œë„ ì–¸ê¸‰í•œ ë‚´ìš© ê±°ì˜ ê·¸ëŒ€ë¡œì§€ë§Œ, 내게 있어 주ì„ì˜ ì£¼ëœ ìš©ë„는 ê³¼ê±°ì˜ ìžì‹ ê³¼ 대화를 하면서 ì§‘ì¤‘ë„ ìœ ì§€, ì§„í–‰ë„ ì²´í¬í•˜ê¸° 위해서 ì´ê³ , 기타 ì´ìœ 는 ì¼ë°˜ì ì¸ ì´ìœ ì¸ íƒ€ì¸ì— 대한 ì •ë³´ ì „ë‹¬ì´ë‹¤. ì „ìžëŠ” command.Command.execute()ì´ë‚˜ ìƒê·œì™€ 함께 ë‹¬ì€ information.InfoManager.writeXXX()ìœ„ì˜ ì£¼ì„들ì´ê³ ,후ìžê°€ 주로 ì“°ì¸ ìš©ë„는 ê° class ìƒë‹¨ê³¼ package ê¸°ìˆ í•´ ë†“ì€ ì£¼ì„ì´ë‹¤. ê·¸ì™¸ì— class diagramì€ ì›ëž˜ 아나로그로 ê·¸ë¦°ê²ƒë„ ìžˆì§€ë§Œ, 설명하면서 그린건 ì ˆëŒ€ë¡œ 타ì¸ì˜ 머리ì†ì— 통째로 ì €ìž¥ì´ ë‚¨ì§€ 않는다는 ì „ì œë¡œ, (왜ëƒë©´ ë‚´ê°€ 그러니까.) 타ì¸ì˜ ì—´ëžŒì„ ìœ„í•´ class diagramì˜ ë””ì§€í„¸í™”ë¥¼ 시켰다. 하는 ê¹€ì— ê·¸ëŸ°ë° í™•ì‹¤ížˆ ì„¤ëª…í• ë•Œ JavaDoc뽑아서 ê·¸ê±°ê°€ì§€ê³ ì„¤ëª…í•˜ëŠ”ê²Œ 편하긴 편하ë”ë¼. --["ìƒë¯¼"] ìžë°” IDEë“¤ì´ Source Folding ì´ ì§€ì›í•˜ê±°ë‚˜ comment 와 ê´€ë ¨í•œ ê¸°ëŠ¥ì„ ì§€ì›í•œë‹¤ë©´ í•´ê²°ë 듯. JavaDoc ì€ APIêµ°ì´ë‚˜ Framework Libraryì˜ ê²½ìš° MSDNì˜ ì—í• ì„ í•´ì£¼ë‹ˆê¹Œ. --ì„천 ìžë„¤ì˜ 경우는 주ì„ì´ ìžë„¤ì˜ ìƒê°ê³¼ì •ì´ê³ , ê·¸ 다ìŒì€ 코드를 ì½ëŠ” ì‚¬ëžŒì˜ ê´€ì ì¸ ê±´ë°, í”„ë¡œê·¸ëž¨ì„ ì´í•´í•˜ê¸° 위해서 ê·¸ ì‚¬ëžŒì€ ì–´ë–¤ ê³¼ì •ì„ ê±°ì¹ ê¹Œ? ê²½í—˜ì´ ìžˆëŠ” 사람ì´ì•¼ ë¬´ì—‡ì„ í•´ì•¼ í• ì§€ 아니까 abstract í•œ í´ëž˜ìŠ¤ ì´ë¦„ì´ë‚˜ 메소드들 ì´ë¦„만 ë´ë„ 잘 ì´í•´ë¥¼ 하지만, 나는 다른 ì‚¬ëžŒë“¤ì´ ì‹¤ì œ 코드 êµ¬í˜„ë¶€ë¶„ë„ ì½ê¸°ë¥¼ ë°”ëž¬ê±°ë“ . (소켓ì—ì„œ Read 부분 ê´€ë ¨ 블ëŸí‚¹ 방지를 위한 ìŠ¤ë ˆë“œì˜ ì´ìš©ë°©ë²•ì„ ëª¨ë¥´ê³ , Swing tree ì´ìš©ë²• 모르는 사람ì—ê² ë”ë”ìš±. 해당 ë¶€ë¶„ì— ëŒ€í•´ì„ Pair 중 ì„¤ëª…ì„ í•˜ê¸´ 했으니) ê·¸ë¦¬ê³ ê°œì¸ì ìœ¼ë¡ Server 쪽 ì´í•´í•˜ê¸°ë¡œëŠ” Class Diagram ì´ JavaDoc 보는것보다 ë” íŽ¸í–ˆìŒ. 그거 본 ë‹¤ìŒ ì†ŒìŠ¤ë¥¼ 보는 방법으로 (완벽하게 ì´í•´í•˜ì§„ 않았지만.). ì´ê±´ ë‚´ê°€ UML ì— ë” ìµìˆ™í•´ì„œê°€ ì•„ë‹ê¹Œ 함. ê·¸ë¦¬ê³ Java Source ê°€ 비êµì 깨ë—í•˜ê¸°ì— ì´í•´í•˜ê¸° 편하다는 ì ë„ ìžˆê² ê³ . (그래 소스 작성한 사람 ì¹ì°¬í•´ì¤„께;) --ì„천 ì¢Œì ˆì´ë‹¤. ì¼ë‹¨ ìžë„¤ ì˜ê²¬ì— ë™ì˜ ì •ë„ê°€ ì•„ë‹ˆë¼ ê°™ì€ ì˜ë„ì˜ ë§ì´ì—ˆë‹¤. ìœ„ì˜ ìžë„¤ ë§ì— 대한 ë‚´ê°€ ì˜ë¯¸ë¥¼ 불확실하게 ì „ë‹¬í•œê±° 같아서 ì„¸ë‹¨ë½ ì •ë„ ì“´ê±° ê°™ì€ë°.. 휴 ì¼ë‹¨ 다시 짧게 줄ì´ìžë©´, "í”„ë¡œê·¸ëž˜ë¨¸ì˜ ë‚™ì„œì˜ í‘œì¤€"ì¸ UMLê³¼ {{{~cpp JavaDoc}}}ì˜ ì¶œë°œì€ ì•„ì˜ˆ 다르다. ìžë„¤ê°€ 바란건 ë””ìžì¸ 단위로 프로그래ë°ì„ ì´í•´í•˜ê¸¸ ì›í•œê±° ê°™ì€ë°, ê·¸ê²ƒì„ {{{~cpp JavaDoc}}}ì—ì„œ ë§í•´ì£¼ëŠ”ê±´ ë¶ˆê°€ëŠ¥í•˜ë‹¤ê³ ìƒê°í•œë‹¤. Sunì—ì„œ msdnì— ëŒ€ì‘하기 위해(?) {{{~cpp JavaDoc}}}ì´ íƒœì–´ë‚œê²ƒ ê°™ì€ë° ë§ì´ë‹¤. [[BR]] 하지만, "확실히 ì„¤ëª…í• ë•Œ {{{~cpp JavaDoc}}}뽑아서 ê·¸ê±°ê°€ì§€ê³ ì„¤ëª…í•˜ëŠ”ê²Œ 편하긴 편하ë”ë¼."ë¼ê³ í•œë§ í’€ì–´ì“°ëŠ” ê±´ë°, 만약 ë””ìžì¸ ì´í•´ í›„ì— ì½”ë“œì˜ ì´í•´ë¼ë©´ {{{~cpp JavaDoc}}} ì—†ê³ ì†ŒìŠ¤ë§Œìœ¼ë¡œ ì´í•´ëŠ” 너무 ì–´ë µë‹¤.(최소한 나ì—게는 그랬다.) ì¼ë‹¨ 코드 분ì„ì‹œ {{{~cpp JavaDoc}}}ì´ ë‚˜ì˜¬ ì •ë„ë¼ë©´, "긴장 완화"ì˜ íš¨ê³¼ë¡œ ë¨¹ê³ ë“¤ì–´ 간다. ê·¸ë¦¬ê³ ìš°ë¦¬ê°€ 코드를 ì½ëŠ” ì‹œì ì€ jdk를 쓸때 {{{~cpp JavaDoc}}}ì„ ë³´ì§€ 소스를 보지는 않는 것처럼, 해당 메소드가 library처럼 ëŠê»´ì§€ì§€ ì•Šì„까? ê·¸ê²ƒì´ ë©”ì†Œë“œì˜ ì´ë¦„ì´ë‚˜ í•„ë“œì˜ ì´ë¦„만으로 완벽한 í‘œí˜„ì€ ë¶ˆê°€ëŠ¥í•˜ë‹¤ê³ ìƒê°í•œë‹¤. 완벽히 표현했다면 너무나 심한 세분화가 ì•„ë‹ê¹Œ? ì „ì— ì •ë§ ë‚œí•´í•œ 소스를 분ì„í•œ ì ì´ ìžˆë‹¤. ê·¸ë•Œë„ ê°€ë” ë³´ì´ëŠ” ì‹¤ë‚±ê°™ì€ ì£¼ì„ë“¤ì´ ë„ˆë¬´ë‚˜ ë„ì›€ì´ ëœê²ƒì´ 기억난다. 우리가 ì œì¶œí•œ Report를 ëŒ€í•™ì› ìƒë“¤ì´ 분ì„í• ë•Œ ì—ì‹œ 마찬가지 ì¼ê²ƒì´ë‹¤. ì´ê±´ ê¶ê·¹ì˜ Refactoringë¬¸ì œê°€ 아니다. í”„ë¡œê·¸ëž˜ë° ì–¸ì–´ê°€ ê·¸ ì…°ìµìŠ¤í”¼ì–´ 언어와 같았으면 í•˜ê¸°ë„ í•˜ëŠ” ìƒê°ì„ 해본다. ìƒê°ì˜ 언어를 í”„ë¡œê·¸ëž˜ë° ì–¸ì–´ ëŒ€ìž…í• ìˆ˜ë§Œ 있다면야.. --["ìƒë¯¼"] 난해한 코드ì¼ìˆ˜ë¡ 주ì„ì´ í•„ìš”í•œ 것ì¼ê²ƒì´ê³ (ë˜ëŠ” ê·¸ 반대로 쉽게 알아볼 수 있ë„ë¡ ì§¤ ë°©ë²•ì„ ê°•êµ¬í•´ì•¼ 한다면 억지쓰는 것ì´ë ¤ë‚˜.) ê°œì¸ì 으로 ì½ì–´ë³¸ 가장 긴 ë‚¯ì„ ì½”ë“œê°€ 3000~4000 ë¼ì¸ì„ 못넘어 본 관계로 ì•„ì§ì€ 'ì •ë¦¬' 단계로만 ëë‚ ê²ƒ 같다. CVS ì˜ history ê°€ 코드 ì§„í™”ê³¼ì •ì„ ë”°ë¼ê°€ëŠ”ë° ë„ì›€ì„ ì¤„ê²ƒì´ë¼ê³ ìƒê°í–ˆì§€ë§Œ, ì•„ì§ì€ 먼 ì´ì•¼ê¸°ì¼ë“¯. ë‚´ê°€ Comment 와 JavaDoc ë‘˜ì„ ë¹„ìŠ·í•œ 대ìƒìœ¼ë¡œ ë‘ê³ ì“´ê²Œ 잘못ì¸ë“¯ 하다. ë‘개는 좀 êµ¬ë¶„í• í•„ìš”ê°€ ìžˆì„ ê²ƒ 같다는 ìƒê°ì´ 들어서다. 내부 코드 ì•Œê³ ë¦¬ì¦˜ ì§„í–‰ì„ ì„¤ëª…í•˜ê¸° 위해서는 다는 주ì„ì„ commentë¡œ, 해당 구성 í´ëž˜ìŠ¤ë“¤ì˜ interface를 ì„œìˆ í•˜ëŠ”ê²ƒì„ JavaDoc으로 êµ¬ë¶„í•˜ë ¤ë‚˜. ì´ ê²½ìš°ë¼ë©´ JavaDoc ê³¼ Class Diagram ì´ ê±°ì˜ ë¹„ìŠ·í•œ ì—í• ì„ í•˜ê² ì§€. (Class Diagram ì´ ê·¸ëƒ¥ Conceptual Model ì •ë„ë¼ë©´ ë˜ ì´ì•¼ê¸°ê°€ 달ë¼ì§€ê² 지만) ê·¸ë¦¬ê³ , JDK 와 Application ì˜ ì†ŒìŠ¤ëŠ” ê·¸ ì„±ê²©ì´ ë‹¤ë¥´ë‹¤ê³ ìƒê°í•´ì„œ. JDK ì˜ ì†ŒìŠ¤ 분ì„ì´ëž€ JDKì˜ í´ëž˜ìŠ¤ë“¤ì„ ì½ê³ ê·¸ interface를 ì ê·¹ì 으로 ì´ìš©í•˜ê¸° 위해 하는 것ì´ê¸°ì— JavaDoc ì˜ ìœ„ë ¥ì€ ì ˆëŒ€ì ì´ë‹¤. 하지만, Application ì˜ ì†ŒìŠ¤ 분ì„ì´ë¼ 한다면 실질ì ì¸ implementation ì„ ë³¼ê²ƒì´ë¼ ìƒê°í•˜ê±°ë“ . ì–´ë–¤ ê²ƒì´ 'Information' ì´ëƒì— 대해서 ë°”ë¼ë³´ëŠ” ê´€ì ì˜ ì°¨ì´ê°€ ìžˆê² ì§€. 해당 메소드가 library처럼 ëŠê»´ì§ˆë•ŒëŠ” 해당 코드가 ì¼ì¢…ì˜ ì•„í‚¤í…ì³ì ì¸ ë¶€ë¶„ì´ ë 때가 ì•„ë‹ê¹Œ. 즉, Server/Client ì—ì„œì˜ Socket Connection 부분ì´ë¼ë˜ì§€, DB ì—ì„œì˜ DB Connection ì„ ì–»ì–´ì˜¤ëŠ” ë¶€ë¶„ì€ ë‹¤ë¥¸ ì½”ë“œë“¤ì´ ìŒ“ì•„ 올ë¼ê°€ëŠ”게 ê¸°ë°˜ì´ ë˜ëŠ” 부분ì´ë‹ˆê¹Œ. Application ì˜ì—ì´ ë˜ëŠ” 부분과 library ì˜ì—ì´ ë˜ëŠ” ë¶€ë¶„ì´ êµ¬ë¶„ë˜ë ¤ë©´ ë˜ ì‰½ì§„ ì•Šê² ì§€ë§Œ. ì´ë²ˆê¸°íšŒì— comment, document, source code ì— ëŒ€í•´ì„œ ì œëŒ€ë¡œ ìƒê°í•´ë³¼ 수 있ì„듯 (í”„ë¡œê·¸ëž¨ì„ ì–´ë–»ê²Œ 분ì„í• ê²ƒì¸ê°€ ë¼ë˜ì§€ Reverse Engineering Toolë“¤ì„ ì´ìš©í•˜ëŠ” ë°©ë²•ì„ ê¶ë¦¬í•œë‹¤ë˜ì§€ 등등) ê·¸ë¦¬ê³ í›„ë°°ë“¤ê³¼ì˜ ì½”ë“œì— ëŒ€í•œ 대화는 ìµìˆ™í•œ comment ë¡œ 대화하는게 ë‚«ê² ë‹¤. DesignPatterns ê°€ í•œì„œë„ ë‚˜ì˜¨ë‹¤ê³ í•˜ë©° ë˜í•˜ë‚˜ì˜ ê¸°ìˆ ìž¥ë²½ì´ ë‚´ë ¤ê°„ë‹¤ê³ í•˜ë”ë¼ë„, ì ‘í•´ë³´ì§€ ì•Šì€ ì‚¬ëžŒì—ê² ë˜í•˜ë‚˜ì˜ 외êµì–´ì¼ê²ƒì´ë‹ˆ. ê·¸ë¦¬ê³ ì˜ì–´ê°€ 모êµì–´ê°€ ì•„ë‹Œ ì´ìƒ. ë. (암튼 오늘 ë‚´ì¼ ë˜ëŠ”대로 Documentation ë§ˆì € ë‚¨ê¸°ê² ìŒ. 글쓰는 ë„중 치열하게 Documentationì„ ì§„í–‰í•˜ì§€ë„ ì•Šì€ ì‚¬ëžŒì´ ë§ë§Œ 앞섰다란 ìƒê°ì´ 그치질 않는지ë¼. ë¬¼ë¡ ìž‘ì—…ì¤‘ Doc ì´ ì•„ë‹Œ ìž‘ì—… 후 Doc ë¼ëŠ” ì ì—ì„œ ì 수 깎ì¸ë‹¤ëŠ” ì ì€ ì¸ì§€ì¤‘;) --ì„천 DeleteMe)ìœ„ì— ì¢Œì ˆì¸ ì´ìœ 를 안ì¨ë†¨ëŠ”ë°, ìƒì„¸ížˆ ê° ì¢…ë¥˜ë³„ë¡œ ìƒê°ì„ ì ì–´ 놓았는ë°, commitì‹œì— ì¶©ëŒì´ 나서 먹어 ë²„ë ¸ì–´. 하..하..하 ... 암튼 ì´ë²ˆì— 프로그래ë°ì„ 하면서 ìƒê°í•œ ì»¨ì…‰ë“¤ì„ ì„œë¡œ 설명하면서 ê°™ì´ ë§í•´ì•¼ ê² êµ°. [[BR]] ê·¸ë¦¬ê³ ê³„ì† ì´ì•¼ê¸° 하다보니 주ì„(comment)ê³¼ {{{~cpp JavaDoc}}}ì„ ë‚˜ëˆ„ì–´ 설명하는 ê²ƒì´ ì˜¬ë°”ë¥¸ ìƒê°ì¸ë“¯ 하다. 그런 ê´€ì ì´ë¼ë©´ ì´ë²ˆ ì½”ë”©ì˜ ì»¨ì…‰ì´ ë…¹ìƒ‰ê¸€ìž ìµœì†Œì£¼ì˜ë¡œ ë‚˜ê°”ë‹¤ê³ ë³¼ìˆ˜ 있다. 머리ì†ìœ¼ë¡œëŠ” 특별히 ë‘˜ì„ ë‚˜ëˆ„ì§€ ì•Šê³ ìžˆì—ˆëŠ”ë°, 코딩 습관ì—서는 ì™„ì „ížˆ ë‚˜ëˆ„ê³ ìžˆì—ˆë˜ê±° 같다. 녹색 글ìžë¥¼ 쓰지 ì•Šì„ë ¤ê³ ë°œì•…(?)ì„ í–ˆìœ¼ë‹ˆ.. ê·¸ëž˜ë„ ë³´ì´ëŠ” 녹색 글ìžë“¤ ë³´ë©´ 죄ì˜ì‹ì´ ì´ê²ƒì´ object worldì—ì„œ ë§í•˜ëŠ” "í”„ë¡œê·¸ëž˜ë¨¸ì˜ ì£„ì˜ì‹"ì— í•´ë‹¹í•˜ëŠ” ê²ƒì´ ì•„ë‹ê¹Œ. --["ìƒë¯¼"] ''DeleteMe) 부연설명 : 녹색글ìžëŠ” ["Eclipse"] ì—ì„œ 내부 주ì„ì— ëŒ€ë‹¹. ["IntelliJ"] 는 ì¼ë°˜ì 으로 회색. ["Vi"] ì—ì„œì˜ Java Syntax ì—ì„ íŒŒëž€ìƒ‰.'' ---- '''재미있는 주ì„''' 주ì„ì´ ì‹¤í–‰ë 수 있는 코드가 아니기 때문ì—, 반드시 코드가 주ì„대로 수행ëœë‹¤ê³ ë³¼ 수는 없지만 없는것 보다는 ë‚³ì€ ê²½ìš°ë„ ë§Žë‹¤. 코드 ìžì²´ëŠ” ì–¸ì–´ì˜ subset ì´ê¸° ë•Œë¬¸ì— ì•„ë¬´ë¦¬ ''코드가 ì´ì•¼ê¸°í•œë‹¤(code tells)''ë¼ í• ì§€ë¼ë„ 우리가 쓰는 ì–¸ì–´ì˜ ì´í•´ë„ì— ë¯¸ì¹˜ê¸°ê°€ ì–´ë µë‹¤. ì´ëŠ” 마치, ì–´ë–¤ ì¼ì„ í•¨ì— ìžˆì–´ì„œ ë©”ë‰´ì–¼ì´ ì¡´ìž¬í•¨ì—ë„ ë¶ˆêµ¬í•˜ê³ ê²½í—˜ìžì—게 ì´ì•¼ê¸°ë¥¼ ë“£ê³ ë©”ë‰´ì–¼ì„ ë³¼ 경우, ê·¸ ì´í•´ê°€ ì‰½ê³ ë¹ ë¥´ê²Œ ë˜ëŠ”것과 비슷하다. í”„ë¡œê·¸ëž¨ì— ìžˆì–´ 주ì„ì´ í•˜ëŠ” ìˆœê¸°ëŠ¥ì„ í•˜ë‚˜ ë” ì°¾ì•„ë³¼ 수 있다. ''메마른 코드ì†ì—ì„œ ì‚¬ëžŒì˜ ìˆ¨ê²°ì„ ëŠë¼ê²Œ 해준다.'' ìœ ë¨¸ê°€ 없는 세ìƒì„ ìƒê°í•´ë³´ë¼. 얼마나 ë”ì°í•œê°€. 예를 들어 다ìŒì˜ 코드를 살펴보ìž(회사ì—ì„œ 누군가 작성한 코드) {{{~cpp ... // ìžì‹ë“¤ 다 쥑ì´ê³ ... CSmilNode* pChildNode = m_pFirstChild; while(pChildNode) { CSmilNode* pDelNode = pChildNode; pChildNode = pChildNode->m_pNext; pDelNode->deleteSafely(bRecursive); pDelNode = NULL; } // í˜•ì œì˜ ì—°ì„ ë‹¤ ëŠê³ ... if(m_pPrev) m_pPrev->m_pNext = m_pNext; if(m_pNext) m_pNext->m_pPrev = m_pPrev; // ë¶€ëª¨ì˜ ì—°ë„ ëŠì€ 다ìŒ... if(m_pParent && m_pParent->m_pFirstChild == this) m_pParent->m_pFirstChild = m_pNext; // ìžì‚´í•œë‹¤. delete this; ... }}} ë˜ ë‹¤ë¥¸ ì˜ˆë„ ìžˆë‹¤. {{{~cpp ... // MODE_ADDBEFOREì¼ ë•ŒëŠ”, newnodeê°€ thisì˜ ìžì‹ì¸ brotherì˜ ë°”ë¡œ 윗형으로 ìž…ì–‘ì„ ê°„ë‹¤. // MODE_ADDAFTERì¼ ë•ŒëŠ”, newnodeê°€ thisì˜ ìžì‹ì¸ brotherì˜ ë°”ë¡œ 아래 ë™ìƒìœ¼ë¡œ ìž…ì–‘ì„ ê°„ë‹¤. // ìž…ì–‘ì„ ê°ˆë•Œ, ìžì‹ë“¤ì€ í•ìƒ ë°ë¦¬ê³ 다니지만, 부모나 í˜•ì œì™€ëŠ” 떨어지는 ê²ƒì„ ì›ì¹™ìœ¼ë¡œ 한다. // 새ì‹êµ¬ë¥¼ ë°›ì„ë•Œ, ë¨¼ì € 부모 ìžì‹ê°„ì˜ ê´€ê³„ë¥¼ ì •ë¦½í•œ 다ìŒ, í˜•ì œê°„ì˜ ì„œì—´ì„ ì •ë¦½í•œë‹¤. // // Default Parameter // nMode = MODE_ADDBEFORE // brother = NULL // Constraint // brother는 반드시 NULLì´ê±°ë‚˜ thisì˜ child nodeì´ì–´ì•¼ 한다. // 사용예 // addChild(newnode, MODE_ADDAFTER, brother); //newnodeê°€ brother 바로 ë’¤ì— ì‚½ìž…ëœë‹¤. // addChild(newnode, MODE_ADDBEFORE, brother); //newnodeê°€ brother 바로 ì•žì— ì‚½ìž…ëœë‹¤. // addChild(newnode, MODE_ADDAFTER); //newnodeê°€ first childë¡œ 삽입ëœë‹¤. // addChild(newnode, /*MODE_ADDBEFORE*/); //newnodeê°€ last childë¡œ 삽입ëœë‹¤. // CSmilNode* CSmilNode::addChild(CSmilNode* newnode, DCLADDMODE nMode, CSmilNode* brother) // this = ë‚´(부모) // newnode = ìžì‹(새놈) // brother = (thisì˜ ìžì‹ì¸)윗형 ... }}} ì´ì„ 우는 ì´ëŸ¬í•œ 코드를 ë³´ë©° ì—¬ëŠë•Œì™€ ê°™ì€ ì§€ë£¨í•¨ì„ ëŠë¼ì§€ 못했다. (ëª¨ë“ ì£¼ì„ ì—†ëŠ” 코드가 다 지루하다는 ëœ»ì€ ì•„ë‹ˆë‹¤. 분명 ì˜ˆìˆ ì ì¸ ì½”ë“œëŠ” 코드 ìžì²´ë¡œ ì‹ ë¹„ë¡ë‹¤. ë¬¸ì œëŠ” ì´ëŸ° 코드를 ìžì£¼ 만나기 ì–´ë µë‹¤ëŠ”ë° ìžˆë‹¤.) ì •ë§, 재미있지 ì•Šì€ê°€? 우리는 충분히 ì´ì„±ì ì´ê¸°ì— ì£¼ì„ ìžì²´ë§Œì„ ë³´ê³ ëª¨ë“ ê²ƒì„ ë¯¿ìœ¼ë ¤ê³ í• ë§Œí¼ ì–´ë¦¬ì„지는 않다. 주ì„ì„ ë¨¼ì € ê±°ì³ê°„ ì‚¬ëžŒì˜ ìˆ¨ê¸¸ë¡œ ëŠë¼ê³ , 재미로 ëŠë‚„ 수 있게 ë˜ë©´ 코드 리뷰가 í•ìƒ 지루하지는 ì•Šì„ ê²ƒì´ë‹¤. 코드 ìžì²´ë¡œì„œ ì˜ë¯¸ë¥¼ ì´ì•¼ê¸°í• 수 있ë„ë¡ ì´ë¦„ì„ ìž˜ 짓는 ê²ƒì€ ë¶„ëª… 중요하지만, ê·¸ì— ëª»ì§€ 않게 코드를 ì½ê³ 작성하는 주체가 ì‚¬ëžŒìž„ì„ ìƒê°í• ë•Œ 주ì„ì€ ì´ë“¤ì„ 위한 ìž‘ì€ ë°°ë ¤ë¼ í• ìˆ˜ 있다. --ì´ì„ ìš° ---- See Also Seminar:CommentOrNot , NoSmok:DonaldKnuth 's comment on programs as works of literature