{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":685407953,"defaultBranch":"main","name":"android-di","ownerLogin":"woowacourse","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-08-31T06:53:54.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/45747236?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1727139506.0","currentOid":""},"activityList":{"items":[{"before":"b295198f45e0fa249241ba18bb14670e48bd652b","after":"c7407d612e8b377a7cbbc2113c8722d65206fa1f","ref":"refs/heads/live-coding-lifecycle","pushedAt":"2024-09-24T00:59:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"woowahan-leah","name":"김수현","path":"/woowahan-leah","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112997521?s=80&v=4"},"commit":{"message":"feat: live coding Android LifeCycle","shortMessageHtmlLink":"feat: live coding Android LifeCycle"}},{"before":null,"after":"b295198f45e0fa249241ba18bb14670e48bd652b","ref":"refs/heads/live-coding-lifecycle","pushedAt":"2024-09-24T00:58:26.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"woowahan-leah","name":"김수현","path":"/woowahan-leah","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/112997521?s=80&v=4"},"commit":{"message":"build: upgrade to android gradle plugin 8.3.1 and remove domain module","shortMessageHtmlLink":"build: upgrade to android gradle plugin 8.3.1 and remove domain module"}},{"before":"84393b059545f4d6ceb50904e00b33274ddead94","after":null,"ref":"refs/heads/step4","pushedAt":"2024-09-23T09:20:42.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"murjune","name":"JUNWON LEE","path":"/murjune","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/87055456?s=80&v=4"}},{"before":null,"after":"84393b059545f4d6ceb50904e00b33274ddead94","ref":"refs/heads/step4","pushedAt":"2024-09-23T09:19:13.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"murjune","name":"JUNWON LEE","path":"/murjune","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/87055456?s=80&v=4"},"commit":{"message":"feat: Activity Module 생성","shortMessageHtmlLink":"feat: Activity Module 생성"}},{"before":"84393b059545f4d6ceb50904e00b33274ddead94","after":"ffd3e8915757f7c6428892ac796880088bd428b2","ref":"refs/heads/kkosang","pushedAt":"2024-09-23T09:17:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"murjune","name":"JUNWON LEE","path":"/murjune","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/87055456?s=80&v=4"},"commit":{"message":"[꼬상] 2,3 단계 자동 DI 미션 제출합니다 (#119)\n\n* refactor: repository module 생성\r\n\r\n* docs: step2 기능 요구 사항 작성\r\n\r\n* test: annotationReflection 학습테스트 추가\r\n\r\n* feat: cartRepository 의존성 주입\r\n\r\n* feat: CartRepository Recursive DI\r\n\r\n* feat: 장바구니 상품의 날짜정보 property 추가\r\n\r\n* fix: 장바구니 삭제시 상품의 id값으로 삭제\r\n\r\n* docs: step2 선택 요구 사항 작성\r\n\r\n* docs: step3 기능 요구 사항 작성\r\n\r\n* feat: Qualifier 적용하여 선택적으로 의존성 주입\r\n\r\n* feat: DI Module 분리\r\n\r\n* refactor: 불필요한 코드 삭제\r\n\r\n* style: ktFormat\r\n\r\n* test: DI test 추가\r\n\r\n* style: ktFormat\r\n\r\n* docs: README 수정\r\n\r\n* refactor: DependencyContainer 코드리뷰 반영\r\n\r\n* refactor: instance 생성로직 이동\r\n\r\n* refactor: 패키지 구조 수정\r\n\r\n* fix: InMemoryDB 사용시 아이템 삭제 버그 수정\r\n\r\n* test: Qualifier 테스트 작성\r\n\r\n* test: DependencyContainerTest 수정\r\n\r\n* style: ktFormat","shortMessageHtmlLink":"[꼬상] 2,3 단계 자동 DI 미션 제출합니다 (#119)"}},{"before":"794d46344ff963d71e9df854fd28554131a460b4","after":null,"ref":"refs/heads/step4","pushedAt":"2024-09-23T08:52:40.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"aprilgom","name":null,"path":"/aprilgom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8610234?s=80&v=4"}},{"before":"ffd3e8915757f7c6428892ac796880088bd428b2","after":"84393b059545f4d6ceb50904e00b33274ddead94","ref":"refs/heads/kkosang","pushedAt":"2024-09-23T08:50:04.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"kkosang","name":"SangHyun Ko","path":"/kkosang","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/87695921?s=80&v=4"},"commit":{"message":"feat: Activity Module 생성","shortMessageHtmlLink":"feat: Activity Module 생성"}},{"before":null,"after":"794d46344ff963d71e9df854fd28554131a460b4","ref":"refs/heads/step4","pushedAt":"2024-09-23T08:47:33.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"aprilgom","name":null,"path":"/aprilgom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8610234?s=80&v=4"},"commit":{"message":"feat: 액티비티 생명주기 scope에 따른 주입 구현","shortMessageHtmlLink":"feat: 액티비티 생명주기 scope에 따른 주입 구현"}},{"before":"7d51c8a4dc257a0bafb081876d2ddd7061029668","after":"11f43bf808afd2dc650a49ec43a3b64179c52f56","ref":"refs/heads/kmkim2689","pushedAt":"2024-09-22T17:57:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"s6m1n","name":"Somin Lee","path":"/s6m1n","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/46596035?s=80&v=4"},"commit":{"message":"[케이엠] 2,3 단계 자동 DI 미션 제출합니다 (#108)\n\n* refactor: 인스턴스 맵핑 컬렉션 함수 일원화\r\n\r\n* docs: 기능 구현 목록 추가\r\n\r\n* feat: 자동 의존성 주입 대상을 구분하기 위한 어노테이션 추가\r\n\r\n* feat: 필드 주입을 위한 supplier 객체 추가\r\n\r\n* refactor: ViewModel 객체 주입 방식을 필드 주입 방식으로 변경\r\n\r\n* refactor: CartProduct 데이터 관리 로직 변경\r\n\r\n* feat: Recursive DI 기능 추가\r\n\r\n* docs: 구현 완료 사항 반영\r\n\r\n* feat: 장바구니 상품 아이템에 담긴 일시 표기 추가\r\n\r\n* fix: 장바구니 아이템 삭제 시 뷰모델의 데이터에 반영되지 않아 발생한 오류 해결\r\n\r\n* refactor: InstanceContainer 메시지 상수화 및 가독성 개선\r\n\r\n* feat: 중복된 타입의 인스턴스 구별 목적 Qualifier 이용 로직 추가\r\n\r\n* refactor: InstanceSupplier 함수 분리 및 매개변수명 변경\r\n\r\n* refactor: 자동 주입 초기화 로직 분리 및 초기화 로직에 DSL 적용\r\n\r\n* chore: 의존성 주입 모듈 분리\r\n\r\n* docs: 기능 구현 현황 반영\r\n\r\n* style: kt lint 포맷팅\r\n\r\n* test: app 모듈 테스트 케이스 수정\r\n\r\n* fix: Qualifier 구분 관련 오류 해결\r\n\r\n* test: 자동 DI 라이브러리 테스트 케이스 추가\r\n\r\n* chore: 라이브러리 배포를 위한 jitpack 설정\r\n\r\n* chore: 라이브러리 배포를 위한 태그 설정\r\n\r\n* chore: 라이브러리 배포 아이디명 및 버전 변경\r\n\r\n* chore: 라이브러리 배포를 위한 jitpack yml 파일 추가\r\n\r\n* chore: DI dependency를 기존 로컬 모듈에서 배포된 라이브러리로 변경\r\n\r\n* refactor: 불필요한 Retention 어노테이션 제거\r\n\r\n* style: kt lint 포맷팅\r\n\r\n* chore: 로컬 라이브러리를 활용하도록 의존성 변경\r\n\r\n* refactor: Injector에서 container가 최초 1회만 초기화되도록 변경\r\n\r\n* chore: 사용하지 않는 난독화 적용 파일 제거\r\n\r\n* chore: supplin 모듈에서 사용하지 않는 의존성 제거\r\n\r\n* refactor: viewModel에 의존성을 주입하기 위한 확장함수의 중복된 지연 초기화 제거\r\n\r\n* refactor: 데이터베이스 초기화 로직과 인스턴스 반환 로직을 별도의 함수로 분리\r\n\r\n* chore: 불필요한 프로덕션 코드 상의 documentation 제거\r\n\r\n* refactor: @Module 어노테이션이 존재하지 않는 module 객체 예외 발생 추가\r\n\r\n* style: InstanceContainer 스타일 포맷팅\r\n\r\n* refactor: 의존성을 resolve하는 함수 분리\r\n\r\n* refactor: 특정 필드의 어노테이션을 찾는 방식을 reflection api의 함수로 변경\r\n\r\n* refactor: 데이터베이스 인스턴스를 non null하게 변경\r\n\r\n* feat: 필드 주입 시 private한 프로퍼티도 가능하도록 변경\r\n\r\n* feat: injectionViewModel을 활용하는 ViewModel에 생성자 자동 주입 허용\r\n\r\n* docs: injectionViewModel 문서 수정\r\n\r\n* chore: 자동 주입 ViewModel 확장함수명을 supplinViewModel로 변경\r\n\r\n* chore: 불필요한 주석 제거\r\n\r\n* feat: 생성자 자동 주입 기능 추가\r\n\r\n* test: 실패하는 테스트 케이스 수정\r\n\r\n* refactor: 생성자 주입 및 필드 주입을 동시에 진행하는 함수 분리\r\n\r\n* refactor: InstanceContainer와 중복된 생성자 및 필드 주입 로직을 가진 InstanceSupplier 제거\r\n\r\n* refactor: ViewModelFactory 함수 분리\r\n\r\n* chore: ViewModel 확장함수 파일명 변경\r\n\r\n* test: Injector 객체 테스트 코드 추가\r\n\r\n* feat: supplinViewModel Fragment 지원 추가\r\n\r\n* docs: supplinInjection 문서 추가\r\n\r\n* test: supplinViewModel을 활용한 안드로이드 컴포넌트 테스트 추가\r\n\r\n* test: 필드 주입 repository 초기화 여부 테스트 추가\r\n\r\n* test: 특정 타입을 상속하지 않는 클래스의 재귀 주입에 대한 테스트 케이스 추가\r\n\r\n* style: kt lint 포맷팅\r\n\r\n* feat: 의존성 주입 시 모듈이 구현체에 의존하지 않도록 하는 방식 구현\r\n\r\n* test: InjectionBuilder 통과하지 못하는 테스트 케이스 수정\r\n\r\n* refactor: 의존성 주입을 위한 함수들을 관리하는 객체 분리\r\n\r\n* style: kt lint 포맷팅\r\n\r\n* refactor: InstanceContainer 함수 분리\r\n\r\n* chore: 사용하지 않는 fixture 삭제\r\n\r\n* style: kt lint 포맷팅\r\n\r\n* chore: 불필요한 주석 처리 제거\r\n\r\n* refactor: Database Repository 반환 함수 추상화\r\n\r\n* test: recursive di 테스트 코드 추가","shortMessageHtmlLink":"[케이엠] 2,3 단계 자동 DI 미션 제출합니다 (#108)"}},{"before":"655de17c27a30f95f7606eba87ff6a1c89428c57","after":"d1e3445839387518299ab8bfb5cbd5f10c5e6c6b","ref":"refs/heads/s6m1n","pushedAt":"2024-09-22T16:18:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"chaehyuns","name":"채현","path":"/chaehyuns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/80222352?s=80&v=4"},"commit":{"message":"[빙티] 2,3 단계 자동 DI 미션 제출합니다 (#122)\n\n* docs : README 업데이트\r\n\r\n* feat : CartProduct 추가 및 장바구니에 담은 날짜/시간 표시\r\n\r\n* feat : RoomDB를 이용한 LocalCartRepository 추가\r\n\r\n* feat : 카트 상품 id를 기준으로 삭제하는 기능 구현\r\n\r\n* feat : Inject, InjectedViewModel 어노테이션 추가 및 필드 주입 구현\r\n\r\n* feat : 인터페이스에 적절한 구현체를 주입하는 기능 구현\r\n\r\n* feat : Qualifier로 의존성 주입 시점에 구현체를 선택하는 기능 구현\r\n\r\n* style : DependencyRegistry -> DiContainer로 이름 변경\r\n\r\n* refactor : DI 라이브러리 모듈 분리\r\n\r\n* test : DependencyInjectorTest 추가\r\n\r\n* build : (DI 모듈) kotlin module -> android module로 변경\r\n\r\n* style : 클래스 명 수정 Default -> InMemory\r\n\r\n* fix : InMemoryCartRepository의 deleteCartProduct 버그 수정\r\n\r\n* docs : 누락된 요구사항 업데이트\r\n\r\n* feat : 재귀 DI 구현 및 Qualifier 수정 및 Module 방식 수정\r\n\r\n* test : DiContainerTest 추가\r\n\r\n* refactor : di 모듈에 Singleton 어노테이션 추가\r\n\r\n* test : DiContainerTest, DependencyInjectorTest 추가\r\n\r\n* fix : InMemoryCartRepository 버그 수정\r\n\r\n* style : registry -> container로 프로퍼티명 변경\r\n\r\n* refactor : instances 필드 및 관련 로직을 DependencyInjector로 이동\r\n\r\n* refactor : di 모듈에 annotation 폴더 추가","shortMessageHtmlLink":"[빙티] 2,3 단계 자동 DI 미션 제출합니다 (#122)"}},{"before":"82858c85c7d831707a92ace48ed78c2b98ec9602","after":"32f98cd2fdb506102c67bafde64acf458845259e","ref":"refs/heads/murjune","pushedAt":"2024-09-22T10:52:52.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kkosang","name":"SangHyun Ko","path":"/kkosang","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/87695921?s=80&v=4"},"commit":{"message":"[오둥이] 2,3 단계 자동 DI 미션 제출합니다 (#118)\n\n* di library 모듈 추가\r\n\r\n* di-library 구현\r\n\r\n* 의존성을 lazy 하게 생성하도록 변경\r\n\r\n* feat: qualifier 추가\r\n\r\n* feat: ContainerDSL + Qualifier 저굥\r\n\r\n* test: Qualifier 테스트\r\n\r\n* feat: androidContext\r\n\r\n* build: android 의존성\r\n\r\n* feat: ViewModel DI 구현\r\n\r\n* feat: ViewModel 주입 적용\r\n\r\n* feat: 2,3 기능사항 구현완\r\n\r\n* lintFormat\r\n\r\n* 접근제어자 및 접근제한 어노테이션 추가\r\n\r\n* fix: !! 을 early return 방식으로 수정\r\n\r\n* style: junit assert 문 kotest assertion으로 변경\r\n\r\n* style","shortMessageHtmlLink":"[오둥이] 2,3 단계 자동 DI 미션 제출합니다 (#118)"}},{"before":"82395535473edc2123a2c8e5c4185ed813442c5e","after":"72d9c7404678eb84bc49b57a2a0a541694c27ead","ref":"refs/heads/haeum808","pushedAt":"2024-09-22T08:01:12.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kimhm0728","name":"Hyemin Kim","path":"/kimhm0728","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/70271235?s=80&v=4"},"commit":{"message":"[해음] 2,3 단계 자동 DI 미션 제출합니다 (#125)","shortMessageHtmlLink":"[해음] 2,3 단계 자동 DI 미션 제출합니다 (#125)"}},{"before":"10b31bc7815bd50b3e0cb5407c1f6dd27bc0727d","after":"46494e120dc6ac1d0ac61e03ed8e1602e58e1bdd","ref":"refs/heads/sh1mj1","pushedAt":"2024-09-22T07:44:01.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jinuemong","name":"김진우","path":"/jinuemong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/85734140?s=80&v=4"},"commit":{"message":"[심지] 2,3 단계 자동 DI 미션 제출합니다 (#121)\n\n* docs: step2 README\r\n\r\n* test(AnnotationTest): 애노테이션 학습 테스트\r\n\r\n* feat(BaseViewModelFactory2): @Inject 를 가진 필드 주입하기\r\n\r\n* refactor: 주입 컨테이너 인터페이스 분리\r\n\r\n* test(BaseViewModelFactory2): 뷰모델 생성이 예외를 던지지 않음\r\n\r\n* fix(BaseViewModelFactory2): 리턴 값 실수\r\n\r\n* feat(ShoppingDatabase): 싱글톤 객체 생성\r\n\r\n* feat(CartProductDao): 싱글톤 객체 생성\r\n\r\n* refactor(CartRepository); suspend 로, dao 를 가짐\r\n\r\n* test(CoroutinesTestRule): junit4 를 위한 테스트 rule\r\n\r\n* test(DefaultInjectedSingletonContainerTest): 페이크 레포로 테스트\r\n\r\n* test(CartRepositoryTest): suspend 이므로 runTest\r\n\r\n* test(CartViewModelTest): CoroutinesTestRule 추가\r\n\r\n* test(MainViewModelTest): CoroutinesTestRule 추가\r\n\r\n* test(BaseViewModelFactory2Test): FakeCartRepo\r\n\r\n* feat: 장바구니 뷰와 데이터베이스에 장바구니 상품 적절히 제거\r\n\r\nissue: 마지막 상품이 정상 제거되지 않음\r\n\r\n* test(ProductFixture): 타입 맞추기\r\n\r\n* docs(README): 3단계 요구사항\r\n\r\n* feat(InMemoryCartRepository)\r\n\r\n* feat(InjectAnnotation)\r\n\r\n* feat(Qualifier): 애노테이션\r\n\r\n* feat(InjectedComponent): Qualifier 타입 프로퍼티 추가\r\n\r\n* feat(Injected~Container): qulifier 를 가진 find 함수 추가\r\n\r\n* feat(AppContainer): qualifier 를 가지고 컴포넌트 찾기\r\n\r\n* feat(InMemoryCartRepository)\r\n\r\n* feat(ShoppingApplication): Qualifier 를 통해 활용하여 구분\r\n\r\n* chore: log 제거\r\n\r\n* feat(DependencyInject)\r\n\r\n* refactor: DefaultProductRep -> InMemoryProductRepo\r\n\r\n* chore: 주석 제거\r\n\r\n* refactor: 모듈 분리 di 라이브러리\r\n\r\n* feat(DependencyInjector): 생성자 파라미터도 inject 검사하도록\r\n\r\n* refactor(DependencyInjector): 함수 분리\r\n\r\n* chore(MyClass): delete\r\n\r\n* feat(FakeInjected~~Container): qualifier 를 가지는 함수 구현\r\n\r\n* test(CartViewModel): 터지는 테스트 수정\r\n\r\n* test(InMemoryRepositoryTest)\r\n\r\n* test(BaseViewModelFactoryTest)\r\n\r\n* feat(InjectedComponent): 싱글톤 객체 주입 dsl\r\n\r\n* feat(BaseViewModelFactory): inject dsl\r\n\r\n* refactor(DependencyInjector): foundDependency 함수 파라미터 수정, 병합\r\n\r\n* refactor(FakeInjectedContainer): find 함수 구현부 가독성 개선\r\n\r\n* feat(SingletonContainer): ComponentKey 캐싱\r\n\r\n* feat(InjectAnnotation): Qualifier 에 generate 필드 추가\r\n\r\n* feat(InjectedComponent): injectableProperties 메서드\r\n\r\n* refactor(ComponentKey): 매 순간 리플렉션해서 얻는 게 아닌 맵으로 캐싱\r\n\r\n* refactor(ComponentKey): 패키지 분리\r\n\r\n* build: junit5 와 kotest 를 가능하게 한다\r\n\r\n* test(InjectedComponentTest): injectableProperties\r\n\r\n* refactor(AppContainer): 메서드 교체 findWithKey -> find\r\n\r\n* refactor: 확장 함수 분리\r\n\r\n* refactor: KParameterExtension,KPropertyExtension -> KAnnotatedElementExtensionKtTest\r\n\r\n* test(DefaultInjectedSingletonContainerTest)\r\n\r\n* test(DefaultInjectedSingletonContainer): add, find\r\n\r\n* refactor(DefaultInjectedSingletonContainer): 리스트 형태의 컴포넌트 제거\r\n\r\n* refactor(ComponentKey): 캐싱\r\n\r\n* refactor(InjectedSingletonContainer): findWithKey -> find 메서드 오버로딩\r\n\r\n* refactor(appContainer): find 메서드 오버로딩\r\n\r\n* fix(DependencyInjector): safe type casting\r\n\r\n* chore: log 제거","shortMessageHtmlLink":"[심지] 2,3 단계 자동 DI 미션 제출합니다 (#121)"}},{"before":"55d2c872b70e65822c430e3849b74747e7f62267","after":"a96f6ca93da0bcce7cf6aff76bd36e53a3a3bb79","ref":"refs/heads/joyehyun99","pushedAt":"2024-09-22T03:26:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Junyoung-WON","name":"hodu","path":"/Junyoung-WON","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/92203597?s=80&v=4"},"commit":{"message":"[예니] 2, 3단계 자동 DI 미션 제출합니다. (#111)\n\n* docs: 2단계 요구사항 정리\r\n\r\n* feat: CartProduct 정의 및 `CartProductDao` 객체 참조하도록 설정\r\n\r\n* feat: 날짜 정보 표시\r\n\r\n* feat: Annotation을 활용하여 필요한 요소에만 의존성 주입\r\n\r\n* feat: 필드 주입 구현\r\n\r\n* test: 의존성 주입 테스트\r\n\r\n* docs: 3단계 요구사항 정리\r\n\r\n* feat: 의존성 주입 타입에 따라 annotation 정의\r\n\r\n* feat: 의존성 주입 타입에 자동으로 다르게 주입하도록 설정\r\n\r\n* feat: 모듈 분리\r\n\r\n* refactor: 불필요한 코드 제거\r\n\r\n* refactor: 어노테이션 재구성\r\n\r\n* fix: 의존성 주입 로직 수정\r\n\r\n* chore: 불필요한 파일 제거\r\n\r\n* test: 의존성 모듈 테스트 추가\r\n\r\n* test: 뷰모델 테스트 수정\r\n\r\n* chore: 불필요한 코드 제거","shortMessageHtmlLink":"[예니] 2, 3단계 자동 DI 미션 제출합니다. (#111)"}},{"before":"642fda43ae7c76846e3236e0551ae3d94e58ce9f","after":"495c754c8945117235e263e1cac45e6c8a26bd20","ref":"refs/heads/junyoung-won","pushedAt":"2024-09-22T01:59:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sh1mj1","name":"sh1mj1","path":"/sh1mj1","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/90040304?s=80&v=4"},"commit":{"message":"[호두] 2, 3단계 자동 DI 미션 제출합니다. (#110)\n\n* refactor: Test에 필요한 Fake 객체들의 파일 분리\r\n\r\n* refactor: 사용하지 않는 imports 제거\r\n\r\n* refactor: requireNotNull 활용 및 에러 메시지 상수화\r\n\r\n* docs: 2단계 과제 요구사항 작성\r\n\r\n* refactor: Repository의 구현체 이름 변경\r\n\r\n- SomethingDefaultRepository -> DefaultSomethingRepository 의 형식으로 변경\r\n\r\n* feat: CartProduct 추가 및 Entity를 Domain 모델로 변경하는 Mapper 작성\r\n\r\n* feat: 프로퍼티의 의존성 주입을 확인하기 위한 어노테이션 작성\r\n\r\n* feat: ShoppingDatabase의 인스턴스 생성 및 저장 로직 추가\r\n\r\n* refactor: DependencyContainer 로직 변경 및 클래스명 변경\r\n\r\nDependencyContainer\r\n- 구현체 클래스 타입을 반환하는 getInplement 추가\r\n- 외부에서 instance를 저장하는 setInstance 추가\r\n\r\nDefaultDependencyContainer\r\n- ViewModelDependencyContainer -> DefaultDependencyContainer\r\n- 내부 구현 변경\r\n\r\n* refactor: DependencyInjector 개선\r\n\r\n- object 싱글톤 객체로 변환\r\n- 재귀적으로 의존성을 찾아 주입시키며 인스턴스를 생성 및 반환하도록 수정\r\n\r\n* refactor: DependencyInjector 변경에 따른 ViewModelFactory 수정\r\n\r\n* refactor: ViewModel의 Repository를 생성자 파라미터가 아닌 프로퍼티로 변경\r\n\r\n* refactor: CartRepository 변경\r\n\r\n- CartProduct 활용\r\n- CartProduct 삭제 시 id(Long)로 삭제\r\n- DAO 를 참조하도록 변경\r\n\r\n* refactor: 장바구니의 아이템 삭제 및 바인딩 로직 변경\r\n\r\n- 삭제에 대한 콜백 함수 수정\r\n- 장바구니에 추가된 시간 바인딩하여 표시\r\n- 데이터바인딩 객체를 Product 에서 CartProduct 로 변경\r\n\r\n* style: ktlint 적용\r\n\r\n* test: 기능 변경 사항에 따른 Test 코드 수정\r\n\r\n* refactor: DependencyInjector 의 메서드 분리\r\n\r\n* refactor: 불필요한 상수값 제거 및 로그 삭제\r\n\r\n* docs: 2단계 기능 요구 사항 만족 여부 확인\r\n\r\n* docs: 3단계 요구 사항 작성\r\n\r\n* feat: Qualifier 어노테이션 추가\r\n\r\n* feat: Qualifier 어노테이션을 적용하여 qualifier name 에 따라 다른 인스턴스를 주입받도록 수정\r\n\r\n* refactor: 모듈 분리\r\n\r\n- 의존성 주입 로직이 담겨있는 di 모듈을 생성하여 분리\r\n- di 모듈에 대한 라이브러리 의존성 추가\r\n- 관련 클래스 및 어노테이션 마이그레이션\r\n- 테스트 코드 마이그레이션\r\n- 의존성 주입에 대한 테스트 코드 수정 (의존성 주입 관련 어노테이션 활용)\r\n\r\n* style: ktlint 확인\r\n\r\n* docs: 3단계 기능 요구 사항 만족 여부 확인\r\n\r\n* feat: object의 경우도 의존성 주입이 가능하도록 변경\r\n\r\n- object의 경우는 생성자에 접근할 수 없고, objectInstance로 인스턴스를 받아올 수 있다.\r\n- objectInstance도 내부 프로퍼티의 의존성 주입이 필요할 수 있으므로, setDependencyOfProperties 메서드로 의존성 주입을 시도한다.\r\n- 메서드 분리 및 코드 정리\r\n\r\n* refactor: 학습 테스트 코드를 di 모듈로 이동\r\n\r\n- reflect 의존성이 app 모듈에는 존재하지 않아 발생한 import 에러를 수정하기 위함\r\n\r\n* test: ViewModel의 테스트에서 DependencyInjector에 관련된 코드와 의존성 제거\r\n\r\n- ViewModel의 테스트에 DI와 관련된 구현이 함께 있을 필요는 없다.\r\n- ViewModel에 수동 의존성 주입이 가능하도록 내부 프로퍼티 접근 제한을 public으로 변경\r\n\r\n* test: FakeDependencyContainer 대신 DefaultDependencyContainer 사용\r\n\r\n* test: 사용하지 않는 테스트용 Fake 객체 제거\r\n\r\n* fix: Qualifier 어노테이션이 제대로 적용되지 않는 오류 수정\r\n\r\n* refactor: Qualifier 어노테이션 활용 방안 변경\r\n\r\n- javax의 Qualifier 어노테이션이 붙은 커스텀 어노테이션을 의존성 구분자로 설정\r\n- typealias 지정","shortMessageHtmlLink":"[호두] 2, 3단계 자동 DI 미션 제출합니다. (#110)"}},{"before":"f8b415d5793026a47011a19c182b6f2344583ad5","after":"e74b105f7b13e880c5e8c0dd56f6a858cd57f18e","ref":"refs/heads/namyunsuk","pushedAt":"2024-09-21T08:43:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"murjune","name":"JUNWON LEE","path":"/murjune","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/87055456?s=80&v=4"},"commit":{"message":"[서기] 2,3 단계 자동 DI 미션 제출합니다 (#106)\n\n* docs: 기능 요구사항 작성\r\n\r\n* feat: Annotation을 붙여서 필요한 요소에만 의존성을 주입하도록 구현\r\n\r\n* refactor: CartRepository가 Dao를 참조하도록 변경\r\n\r\n* feat: ShoppingDatabase생성 코드 작성\r\n\r\n* feat: Recursive DI구현\r\n\r\n* refactor: recursiveDI방식 변경\r\n\r\n* refactor: DiModule을 Module로 추상화\r\n\r\n* test: Fixture작성\r\n\r\n* test: 필드 주입 테스트 작성\r\n\r\n* test: DiContainer테스트 작성\r\n\r\n* docs: 기능 요구사항 추가\r\n\r\n* feat: 어노테이션 작성\r\n\r\n* refactor: 클래스명 변경\r\n\r\n* feat: CartRepositoryInMemory구현\r\n\r\n* feat: Qualifier 기능구현\r\n\r\n* refactor: 모듈분리\r\n\r\n* refactor: 어노테이션 패키지 분리\r\n\r\n* style: lint적용\r\n\r\n* test: 테스트 작성\r\n\r\n* refactor: 메서드 접근제한자 변경\r\n\r\n* refactor: DI 라이브러 테스트 위치 변경\r\n\r\n* refactor: InMemory 와 OnDisk어노테이션 클라이언트로 이동\r\n\r\n* refactor: FieldInjectionTest 오타 수정 및 테스트 추가\r\n\r\n* refactor: 인터페이스구현체와 일반 구현체를 구분, 일반적인 객체에서도 FieldInject를 할 수 있도록 리팩토링","shortMessageHtmlLink":"[서기] 2,3 단계 자동 DI 미션 제출합니다 (#106)"}},{"before":"af46a669b2906ce32b693c3abffba96a507e9a9d","after":"fe2c07ea87e5ccfa46a2419f91d920a728925461","ref":"refs/heads/gaeun5744","pushedAt":"2024-09-21T08:41:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kmkim2689","name":"Gimun Kim","path":"/kmkim2689","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/101035437?s=80&v=4"},"commit":{"message":"[벼리] 2,3 단계 자동 DI 미션 제출합니다 (#115)\n\n* docs: 2단계 요구사항 작성\r\n\r\n* feat: DI 모듈을 위한 어노테이션 및 인터페이스 구현\r\n\r\n* feat: 전체 모듈을 관리하는 객체 구현\r\n\r\n* feat: Binder 및 DIInjection 어노테이션 구현\r\n\r\n* feat: 어노테이션을 이용한 생성자 주입 로직 구현\r\n\r\n* feat: 변경된 로직에 맞춰 코드 수정\r\n\r\n* refactor: 불필요한 어노테이션 제거\r\n\r\n* refactor: 불필요한 인터페이스 메서드 제거\r\n\r\n* docs: 기능 요구사항 업데이트\r\n\r\n* feat: Dao에 관한 DI 로직 구현\r\n\r\n* feat: cartDao를 이용한 객체 저장 로직 구현\r\n\r\n* style: ktlint 적용\r\n\r\n* test: 변경된 코드에 맞춰 테스트코드 수정\r\n\r\n* test: CartActivity에 대한 테스트코드 작성\r\n\r\n* docs: 기능 요구사항 구현 목록 업데이트\r\n\r\n* fix: createdAt 타입 수정\r\n\r\n* docs: 요구사항 구현 목록 업데이트\r\n\r\n* docs: 3단계 요구사항 정리\r\n\r\n* feat: di 모듈 분리 및 적용\r\n\r\n* feat: 생성한 di 모듈 저장 로직 구현\r\n\r\n* move: 패키지 이동\r\n\r\n* test: 모듈 분리에 따른 테스트코드 변경\r\n\r\n* chore: di 모듈 inject dependency 추가\r\n\r\n* feat: Qulifier를 이용한 객체 구분 로직 구현\r\n\r\n* style: ktlint 적용\r\n\r\n* refactor: 함수 분리 & 불필요한 파라미터 제거\r\n\r\n* docs: 기능 요구사항 업데이트\r\n\r\n* remove: 불필요한 어노테이션 제거\r\n\r\n* test: di 모듈 테스트 구현\r\n\r\n* chore: ktlint 적용\r\n\r\n* feat: ViewModel 주입 component 생성\r\n\r\n* feat: 추가된 di 주입 로직 적용\r\n\r\n* feat: di 주입 객체가 하나의 viewModel의 생명주기만 따르도록 구현\r\n\r\n* rename: 메서드 네이밍 수정\r\n\r\n* feat: 공통 로직 추상화\r\n\r\n* feat: SingletonComponent 및 Manager\r\n\r\n* feat: 찾고자 하는 di 객체가 없을 경우, 상위 컴포넌트를 탐색하는 로직 구현\r\n\r\n* style: ktlint 적용\r\n\r\n* refactor: 공통 로직 추상 클래스 구현\r\n\r\n* rename: component 메서드명 변경\r\n\r\n* feat: binder 주입 DSL 구현 & applicationContext 주입 로직\r\n\r\n* style:ktlint 적용\r\n\r\n* remove: 불필요한 로직 제거\r\n\r\n* feat: di 적용 activity를 위한 testRule 구현\r\n\r\n* style: ktlint 적용\r\n\r\n* refactor: 패키지 이동 & 메서드 분리\r\n\r\n* test: di 라이브러리 테스트 구현\r\n\r\n* chore: 불필요한 라이브러리 및 테스트 제거\r\n\r\n* remove: 불필요한 코드 제거\r\n\r\n* style:ktlint 적용","shortMessageHtmlLink":"[벼리] 2,3 단계 자동 DI 미션 제출합니다 (#115)"}},{"before":"c9933082273c9284db63f3aca40f2b6105359f46","after":"26afa452cdd48d81b8dcc5dd9f9d596bd765fbfe","ref":"refs/heads/hxeyexn","pushedAt":"2024-09-21T07:53:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"haeum808","name":null,"path":"/haeum808","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/159797292?s=80&v=4"},"commit":{"message":"[해나] 2,3 단계 자동 DI 미션 제출합니다 (#123)\n\n* docs: 2단계 기능 명세 작성\r\n\r\n* feat: CartRepository가 DAO 객체를 이용해 장바구니 상품을 관리하도록 변경\r\n\r\n- 뷰에서 CartProductEntity를 직접 참조하지 않기 위해 mapper 구현\r\n\r\n* feat: 상품의 position과 deleteCartProduct의 id가 동일한 값임을 보장\r\n\r\n* feat: 장바구니 뷰에서 상품이 담긴 날짜 정보를 확인할 수 있도록 변경\r\n\r\n* feat: Custom Annotation을 이용해 ViewModel 내 필드 주입 구현\r\n\r\n* test: 의존성 라이브러리가 제대로 작동하는지 테스트\r\n\r\n* feat: Qualifier 구현 중\r\n\r\n- 정상 동작하지 않음\r\n\r\n* refactor: di 패키지 분리\r\n\r\n* docs: 3단계 기능 명세 작성\r\n\r\n- 3단계 기능 명세가 누락됨\r\n\r\n* feat: 동일한 인터페이스의 다른 구현체를 제공하는 기능 구현(Qualifier 활용)\r\n\r\n* refactor: typealias 네이밍 수정\r\n\r\n- 대문자로 시작하도록 네이밍 변경\r\n\r\n* refactor: 주 생성자가 없으면 예외를 던지도록 수정\r\n\r\n* refactor: di 모듈 분리\r\n\r\n* test: DependencyInjectorTest 수정","shortMessageHtmlLink":"[해나] 2,3 단계 자동 DI 미션 제출합니다 (#123)"}},{"before":"dab24570b1b8a8abb7f9824528cf36f9ca7b28e2","after":"721e32de1c1d2f02224e4f3b8c12dc91034a2661","ref":"refs/heads/hogu59","pushedAt":"2024-09-21T07:24:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"songpink","name":"alsong","path":"/songpink","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/138569524?s=80&v=4"},"commit":{"message":"[악어] 2,3 단계 자동 DI 미션 제출합니다 (#114)\n\n수고하셨습니다 악어~ 🐊 이번 2,3단계 미션을 진행하면서 DI뿐만 아니라 뷰모델의 생명주기에 대해서 같이 논의하고 많이 얻어간 것 같아서 보람차네요 ㅎㅎ\r\n\r\n제 피드백을 반영하시면서 리팩토링과 수정할 부분이 더 많이 생긴 것 같지만.. 4단계 미션을 위해 일단 머지하겠습니다. 먼저 4단계에 집중해 주시고, 새로 드린 피드백들은 4단계 이후에 반영하시면 좋을 것 같아요!\r\n\r\n저번 코멘트에 대한 답글도 확인 부탁드릴게요~","shortMessageHtmlLink":"[악어] 2,3 단계 자동 DI 미션 제출합니다 (#114)"}},{"before":"0981c521a193bd58fd53f77435d4701c1ef99067","after":"ffd3e8915757f7c6428892ac796880088bd428b2","ref":"refs/heads/kkosang","pushedAt":"2024-09-21T01:26:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"hxeyexn","name":"Hyeyeon Gong","path":"/hxeyexn","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/103019852?s=80&v=4"},"commit":{"message":"[꼬상] 2,3 단계 자동 DI 미션 제출합니다 (#119)\n\n* refactor: repository module 생성\r\n\r\n* docs: step2 기능 요구 사항 작성\r\n\r\n* test: annotationReflection 학습테스트 추가\r\n\r\n* feat: cartRepository 의존성 주입\r\n\r\n* feat: CartRepository Recursive DI\r\n\r\n* feat: 장바구니 상품의 날짜정보 property 추가\r\n\r\n* fix: 장바구니 삭제시 상품의 id값으로 삭제\r\n\r\n* docs: step2 선택 요구 사항 작성\r\n\r\n* docs: step3 기능 요구 사항 작성\r\n\r\n* feat: Qualifier 적용하여 선택적으로 의존성 주입\r\n\r\n* feat: DI Module 분리\r\n\r\n* refactor: 불필요한 코드 삭제\r\n\r\n* style: ktFormat\r\n\r\n* test: DI test 추가\r\n\r\n* style: ktFormat\r\n\r\n* docs: README 수정\r\n\r\n* refactor: DependencyContainer 코드리뷰 반영\r\n\r\n* refactor: instance 생성로직 이동\r\n\r\n* refactor: 패키지 구조 수정\r\n\r\n* fix: InMemoryDB 사용시 아이템 삭제 버그 수정\r\n\r\n* test: Qualifier 테스트 작성\r\n\r\n* test: DependencyContainerTest 수정\r\n\r\n* style: ktFormat","shortMessageHtmlLink":"[꼬상] 2,3 단계 자동 DI 미션 제출합니다 (#119)"}},{"before":"f10b742a318842a1348507cdaeaaad4a9f9503ec","after":"885a9bd338b9e77c7f82f6e3b29f36e2c8450087","ref":"refs/heads/jinuemong","pushedAt":"2024-09-20T15:05:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"gaeun5744","name":"Gaeun Lee","path":"/gaeun5744","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/92314556?s=80&v=4"},"commit":{"message":"[누누] 2,3 단계 자동 DI 미션 제출합니다 (#105)\n\n* docs: 기능 요구사항 작성\r\n\r\n* feat: CartRepository가 DAO 객체를 참조하도록 변경\r\n\r\n* feat: 뷰모델 내 필드 주입 구현\r\n\r\n* docs: 기능 요구 사항 수정\r\n\r\n* feat: 어노테이션 생성\r\n\r\n* feat: CartProductViewHolder에서 날짜 정보를 확인할 수 있도록 구현\r\n\r\n* feat: 어노테이션 생성\r\n\r\n* feat: ViewModel 필드 주입 구현\r\n\r\n* feat: @Inject 어노테이션 적용\r\n\r\n* feat: 로컬 모듈 구현\r\n\r\n* docs: 기능 요구사항 점검\r\n\r\n* feat: 모듈 분리\r\n\r\n* test: 뷰 모델에 정상적으로 주입이 되는지 확인하는 테스트 코드 작성\r\n\r\n* test: 테스트 추가\r\n\r\n* style: 코드 포맷 수정 & 린트 체크\r\n\r\n* fix: Qualifier 로직 오류 수정\r\n\r\n* refactor: Qualifier 패키지 이동\r\n\r\n* refactor: Annotation 관련 확장 함수 선언\r\n\r\n* fix: DiViewModelComponent에서 Annotation 주입 안되는 문제 해결\r\n\r\n* fix: @Inject 어노테이션이 역할을 수행할 수 있도록 수정\r\n\r\n* style: 코드 포맷 수정 & 린트 체크\r\n\r\n* test : 테스트 추가 작성\r\n\r\n* style: 코드 포맷 수정 & 린트 체크","shortMessageHtmlLink":"[누누] 2,3 단계 자동 DI 미션 제출합니다 (#105)"}},{"before":"1b28aec0949196ddb6123d14f68f4505d49f0e87","after":"149be6bd3e436cf9e15edf12610e7bac17b75173","ref":"refs/heads/chaehyuns","pushedAt":"2024-09-20T12:40:25.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"dpcks0509","name":"박예찬","path":"/dpcks0509","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/102402485?s=80&v=4"},"commit":{"message":"[채채] 2,3 단계 자동 DI 미션 제출합니다 (#112)\n\n* docs: 2단계 요구사항 문서 작성\r\n\r\n* refactor: 사용하지 않는 파일 삭제\r\n\r\n* feat: view에서 CartProductEntity를 직접 참조하지 않기 위한 mapper 구현\r\n\r\n* feat: CartRepository가 DAO 객체를 참조하도록 변경\r\n\r\n* feat: Annotation을 붙여서 필요한 요소에만 의존성을 주입\r\n\r\n* feat: 장바구니에 상품이 담겼는지를 알 수 있는 기능 추가\r\n\r\n* feat: id를 통해 cart의 item들을 삭제하는 기능 구현\r\n\r\n* docs: 3단계 요구사항 문서 작성\r\n\r\n* refactor: constructor에 대해서도 주입할 수 있는 기능 및 함수 네이밍 변경\r\n\r\n* feat: Qualifier 구현\r\n\r\n* feat: di 라이브러리 모듈 분리\r\n\r\n* feat: 의존성 주입 오류 수정\r\n\r\n* style: ktlint 적용\r\n\r\n* refactor: 필요없는 파일 제거\r\n\r\n* test: 의존성 확인 테스트 추가\r\n\r\n* refactor: CartProductAdapter ListAdapter로 변경\r\n\r\n* refactor: 카트 삭제 로직 변경","shortMessageHtmlLink":"[채채] 2,3 단계 자동 DI 미션 제출합니다 (#112)"}},{"before":"4d1bdc1dc8b99c7716b94b1630e1a81e172d3e81","after":"bd92c475c40cef85cbbdd1babd2578bff0faf892","ref":"refs/heads/aprilgom","pushedAt":"2024-09-20T10:47:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Hogu59","name":null,"path":"/Hogu59","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/62333909?s=80&v=4"},"commit":{"message":"[차람] 2,3 단계 자동 DI 미션 제출합니다 (#113)\n\n* docs: readmeˆ\r\n\r\n* refactor: CartRepository의 추상화\r\n\r\n* refactor: ProductRepository의 추상화\r\n\r\n* docs: readmeˆ\r\n\r\n* style: ktLintFormatˆ\r\n\r\n* docs: readme 수정\r\n\r\n* refactor: repository 인스턴스 위치를 application으로 변경\r\n\r\n* refactor: 자동 의존성 주입\r\n\r\n* fix: viewmodel 초기화 시에 initializer 추가\r\n\r\n* docs: readme\r\n\r\n* refactor: inject를 할 때 만든 인스턴스 저장, 예외 시 IllegalArgumentˆException을 던짐\r\n\r\n* refactor: 뷰모델 팩토리 확장 함수 구현\r\n\r\n* refactor: di 초기화 Application의 onCreate에서 하도록 변경\r\n\r\n* refactor: step2,3\r\n\r\n* refactor: Qualifier Dao 교체\r\n\r\n* refactor: CartRepository의 추상화\r\n\r\n* refactor: ProductRepository의 추상화\r\n\r\n* style: ktLintFormatˆ\r\n\r\n* refactor: 자동 의존성 주입\r\n\r\n* fix: viewmodel 초기화 시에 initializer 추가\r\n\r\n* chore: rebase 작업\r\n\r\n* chore: 사용되지 않는 코드 제거\r\n\r\n* refactor: providers가 viewModelFactory, context도 제공하도록 변경ˆ\r\n\r\n* feat: 의존성 생성자 주입 구현\r\n\r\n* test: 재귀 주입 테스트\r\n\r\n* test: 필드 주입 테스트\r\n\r\n* refactor: 리뷰 반영\r\n\r\n* refactor: Product 기본값 추가\r\n\r\n* refactor: inject 함수 분리\r\n\r\n* test: Qualifier 구분 테스트, 생성자 필드 혼합 주입 테스트 추가","shortMessageHtmlLink":"[차람] 2,3 단계 자동 DI 미션 제출합니다 (#113)"}},{"before":"7bede70799896804f6fd5e92fb8da4f93de7d63c","after":"44516d9c8e62eab3b0c55846ca43aab8fc761b15","ref":"refs/heads/songpink","pushedAt":"2024-09-20T05:44:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"JoYehyun99","name":"Yehyun Jo","path":"/JoYehyun99","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/81362348?s=80&v=4"},"commit":{"message":"[알송] 2,3 단계 자동 DI 미션 제출합니다 (#117)\n\n* docs: 미션 요구사항 정리\r\n\r\n* style: 클래스 프로퍼티 세로로 나열\r\n\r\n* feat: CartRepository가 DAO 객체를 참조하도록 변경\r\n\r\n* feat: 함수에 제네릭 적용\r\n\r\n* feat: 주입이 필요한 프로퍼티를 알려주는 어노테이션 구현\r\n\r\n* fix: 상품이 제대로 삭제되지 않는 오류 수정\r\n\r\n* feat: 뷰모델의 클래스 내부에서 선언된 리포지토리 주입 기능 구현\r\n\r\n* feat: 뷰모델 뿐 아닌 모든 객체의 필드주입 기능 구현\r\n\r\n* docs: 기능구현사항 반영\r\n\r\n* feat: CartViewModel의 리포지토리를 생성자에서 내부로 이동시키고 내부에서 주입되도록 수정\r\n\r\n* test: MainViewModel이 상품을 가져올 수 있는지 여부 테스트 작성\r\n\r\n* docs: 기능구현사항 반영\r\n\r\n* feat: 카트에서 날짜를 확인할 수 있는 기능 구현\r\n\r\n* docs: 3단계 기능요구사항 정리\r\n\r\n* feat: 인터페이스의 여러 구현체 중 어노테이션이 붙은 구현체를 주입할 수 있는 기능 구현\r\n\r\n* feat: 인터페이스의 여러 구현체 중 어노테이션이 붙은 구현체를 주입할 수 있는 기능 구현\r\n\r\n* docs: 기능구현사항 반영\r\n\r\n* refactor: 필요 없는 파일 제거\r\n\r\n* feat: 모듈 분리\r\n\r\n* feat: alsonglibrary가 app모듈을 참조하지 않도록 수정\r\n\r\n* test: CartActivityTest 작성\r\n\r\n* style: 필요 없는 코드 제거\r\n\r\n* docs: 기능구현사항 반영\r\n\r\n* refactor: 함수 indent 줄임\r\n\r\n* refactor: 불필요한 코드 제거, var -> val 수정\r\n\r\n* refactor: 필요 없는 주석 제거 및 가독성 향상\r\n\r\n* refactor: 함수 호출 순서에 맞게 배열\r\n\r\n* refactor: associateWith를 활용해 가독성 향상\r\n\r\n* study: 리플렉션 학습 스터디\r\n\r\n* refactor: 리포지토리 네이밍 수정\r\n\r\n* refactor: 임시커밋\r\n\r\n* refactor: 임시커밋\r\n\r\n* refactor: 임시커밋\r\n\r\n* refactor: 임시커밋\r\n\r\n* refactor: 로그 제거\r\n\r\n* refactor: ktFormat 적용\r\n\r\n* feat: 필드 qualifier 주입 구현\r\n\r\n* refactor: 가독성 향상을 위한 함수 분리\r\n\r\n* refactor: 네이밍 개선\r\n\r\n* refactor: 주석 제거\r\n\r\n* refactor: 제네릭을 쓸 필요가 없는 부분 수정\r\n\r\n* test: 임시커밋\r\n\r\n* test: 라이브러리 테스트코드 작성\r\n\r\n* test: 라이브러리 테스트코드 작성\r\n\r\n* test: 테스트 픽스처의 쓰이지 않는 어노테이션 DefaultRepository의 네이밍에 0을 붙여 쓰이지 않는다는 의미를 더욱 강조","shortMessageHtmlLink":"[알송] 2,3 단계 자동 DI 미션 제출합니다 (#117)"}},{"before":"35be0dbb18ed506db0bfe5a159db4ff52d2bbd19","after":"536d426be5bb2fad95a93eef4af3e1df7bc8c3b3","ref":"refs/heads/dpcks0509","pushedAt":"2024-09-20T05:27:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ii2001","name":"YECHAN KIM","path":"/ii2001","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/74256335?s=80&v=4"},"commit":{"message":"[채드] 2,3 단계 자동 DI 미션 제출합니다 (#107)\n\n* docs: 2,3단계 기능 요구 사항 작성\r\n\r\n* feat: CartRepository가 CartProductDao를 참조하도록 변경\r\n\r\n* feat: Module 자동 주입 및 카트 아이템에 날짜 정보 추가\r\n\r\n* feat: Annotation을 붙여서 필요한 요소에만 의존성을 주입하는 기능 추가\r\n\r\n* feat: 2단계 요구사항, deleteCartProduct 삭제 구현\r\n\r\n* feat: 3단계 요구 사항 구현\r\n\r\n* refactor: Qualifier 어노테이션 수정\r\n\r\n* refactor: 주입 코드 수정\r\n\r\n* test: Qualifier 테스트 추가\r\n\r\n* style: DI 라이브러리 주석 추가\r\n\r\n* refactor: instance가 저장되어 있지않을경우에 바로 새로 생성하도록 getInstance 함수 수정\r\n\r\n* refactor: 테스트 코드 Fake 객체 분리\r\n\r\n* feat: Qualifier(Database, InMemory) 구분 처리\r\n\r\n* remove: di 모듈 gitignore 파일 삭제\r\n\r\n* refactor: Qualifier 지정 로직 수정","shortMessageHtmlLink":"[채드] 2,3 단계 자동 DI 미션 제출합니다 (#107)"}},{"before":"1ce5de6d466f84688d4339d5a08ced6f3c447a91","after":"4ae9f72ea77caf42a5ddbb7170de4d0a72dc482f","ref":"refs/heads/junjange","pushedAt":"2024-09-20T01:34:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"aprilgom","name":null,"path":"/aprilgom","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/8610234?s=80&v=4"},"commit":{"message":"[에디] 2,3 단계 자동 DI 미션 제출합니다 (#124)\n\n* refactor: 인터페이스와 구현체 분리\r\n\r\n* test: AnnotationReflectionTest\r\n\r\n* feat: DaoModule\r\n\r\n* feat: DatabaseModule\r\n\r\n* refactor: CartRepositoryImpl 생성자 추가\r\n\r\n* refactor: Product mapper 추가 및 상품이 담긴 날짜 추가\r\n\r\n* feat: di 어노테이션으로 수정\r\n\r\n* feat: di 모듈 분리\r\n\r\n* chore: gradle javax inject 추가\r\n\r\n* refactor: Inject와 Qualifier어노테이션 수정\r\n\r\n* refactor: applicationContext로 명시\r\n\r\n* test: di test","shortMessageHtmlLink":"[에디] 2,3 단계 자동 DI 미션 제출합니다 (#124)"}},{"before":"964b362234c48c569c3c5dfc0b850a8630b5d8f9","after":"4e144a478eb9813642cfdb1ede88fd99724db49b","ref":"refs/heads/ii2001","pushedAt":"2024-09-19T06:44:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"junjange","name":"JunJangE","path":"/junjange","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/69571848?s=80&v=4"},"commit":{"message":"[하디] 2,3단계 자동 DI 미션 제출합니다. (#103)\n\n고생하셨습니다~~~","shortMessageHtmlLink":"[하디] 2,3단계 자동 DI 미션 제출합니다. (#103)"}},{"before":"ee64a85f22a76e899de430368f1028d69fcf0834","after":"f2d70a9ba47086ff2f16137924ccab9d9a602dfc","ref":"refs/heads/kimhm0728","pushedAt":"2024-09-18T15:11:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Namyunsuk","name":null,"path":"/Namyunsuk","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/84739562?s=80&v=4"},"commit":{"message":"[올리브] 2,3 단계 자동 DI 미션 제출합니다 (#109)\n\n* docs: 기능 목록 추가\r\n\r\n* test: 어노테이션 학습 테스트\r\n\r\n* feat: lateinit var 필드에 인스턴스를 주입하는 기능 구현\r\n\r\n* feat: 어노테이션이 붙은 필드만 의존성 주입하는 기능 구현\r\n\r\n* refactor: ViewModel의 레포지토리를 필드로 수정\r\n\r\n* refactor: CartRepository에서 dao를 참조하도록 변경\r\n\r\n* feat: Recursive DI 구현\r\n\r\n* feat: 장바구니 담은 시간 뷰에 출력\r\n\r\n* refactor: ClassLoader 삭제 및 Recursive DI 방식 변경\r\n\r\n* chore: 사용하지 않는 코드 삭제\r\n\r\n* chore: FieldInject -> Inject 클래스명 변경\r\n\r\n* docs: 3단계 기능 목록 추가\r\n\r\n* feat: Qualifier 구현\r\n\r\n* feat: DI 모듈 분리\r\n\r\n* fix: application 참조하는 방식 변경\r\n\r\n* style: ktLint 적용\r\n\r\n* refactor: 함수 분리 및 일급 컬렉션 추가\r\n\r\n* test: DIContainer 테스트\r\n\r\n* docs: 구현한 기능 목록 체크\r\n\r\n* test: 테스트 픽스처 분리\r\n\r\n* docs: 주석 달기\r\n\r\n* style: ktLint 적용\r\n\r\n* test: 테스트 함수 위치 변경\r\n\r\n* refactor: Qualifier 어노테이션이 있는지 판별하는 코드를 함수 분리\r\n\r\n* build: 사용하지 않는 의존성 삭제\r\n\r\n* refactor: 뷰모델 팩토리 생성하는 코드를 확장 함수로 이동\r\n\r\n* refactor: 싱글톤 인스턴스인지를 구분하는 방식을 어노테이션으로 수정\r\n\r\n* refactor: DIContainer에서 공통된 로직을 다른 파일로 분리\r\n\r\n* chore: ViewModelFactory 위치를 di 모듈로 이동\r\n\r\n* chore: 뷰모델 확장 함수 제거\r\n\r\n* fix: KFunction의 arguments가 제대로 전달되지 않는 버그 해결\r\n\r\n* test: 테스트 클래스 분리","shortMessageHtmlLink":"[올리브] 2,3 단계 자동 DI 미션 제출합니다 (#109)"}},{"before":null,"after":"0b470663ce615039ec8daf7cf2d5e0d8b6d3bde0","ref":"refs/heads/revert-98-step1","pushedAt":"2024-09-10T13:02:45.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"chaehyuns","name":"채현","path":"/chaehyuns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/80222352?s=80&v=4"},"commit":{"message":"Revert \"[빙티] 1단계 자동 DI 미션 제출합니다 (#98)\"\n\nThis reverts commit 655de17c27a30f95f7606eba87ff6a1c89428c57.","shortMessageHtmlLink":"Revert \"[빙티] 1단계 자동 DI 미션 제출합니다 (#98)\""}},{"before":"b295198f45e0fa249241ba18bb14670e48bd652b","after":"655de17c27a30f95f7606eba87ff6a1c89428c57","ref":"refs/heads/s6m1n","pushedAt":"2024-09-10T13:01:04.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"chaehyuns","name":"채현","path":"/chaehyuns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/80222352?s=80&v=4"},"commit":{"message":"[빙티] 1단계 자동 DI 미션 제출합니다 (#98)\n\n* docs: README.md 기능 요구 사항 추가\r\n\r\n* refactor: Repository interface로 추상화\r\n\r\n* refactor: ViewModelFactory 추가\r\n\r\n* docs: 리드미 업데이트\r\n\r\n* style: KtLint format\r\n\r\n* refactor: 자동 DI 구현을 위한 DependencyInjector 클래스 추가\r\n\r\n* test: CartViewModel 주입 테스트 추가\r\n\r\n* refactor: Module 인터페이스 추가 및 함수 분리\r\n\r\n* refactor: DependencyInjector를 Application 전역에서 관리하도록 수정\r\n\r\n* refactor: DependencyInjector의 코드 중복 수정\r\n\r\n* refactor: classifier이 KClass일 때만 주입하도록 수정\r\n\r\n* refactor: 예외 메시지 구체화\r\n\r\n* refactor : ViewModel 제공 함수 provideViewModel 추가","shortMessageHtmlLink":"[빙티] 1단계 자동 DI 미션 제출합니다 (#98)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yNFQwMDo1OTowNS4wMDAwMDBazwAAAAS-koZB","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yNFQwMDo1OTowNS4wMDAwMDBazwAAAAS-koZB","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xMFQxMzowMTowNC4wMDAwMDBazwAAAASyEH6O"}},"title":"Activity · woowacourse/android-di"}