1. 들어가며 ¶
- p.44
- 스프ë§�ì�„ 사용하는 개발ìž�들ì�€ ìž�연스럽게 ìž�바와 엔터프ë�¼ì�´ì¦ˆ 개발ì�˜ 기본ì—� 충실한 ë² ìŠ¤íŠ¸ 프랙티스를 ì �ìš©í• ìˆ˜ ìžˆê³ , ì�´ìƒ�ì �ì�¸ 개발 ì² í•™ê³¼ 프로그래ë°� 모ë�¸ì�„ ì�´í•´í•˜ê²Œ ë�˜ê³ , 좋ì�€ 개발 습관ì�„ ì²´ë“�하게 ë�œë‹¤.
- 스프ë§�ì�„ 사용하는 개발ìž�들ì�´ 스프ë§�ì�„ 통해 얻게 ë�˜ëŠ” ë‘� 가지 중요한 가치가 있다면 그것ì�€ 단순함과 ìœ ì—°ì„±ì�´ë‹¤.
2.1. 오브ì �트와 ì�˜ì¡´ê´€ê³„ ¶
- p.61
- 잘 ë�™ìž‘하는 코드를 êµ³ì�´ ìˆ˜ì •í•˜ê³ ê°œì„ í•´ì•¼ 하는 ì�´ìœ 는 ë˜ê¹Œ?
- ì�´ëŸ° ë§�ì�´ ìƒ�ê°�나네요 컴퓨터가 ì�´í•´í• 수 있는 코드는 ì–´ëŠ� 바보나 다 ìž‘ì„±í• ìˆ˜ 있다. 좋ì�€ 프로그래머는 사람ì�´ ì�´í•´í• 수 있는 코드를 ì§ ë‹¤ - 마틴파울러 - 서지혜
- p.62
- 가장 좋ì�€ 대책ì�€ 변화ì�˜ í�ì�„ 최소한으로 줄여주는 것ì�´ë‹¤.
- p.70
- 그런ë�° ë””ìž�ì�¸ 패턴ì�€ 설계 ì „ëžµì�´ê¸°ë�„ 하지만 굉장히 편리한 커뮤니케ì�´ì…˜ 수단ì�´ê¸°ë�„ 하다.
- p.73
- 변화ì�˜ 성격ì�´ 다르다는 ê±´ 변화ì�˜ ì�´ìœ 와 시기, 주기 등ì�´ 다르다는 뜻ì�´ë‹¤.
2.3. 템플릿 ¶
- p.211
- 템플릿ì�´ëž€ ì�´ë ‡ê²Œ 바뀌는 성질ì�´ 다른 코드 중ì—�서 변경ì�´ ê±°ì�˜ ì�¼ì–´ë‚˜ì§€ 않으며 ì�¼ì •한 패턴으로 ìœ ì§€ë�˜ëŠ” 특성ì�„ 가진 부분ì�„ ìž�ìœ ë¡ê²Œ 변경ë�˜ëŠ” 성질ì�„ 가진 부분으로부터 ë�…립시켜서 효과ì �으로 í™œìš©í• ìˆ˜ 있ë�„ë¡� 하는 방법ì�´ë‹¤.
- p.217
- ì�´ ë¬¸ì œì�˜ 핵심ì�€ 변하지 않는, 그러나 ë§Žì�€ ê³³ì—�서 중복ë�˜ëŠ” 코드와 로ì§�ì—� ë”°ë�¼ ìž�꾸 확장ë�˜ê³ ìž�주 변하는 코드를 잘 분리해내는 작업ì�´ë‹¤.
- p.223
- ì „ëžµ 패턴ì—� 따르면 Contextê°€ ì–´ë–¤ ì „ëžµì�„ 사용하게 í• ê²ƒì�¸ê°€ëŠ” Context를 사용하는 앞단ì�˜ Clientê°€ ê²°ì •í•˜ëŠ” 게 ì�¼ë°˜ì �ì�´ë‹¤.
- Context는 ì „ë‹¬ë°›ì�€ ê·¸ Strategy 구현 í�´ëž˜ìФì�˜ 오브ì �트를 사용한다.
- p.226
- DIì�˜ 가장 중요한 ê°œë…�ì�€ ì œ3ìž�ì�˜ ë�„움ì�„ í†µì• ë‘� 오브ì �트 사ì�´ì�˜ ìœ ì—°í•œ 관계가 ì„¤ì •ë�˜ë�„ë¡� ë§Œë“ ë‹¤ëŠ” 것ì�´ë‹¤.
- ì�¼ë°˜ì �으로 DI는 ì�˜ì¡´ê´€ê³„ì—� 있는 ë‘� ê°œì�˜ 오브ì �트와 ì�´ 간계를 다ì�´ë‚´ë¯¹í•˜ê²Œ ì„¤ì •í•´ì£¼ëŠ” 오브ì �트 íŒ©í† ë¦¬(DI 컨테ì�´ë„ˆ), ê·¸ë¦¬ê³ ì�´ë¥¼ 사용하는 í�´ë�¼ì�´ì–¸íЏë�¼ëŠ” 4ê°œì�˜ 오브ì �트 사ì�´ì—�서 ì�¼ì–´ë‚œë‹¤.
- p.250
- ê³ ì •ë�œ 작업 í��름ì�„ ê°–ê³ ìžˆìœ¼ë©´ì„œ ì—¬ê¸°ì €ê¸°ì„œ ìž�주 반복ë�˜ëŠ” 코드가 있다면, 중복ë�˜ëŠ” 코드를 ë¶„ë¦¬í• ë°©ë²•ì�„ ìƒ�ê°�해보는 습관ì�„ 기르ìž�.
- p.257
- 템플릿과 콜백ì�„ 찾아낼 때는, 변하는 코드ì�˜ 경계를 ì°¾ê³ ê·¸ 경계를 사ì�´ì—� ë‘�ê³ ì£¼ê³ ë°›ëŠ” ì�¼ì •한 ì •ë³´ê°€ 있는지 확ì�¸í•˜ë©´ ë�œë‹¤ê³ 했다.
- hamcrest.CoreMatchersì—� 대해서 : CoreMatcher로 테스트 코드를 만들 때 null ê°’ì�€ 비êµ�나 notì�„ 사용하는 것ì�´ 불가능합니다(ex. assertThat(tempObject, is(null)); -> ì—�러). ì�´ê±´ nullì�´ ê°’ì�´ 아니기 때문ì�¸ë�°, CoreMatcherì—�서 null ê°’ì�„ 쓸 때는 org.hamcrest.CoreMatchersì�˜ notNullValue()와 nullValue()를 사용하시면 ë�˜ê² 습니다. http://jmock.org/javadoc/2.5.1/org/hamcrest/CoreMatchers.html
- p.283
- 예외는 처리�야 한다.
- 예외를 ì²˜ë¦¬í• ë•Œ 반드시 지켜야 í• í•µì‹¬ ì›�ì¹™ì�€ 한 가지다. ëª¨ë“ ì˜ˆì™¸ëŠ” ì �ì ˆí•˜ê²Œ 복구ë�˜ë“ ì§€ 아니면 작업ì�„ ì¤‘ë‹¨ì‹œí‚¤ê³ ìš´ì˜�ìž� ë˜�는 개발ìž�ì—�게 분명하게 통보ë�¼ì•¼ 한다.
- p.284
- êµ³ì�´ 예외를 잡아서 ë”ê°€ 조치를 ì·¨í• ë°©ë²•ì�´ 없다면 잡지 ë§�아야 한다.
- p.290
- 예외를 회피하는 것� 예외를 복구하는 것처럼 ��가 분명해야 한다.
- p.317
- ì• í”Œë¦¬ì¼€ì�´ì…˜ì�˜ 로ì§�ì�„ 담기 위한 예외는 ì²´í�¬ 예외로 ë§Œë“ ë‹¤.
2.5. 서비스 ì¶”ìƒ�í™” ¶
2.5.1. 사용ìž� ë ˆë²¨ 관리 기능 추가 ¶
- p.320
- ì�˜ë¯¸ 없는 숫ìž�를 프로í�¼í‹°ì—� 사용하면 타입ì�´ ì•ˆì „í•˜ì§€ 않아서 ìœ„í—˜í• ìˆ˜ 있다.
- p.321
- 그래서 숫ìž� 타입ì�„ ì§�ì ‘ 사용하는 것보다는 ìž�ë°” 5 ì�´ìƒ�ì—�서 ì œê³µí•˜ëŠ” ì�´ëŠ„(enum)ì�„ ì�´ìš©í•˜ëŠ” 게 ì•ˆì „í•˜ê³ íŽ¸í•˜ë‹¤.
- p.327
- ë¹ ë¥´ê²Œ 실행 가능한 í�¬ê´„ì �ì�¸ 테스트를 만들어ë‘�ë©´ ì�´ë ‡ê²Œ 기능ì�˜ 추가나 ìˆ˜ì •ì�´ ì�¼ì–´ë‚ 때 ê·¸ ìœ„ë ¥ì�„ 발휘한다.
- p.329
- 가장 많� 실수가 �어나는 곳� 바로 SQL 문장�다.
- p.330
- ë‘� 번째 방법ì�€ 테스트를 보강해서 ì›�하는 사용ìž� 외ì�˜ ì •ë³´ëŠ” 변경ë�˜ì§€ 않았ì�Œì�„ ì§�ì ‘ 확ì�¸í•˜ëŠ” 것ì�´ë‹¤.
- �것� 확�해야한다는 ��� 미처 못했다. - 김수경
- 테스트를 만들면 작성한 코드ì—� í™•ì‹ ì�„ 가질 수 ìžˆê³ ë§ˆì�Œì�´ 편해지는 ê±´ 사실ì�´ì§€ë§Œ, ê·€ì°®ë‹¤ê³ ëŒ€ì¶© 작성한 테스트는 ì˜¤ížˆë ¤ 찾기 íž˜ë“ ë²„ê·¸ì™€ ì‚¬ê³ ì�˜ ì›�ì�¸ì�´ ë� 수ë�„ 있으니 조심하ìž�.
- p.331
- DAO는 ë�°ì�´í„°ë¥¼ 어떻게 ê°€ì ¸ì˜¤ê³ ì¡°ìž‘í• ì§€ë¥¼ 다루는 ê³³ì�´ì§€ 비즈니스 로ì§�ì�„ ë‘�는 ê³³ì�´ 아니다.
- p.332
- ë�°ì�´í„° 액세스 로ì§�ì�´ ë°”ë€Œì—ˆë‹¤ê³ ë¹„ì¦ˆë‹ˆìŠ¤ 로ì§� 코드를 ìˆ˜ì •í•˜ëŠ” ì�¼ì�´ 있어서는 안 ë�œë‹¤.
- p.335
- ì�´ ì •ë�„ 코드ë�¼ë©´ 한 번 살펴보는 것 만으로ë�„ 오류가 있는지 쉽게 찾아낼 ìž�ì‹ ì�´ 있는 개발ìž�ë�„ ìžˆê² ì§€ë§Œ, ì •ë§� 뛰어난 개발ìž�ë�¼ë©´ 아무리 간단해 ë³´ì—¬ë�„ ì‹¤ìˆ˜í• ìˆ˜ 있ì�Œì�„ ì•Œê³ ìžˆê¸° 때문ì—� 테스트를 만들어서 ì§�ì ‘ ë�™ìž‘하는 모습ì�„ 확ì�¸í•´ë³´ë ¤ê³ í• ê²ƒì�´ë‹¤.
- ì�´ì •ë�„~ 부분ì�„ ì�½ê³ ìž�ì‹ ìžˆì–´í•œ ë‚´ê°€ ë¶€ë�„럽다.. í—�리우드ì—� 가서 jesus=heaven no jesus=hell íŒ�ë“¤ê³ í–‰ì§„í•˜ëŠ” 사람들처럼.. - 서지혜
- p.339
- 코드가 ê¹”ë�”í•´ ë³´ì�´ì§€ 안는 ì�´ìœ 는 ì�´ë ‡ê²Œ 성격ì�´ 다른 여러 가지 로ì§�ì�´ 한ë�° 섞여있기 때문ì�´ë‹¤.
- p.340
- ê´€ë ¨ì�´ 있어 ë³´ì�´ì§€ë§Œ 사실ì�€ 성격ì�´ 조금씩 다른 것들ì�´ 섞여 있거나 분리ë�˜ì„œ 나타나는 구조다.
- 성격ì�´ 다른 ë‘� 가지 경우가 모ë‘� 한 ê³³ì—�서 처리ë�˜ëŠ” 것ì�€ ë”ê°€ ì�´ìƒ�하다.
- p.345
- ê°�체지향ì �ì�¸ 코드는 다른 오브ì �트ì�˜ ë�°ì�´í„°ë¥¼ ê°€ì ¸ì™€ì„œ 작업하는 ëŒ€ì‹ ë�°ì�´í„°ë¥¼ ê°–ê³ ìžˆëŠ” 다른 오브ì �트ì—�게 작업ì�„ 해달ë�¼ê³ ìš”ì²í•œë‹¤. 오브ì �트ì—�게 ë�°ì�´í„°ë¥¼ 요구하지 ë§�ê³ ìž‘ì—…ì�„ ìš”ì²í•˜ë�¼ëŠ” 것ì�´ ê°�체지향 프로그래ë°�ì�˜ 가장 기본ì�´ ë�˜ëŠ” ì›�리ì�´ê¸°ë�„ 하다.
- p.349
- 한 가지 변경 ì�´ìœ ê°€ ë°œìƒ�í–ˆì�„ 때 여러 êµ°ë�°ë¥¼ ê³ ì¹˜ê²Œ ë§Œë“ ë‹¤ë©´ 중복ì�´ë‹¤.
2.5.2. 트랜ìžì…˜ 서비스 ì¶”ìƒ�í™” ¶
- p.351
- 게다가 테스트ì�˜ 기본ì�€ ìž�ë�™í™”ë�œ 테스트여야 하니 사람ì�´ ê°„ì„하는 것ì�€ 좋ì�€ ìƒ�ê°�ì�´ 아니다.
- 테스트를 위해 코드를 함부로 건드리는 것� 좋� ��� 아니다.
- p.355
- 트랜ìžì…˜ì�´ëž€ ë�” ì�´ìƒ� 나눌 수 없는 단위 작업ì�„ ë§�한다. 작업ì�„ 쪼개서 ìž‘ì�€ 단위로 만들 수 없다는 것ì�€ 트랜ìžì…˜ì�˜ 핵심 ì†�성ì�¸ ì›�ìž�성ì�„ ì�˜ë¯¸í•œë‹¤.
- ë”°ë�¼ì„œ 중간ì—� 예외가 ë°œìƒ�해서 작업ì�„ ì™„ë£Œí• ìˆ˜ 없다면 아예 작업ì�´ 시작ë�˜ì§€ 않ì�€ 것처럼 초기 ìƒ�태로 ë�Œë ¤ë†”야 한다. ì�´ê²ƒì�´ 바로 트랜ìžì…˜ì�´ë‹¤.
- 하지만 여러 ê°œì�˜ SQLì�´ 사용ë�˜ëŠ” 작업ì�„ 하나ì�˜ 트랜ìžì…˜ìœ¼ë¡œ 취급해야 하는 경우ë�„ 있다.
- p.356
- ëª¨ë“ íŠ¸ëžœìžì…˜ì�€ 시작하는 ì§€ì �ê³¼ ë��나는 ì§€ì �ì�´ 있다. 시작하는 방법ì�€ 한 가지ì�´ì§€ë§Œ ë��나는 방법ì�€ ë‘� 가지다. ëª¨ë“ ìž‘ì—…ì�„ 무효화하는 롤백과 ëª¨ë“ ìž‘ì—…ì�„ 다 í™•ì •í•˜ëŠ” 커밋ì�´ë‹¤.
- p.362
- 비즈니스 로ì§�ì�„ ë‹´ê³ ìžˆëŠ” UserService 메소드 안ì—�서 트랜ìžì…˜ì�˜ 경계를 ì„¤ì •í•´ ê´€ë¦¬í•˜ë ¤ë©´ 지금까지 만들었ë�˜ ê¹”ë�”하게 ì •ë¦¬ë�œ 코드를 í�¬ê¸°í•´ì•¼ í• ê¹Œ? 아니면, 트랜ìžì…˜ 기능ì�„ í�¬ê¸°í•´ì•¼ í• ê¹Œ? ë¬¼ë¡ ë‘˜ 다 아니다. 스프ë§�ì�€ ì�´ ë”œë ˆë§ˆë¥¼ í•´ê²°í• ìˆ˜ 있는 ë©‹ì§„ 방법ì�„ ì œê³µí•´ì¤€ë‹¤.
- p.370
- UserService는 ìž�ì‹ ì�˜ 로ì§�ì�´ 바뀌지 않았ì�Œì—�ë�„ ê¸°ìˆ í™˜ê²½ì—� ë”°ë�¼ì„œ 코드가 바뀌는 코드가 ë�¼ë²„ë¦¬ê³ ë§�았다.
- p.371
- ì�´ë ‡ê²Œ 여러 ê¸°ìˆ ì�˜ 사용 방법ì—� 공통ì �ì�´ 있다면 ì¶”ìƒ�화를 ìƒ�ê°�í•´ë³¼ 수 있다. ì¶”ìƒ�화란 하위 시스템ì�˜ 공통ì �ì�„ 뽑아내서 분리시키는 것ì�„ ë§�한다. ê·¸ë ‡ê²Œ 하면 하위 시스템ì�´ ì–´ë–¤ 것ì�¸ì§€ 알지 못해ë�„, ë˜�는 하위 시스템ì�´ 바뀌ë�”ë�¼ë�„ ì�¼ê´€ë�œ 방법으로 ì ‘ê·¼í• ìˆ˜ê°€ 있다.
- p.374
- ì–´ë–¤ í�´ëž˜ìŠ¤ë“ ìŠ¤í”„ë§�ì�˜ 빈으로 등ë¡�í• ë•Œ ë¨¼ì € ê²€í† í•´ì•¼ í• ê²ƒì�€ 싱글톤으로 ë§Œë“¤ì–´ì ¸ 여러 ìŠ¤ë ˆë“œì—�서 ë�™ì‹œì—� 사용해ë�„ 괜찮ì�€ê°€ 하는 ì �ì�´ë‹¤. ìƒ�태를 ê°–ê³ ìžˆê³ , ë©€í‹°ìŠ¤ë ˆë“œ 환경ì—�서 ì•ˆì „í•˜ì§€ 않ì�€ í�´ëž˜ìŠ¤ë¥¼ 빈으로 ë¬´ìž‘ì • 등ë¡�하면 심ê°�한 ë¬¸ì œê°€ ë°œìƒ�하기 때문ì�´ë‹¤.
2.5.3. 서비스 ì¶”ìƒ�화와 단ì�¼ ì±…ìž„ ì›�ì¹™ ¶
- p.377
- ì�´ë ‡ê²Œ ê¸°ìˆ ê³¼ 서비스ì—� 대한 ì¶”ìƒ�í™” 기법ì�„ ì�´ìš”하면 íŠ¹ì • ê¸°ìˆ í™˜ê²½ì—� 종ì†�ë�˜ì§€ 않는 í�¬í„°ë¸”한 코드를 만들 수 있다.
- p.379
- 단ì�¼ ì±…ìž„ ì›�ì¹™ì�€ 하나ì�˜ 모듈ì�€ 한 가지 ì±…ìž„ì�„ ê°€ì ¸ì•¼ 한다는 ì�˜ë¯¸ë‹¤. 하나ì�˜ 모듈ì�´ 바뀌는 ì�´ìœ 는 한 가지여야 í•œë‹¤ê³ ì„¤ëª…í• ìˆ˜ë�„ 있다.
- 단ì�¼ ì±…ìž„ ì›�ì¹™ì�„ 잘 ì§€í‚¤ê³ ìžˆë‹¤ë©´, ì–´ë–¤ 변경ì�´ í•„ìš”í• ë•Œ ìˆ˜ì • 대ìƒ�ì�´ 명확해진다.
- p.380
- ë§Žì�€ 코드를 ìˆ˜ì •í•˜ëŠ” 작업ì—�ì„ ê·¸ë§Œí�¼ 실수가 ì�¼ì–´ë‚ í™•ë¥ ì�´ 높다. 치명ì �ì�¸ 버그가 ë�„ìž…ë� 가능성ë�„ 있다.
- p.381
- 패턴ì�´ë‚˜ 설계 ì›�ì¹™ì�„ 공부하는 ì�´ìœ 는 í�¼ë‚˜ëŠ” 용어를 ì™¸ìš°ê³ ê¸°ê³„ì �ì�¸ ì§€ì‹�ì�„ 습ë“�하면 ì €ì ˆë¡œ ê¹”ë�”í•˜ê³ ìœ ì—°í•œ 코드가 나오기 때문ì�´ 아니다. 좋ì�€ 코드를 만들기 위한 개발ìž� 스스로ì�˜ ë…¸ë ¥ê³¼ ê³ ë¯¼ì�´ 있ì�„ 때 ë�„움ì�„ 주기 때문ì�´ë‹¤.
- 스프ë§�ì�„ DI í”„ë ˆìž„ì›Œí�¬ë�¼ê³ 부르는 ì�´ìœ 는 외부 ì„¤ì •ì •ë³´ë¥¼ 통한 런타임 오브ì �트 DIë�¼ëŠ” 단순한 기능ì�„ ì œê³µí•˜ê¸° 때문ì�´ 아니다. ì˜¤ížˆë ¤ 스프ë§�ì�´ DIì—� 담긴 ì›�칙과 ì�´ë¥¼ ì�‘용하는 프로그래ë°� 모ë�¸ì�„ ìž�ë°” 엔터프ë�¼ì�´ì¦ˆ ê¸°ìˆ ì�˜ ë§Žì�€ ë¬¸ì œë¥¼ 해결하는 ë�° ì �ê·¹ì �으로 í™œìš©í•˜ê³ ìžˆê¸° 때문ì�´ë‹¤. ë˜�, 스프ë§�ê³¼ 마찬가지로 스프ë§�ì�„ 사용하는 개발ìž�ê°€ 만드는 ì• í”Œë¦¬ì¼€ì�´ì…˜ 코드 ë˜�한 ì�´ëŸ° DI를 활용해서 ê¹”ë�”í•˜ê³ ìœ ì—°í•œ 코드와 설계를 만들어낼 수 있ë�„ë¡� ì§€ì›�í•˜ê³ ì§€ì§€í•´ì£¼ê¸° 때문ì�´ë‹¤.
2.5.4. ë©”ì�¼ 서비스 ì¶”ìƒ�í™” ¶
- p.384
- 그런�, 과연 테스트를 하면서 매번 메�� 발송�는 것� 바람�한가? 대개는 바람�하지 못하다.
- 여기서 ì§€ì �하지 않았다면 ê·¸ 부분ì—� 대해 딱히 ë¬¸ì œë�¼ê³ ìƒ�ê°�하지 않았ì�„ 것 같다. - 김수경
- 나ë�„ 테스트 ì¼œë†“ê³ ë†€ëŸ¬ê°”ì�„ 거같다 - 서지혜
- p.391
- 서비스 ì¶”ìƒ�í™”ì—�는 기능ì�€ ìœ ì‚¬í•˜ë‚˜ 사용 방법ì�´ 다른 ë¡œìš°ë ˆë²¨ì�˜ 다양한 ê¸°ìˆ ì—� 대해 ì¶”ìƒ� ì�¸í„°íŽ˜ì�´ìŠ¤ì™€ ì�¼ê´€ì„± 있는 ì ‘ê·¼ 방법ì�„ ì œê³µí•´ì£¼ëŠ” 것ì�„ ë§�한다. 반면ì—� 테스트를 ì–´ë µê²Œ 만드는 ê±´ì „í•˜ì§€ 않ì�€ ë°©ì‹�으로 설계ë�œ API를 ì‚¬ìš©í• ë•Œë�„ ìœ ìš©í•˜ê²Œ ì“°ì�¼ 수 있다.
- p.392
- 서비스 ì¶”ìƒ�화란 ì�´ë ‡ê²Œ ì›�활한 테스트만ì�„ 위해서ë�„ 충분히 가치가 있다. ê¸°ìˆ ì�´ë‚˜ 환경ì�´ 바뀔 가능성ì�´ 있ì�Œì—�ë�„, JavaMail처럼 확장ì�´ 불가능하게 설계해놓ì�€ API를 사용해야 하는 경우ë�¼ë©´ ì¶”ìƒ�í™” 계층ì�˜ ë�„ìž…ì�„ ì �ê·¹ ê³ ë ¤í•´ë³¼ 필요가 있다. 특별히 외부ì�˜ 리소스와 ì—°ë�™í•˜ëŠ” 대부분 작업ì�€ ì¶”ìƒ�í™”ì�˜ 대ìƒ�ì�´ ë� 수 있다.
- p.395
- 테스트 환경ì�„ 만들어주기 위해, 테스트 대ìƒ�ì�´ ë�˜ëŠ” 오브ì �트ì�˜ 기능ì—�ë§Œ 충실하게 수행하면서 ë¹ ë¥´ê²Œ, ìž�주 테스트를 ì‹¤í–‰í• ìˆ˜ 있ë�„ë¡� 사용하는 ì�´ëŸ° 오브ì �트를 통틀어서 테스트 대ì—(test double)ì�´ë�¼ê³ 부른다.
- SEì—�서는 테스트 대ì—ì�´ 아니ë�¼ stubì�´ë�¼ê³ 했는ë�° 여기ì—�서는 stub 오브ì �트와 mock 오브ì �트로 ë˜� ë‚˜ëˆ ì§„ë‹¤. - 서지혜
- p.396
- 목 오브ì �트는 스í…�처럼 테스트 오브ì �트가 ì •ìƒ�ì �으로 실행ë�˜ë�„ë¡� ë�„와주면서, 테스트 오브ì �트와 ìž�ì‹ ì�˜ 사ì�´ì—�서 ì�¼ì–´ë‚˜ëŠ” 커뮤니케ì�´ì…˜ ë‚´ìš©ì�„ ì €ìž¥í•´ë’€ë‹¤ê°€ 테스트 결과를 ê²€ì¦�하는 ë�° í™œìš©í• ìˆ˜ 있게 해준다.
- p.400
- 목 오브ì �트를 ì�´ìš©í•œ 테스트ë�¼ëŠ” 게, 작성하기는 간단하면서ë�„ 기능ì�„ ìƒ�당히 막강하다는 사실ì�„ 알 수 있ì�„ 것ì�´ë‹¤. 보통ì�˜ 테스트 방법으로는 ê²€ì¦�하기가 매우 까다로운 테스트 대ìƒ� 오브ì �트ì�˜ ë‚´ë¶€ì—�서 ì�¼ì–´ë‚˜ëŠ” ì�¼ì�´ë‚˜ 다른 오브ì �트 사ì�´ì—�서 ì£¼ê³ ë°›ëŠ” ì •ë³´ê¹Œì§€ ê²€ì¦�하는 ì�¼ì�´ ì†�쉽기 때문ì�´ë‹¤.
- 목 오브ì �트를 ì�´ìš©í•œ 테스트가 작성하기 간단하…지 않았었는ë�°. - 김수경
- ì�´ì§€ëª©ê°™ì�€ê±° 안ì�¨ë�„ 목 오브ì �트를 만들어 쓸 수 있구나.. - 서지혜