Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[둘리] 2, 3단계 자동 DI 미션 제출합니다 #28

Merged
merged 57 commits into from
Sep 14, 2023
Merged
Changes from 1 commit
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
168589f
docs: 요구사항 업데이트
hyemdooly Sep 6, 2023
87d3c2a
docs: 요구사항 업데이트
hyemdooly Sep 7, 2023
657518e
feat: 요구사항에 맞게 CartRepository 변경
hyemdooly Sep 7, 2023
1bdceaf
feat: CartProduct 생성
hyemdooly Sep 7, 2023
5e94a5e
rename: Repository 네이밍 변경
hyemdooly Sep 7, 2023
7ab7e4e
feat: Room 사용 구현
hyemdooly Sep 7, 2023
04ac319
refactor: Inject 로직 분리
hyemdooly Sep 7, 2023
c75db5c
refactor: Inject 로직 분리
hyemdooly Sep 7, 2023
f483bbb
refactor: viewModelFactory 수정
hyemdooly Sep 8, 2023
d2744a7
feat: Field 주입에 사용할 Annotation 추가
hyemdooly Sep 8, 2023
c6393e6
refactor: getInstance Nullable 허용
hyemdooly Sep 8, 2023
8b64b40
refactor: Field 주입으로 변경
hyemdooly Sep 8, 2023
ffa5c7b
feat: Recursive DI 구현
hyemdooly Sep 8, 2023
2254b53
feat: Recursive DI, Field Injection 적용
hyemdooly Sep 8, 2023
8d57300
docs: 요구사항 적용 여부 업데이트
hyemdooly Sep 8, 2023
e2b9366
test: Injector Test 작성
hyemdooly Sep 8, 2023
62465b1
feat: 상품의 position과 CartRepository::deleteCartProduct의 id가 동일한 값임을 보장…
hyemdooly Sep 8, 2023
559b93f
feat: 구분을 위한 추가 Annotation 생성
hyemdooly Sep 8, 2023
f6c41a8
feat: ViewModel 프로퍼티에 annotations 지정
hyemdooly Sep 8, 2023
c0ee682
refactor: 필요없는 괄호 삭제
hyemdooly Sep 8, 2023
38725ee
feat: injector annotation 고려
hyemdooly Sep 8, 2023
55308d0
feat: InMemory, Database 레포지토리 구현
hyemdooly Sep 8, 2023
a80f744
feat: 바뀐 요구사항에 맞게 주입 수정
hyemdooly Sep 8, 2023
15b4fe6
feat: annotation 고려를 위한 instances 수정
hyemdooly Sep 8, 2023
37d31ed
test: 바뀐 코드에 맞게 test 수정
hyemdooly Sep 8, 2023
7f5c22d
docs: 요구사항 충족 여부 수정
hyemdooly Sep 8, 2023
368e9c9
rename: DI 모듈화
hyemdooly Sep 8, 2023
83f960e
docs: 모듈화 충족 여부 수정
hyemdooly Sep 8, 2023
6f0dcf2
test: ViewModel 주입 테스트 수정
hyemdooly Sep 8, 2023
d66108d
test: di module에 InjectorTest 구현
hyemdooly Sep 8, 2023
5abddb2
test: 액티비티 뷰모델 주입 테스트 보완
hyemdooly Sep 8, 2023
b9ebfdf
feat: DI 배포
hyemdooly Sep 8, 2023
0b4f3a1
feat: DI 배포
hyemdooly Sep 8, 2023
2498638
refactor: constructor 제거
hyemdooly Sep 10, 2023
9eecad2
deploy: DI 배포 수정
hyemdooly Sep 11, 2023
8a46ecd
deploy: DI 배포 수정
hyemdooly Sep 11, 2023
8fca93c
refactor: di 버전 수정
hyemdooly Sep 11, 2023
a636e8c
refactor: Qualifier 수정, DI 수정
hyemdooly Sep 13, 2023
7184501
refactor: println() 삭제
hyemdooly Sep 13, 2023
7443924
deploy: publishing 옵션 변경
hyemdooly Sep 13, 2023
353d48b
refactor: implementation 추가
hyemdooly Sep 13, 2023
bbb76a5
deploy: di release
hyemdooly Sep 13, 2023
a89cc44
deploy: di release
hyemdooly Sep 13, 2023
acaa5ef
test: 바뀐 di에 따른 테스트 변경
hyemdooly Sep 13, 2023
e6ee91f
refactor: 배포된 di 적용
hyemdooly Sep 13, 2023
1f27660
refactor: 전단계의 잔해 삭제
hyemdooly Sep 14, 2023
d53b175
refactor: instance return 수정
hyemdooly Sep 14, 2023
885ab4d
refactor: 파라미터명 명시
hyemdooly Sep 14, 2023
fa81116
refactor: 변수명 변경
hyemdooly Sep 14, 2023
77bc755
refactor: 파라미터명 변경
hyemdooly Sep 14, 2023
ad360bb
refactor: 중복 코드 제거
hyemdooly Sep 14, 2023
55bc13c
refactor: T 타입 non null로 변경
hyemdooly Sep 14, 2023
cc6cc2e
refactor: scope function 적용
hyemdooly Sep 14, 2023
6c59beb
refactor: id 계산법 수정
hyemdooly Sep 14, 2023
a7baa40
refactor: assertAll 적용
hyemdooly Sep 14, 2023
47600c6
refactor: kotlin class type 고려 제외
hyemdooly Sep 14, 2023
a91d38b
refactor: Module 개념 추가
hyemdooly Sep 14, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
docs: 요구사항 업데이트
  • Loading branch information
