가. 작업 방식
‘테스트 주도 개발로 배우는 객체 지향 설계와 실천’에 따라 대략적인 설계 위에서 테스트-구현 반복
1) 목표
•
TDD 기반 구현
•
SOLID 원칙 만족
2) 대략적인 설계
•
요구사항에 대한 이해를 토대로 대략적인 설계 진행
•
설계 결과물로 주요 객체 간 협력을 인터페이스 바탕의 ERD로 도식화
•
‘테스트 주도 개발로 배우는 객체 지향 설계와 실천’에 언급한 작업 흐름은 다음의 링크 참고
→ 참고
3) 테스트 흐름
•
주요 기능의 작업 진행 상황의 척도로 삼기 위해, 인수 테스트 우선 작성
•
인수 테스트를 성공시키기 위해 실패하는 단위테스트 작성 → 테스트 성공 → 리팩토링의 과정을 순회
나. 문제 이해
1) 요구사항 파악
•
장난감 가게에서는 다섯 가지의 기능이 필요하다
◦
장난감 전체 목록 조회
◦
장난감 추가
◦
개별 장난감 상세 조회
◦
개별 장난감 수정
◦
개별 장난감 삭제 기능
•
장난감에는 네 가지 속성값이 필요하다
◦
이름: 장난감을 대표하는 한 문장
◦
메이커: 장난감 생산업체 이름
◦
가격: 장난감의 가치, 한화로 표현됨
◦
이미지: 업로드된 이미지 파일이 위치한 URL
•
개별 장난감은 id라는 식별자를 통해 구분할 수 있다
2) 객체 간 협력 파악
•
본 시스템은 장난감 가게를 하나만 관리한다
•
장난감 가게는 장난감을 모두 찾아서 보여줄 수 있다
•
장난감 가게는 특정 장난감을 찾아서 보여줄 수 있다
•
장난감 가게는 장난감을 새로 들여올 수 있다
•
장난감 가게는 특정 장난감의 이름, 메이커, 가격, 이미지 정보를 수정할 수 있다
•
장난감 가게는 특정 장난감을 매장에서 제거할 수 있다
•
장난감은 하나의 이름을 가지며, 문자열로 이름을 나타낸다
•
장난감은 하나의 가격을 가지며, 원화로 나타낸다
•
장난감은 하나의 메이커를 가지며, 문자열로 나타낸다
•
장난감은 하나의 이미지를 가지며, 업로드된 이미지의 URL로 나타낸다
•
원화는 금전적 가치를 보여줄 수 있다
•
메이커는 이름을 보여줄 수 있다
•
이미지는 업로드된 위치를 URL로 보여줄 수 있다
다. 대략적인 설계
1) 인터페이스 정의
•
Shop(→ ToyShop)
•
Product(→ ToyProduct)
•
Money(→ Won)
•
Producer(→ ToyProducer)
•
MediaDemo(→ ImageDemo)
2) Entity, VO 분류
•
Entity: ToyShop, ToyProduct, ToyProducer
•
VO: Won, ImageDemo
3) Interface in Java
•
코드 참고