hyemdooly committed Sep 7, 2023
commit 168589fe229811058368f6c31d2f0e07599ad968
37 changes: 14 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,22 @@
# android-di
# 0.5단계
# 2단계
## 기능 요구 사항
### 생성자 주입 - 수동
### 필드 주입
- [ ] ViewModel 내 필드 주입을 구현한다.
### Annotation
다음 문제점을 해결한다.

- [x] DB 없이 테스트하기 어렵다.
- [x] DB 객체를 교체하기 위해 또다른 객체를 만들어 바꿔줘야 한다. 즉, ViewModel에 직접적인 변경사항이 발생한다.

# 1단계
## 기능 요구 사항
### 생성자 주입 - 자동
다음 문제점을 해결한다.

- [x] ViewModel에서 참조하는 Repository가 정상적으로 주입되지 않는다.
- [x] Repository를 참조하는 다른 객체가 생기면 주입 코드를 매번 만들어줘야 한다.
- [x] ViewModel에 수동으로 주입되고 있는 의존성들을 자동으로 주입되도록 바꿔본다.
- [x] 특정 ViewModel에서만이 아닌, 범용적으로 활용될 수 있는 자동 주입 로직을 작성한다. (MainViewModel, CartViewModel 모두 하나의 로직만 참조한다)
- [x] 100개의 ViewModel이 생긴다고 가정했을 때, 자동 주입 로직 100개가 생기는 것이 아니다. 하나의 자동 주입 로직을 재사용할 수 있어야 한다.
- [x] 장바구니에 접근할 때마다 매번 CartRepository 인스턴스를 새로 만들고 있다.
- [x] 여러 번 인스턴스화할 필요 없는 객체는 최초 한 번만 인스턴스화한다. (이 단계에서는 너무 깊게 생각하지 말고 싱글 오브젝트로 구현해도 된다.)
- [ ] 의존성 주입이 필요한 필드와 그렇지 않은 필드를 구분할 수 없다.
- [ ] Annotation을 붙여서 필요한 요소에만 의존성을 주입한다.
- [ ] 내가 만든 의존성 라이브러리가 제대로 작동하는지 테스트 코드를 작성한다.
### Recursive DI
- [ ] CartRepository가 다음과 같이 DAO 객체를 참조하도록 변경한다.
CartProductEntity에는 createdAt 프로퍼티가 있어서 언제 장바구니에 상품이 담겼는지를 알 수 있다.
- [ ] CartProductViewHolder의 bind 함수에 다음 구문을 추가하여 뷰에서도 날짜 정보를 확인할 수 있도록 한다.

## 선택 요구 사항
- [ ] TDD로 DI 구현
- [x] Robolectric으로 기능 테스트
- [ ] ViewModel 테스트
- [ ] 모든 도메인 로직, Repository 단위 테스트
- [ ] 현재는 장바구니 아이템 삭제 버튼을 누르면 RecyclerView의 position에 해당하는 상품이 지워진다.
- [ ] 상품의 position과 CartRepository::deleteCartProduct의 id가 동일한 값임을 보장할 수 없다는 문제를 해결한다.
- [ ] 뷰에서 CartProductEntity를 직접 참조하지 않는다.

## 프로그래밍 요구 사항
사전에 주어진 테스트 코드가 모두 성공해야 한다.
Annotation은 이 단계에서 활용하지 않는다.