Study
-
코틀린 스터디 - 2장
코틀린 스터디 - 2장
2023.07.23리터럴 변수에 할당되거나 표현식에서 사용되는 고정된 값 매직 리터럴(넘버)을 사용하면 해당 숫자가 어떤 의미인지 바로 파악이 어렵습니다. 따라서 이를 지양하고 상수를 사용해서 직관성을 높이는 것이 좋습니다. 위의 코드는 제가 작업하고 있는 프로젝트에서 counter 변수에 사용되고 있던 매직 넘버를 상수로 리팩토링한 예시입니다. val, var 변수를 선언할 때 value를 재할당할 수 있는 경우 var을 사용하고, 그렇지 않을 경우 val을 사용합니다. time은 var로 선언된 변수입니다. "val로 선언한 변수는 value 재할당이 안 되지 않나? time은 가변적이어서 hour 값이 계속 바뀌니까 hour, minute, second는 var로 선언돼야하는 거 아닌가?"라는 생각이 들면서 헷갈릴 ..
-
[의견대립] Dialog 확장함수를 어떻게 쓸 것인가
[의견대립] Dialog 확장함수를 어떻게 쓸 것인가
2023.07.21배경 프로젝트에서 AlertDialog가 많이 사용되는데 객체를 생성하는 부분은 공통이라 보일러 플레이트 코드가 된다. 이것을 지양하고 편의성을 높이고자 팀원이 확장함수를 만들어주었는데 코드는 아래와 같다. 이 확장함수는 하나의 xml만 inflate하고 그 안에 들어가는 text나 event를 dialog 객체 생성할 때 직접 입력해주는 식이다. 이렇게 하면 같은 layout일 경우에만 유용하고 조금이라도 수정 사항이 생기거나 새 디자인의 dialog가 추가되었을 때 커버할 수 없다. 따라서 나는 아래와 같은 확장함수를 직접 만들어주었다. dialog의 디자인이 어떻든 xml만 잘 만들어서 inflate해주면 기존의 코드를 건드리는 일 없이 모든 경우를 커버할 수 있다. 기존 확장함수의 한계를 해결할 ..
-
[리팩토링] hilt와 repository를 활용한 network 코드 개선
[리팩토링] hilt와 repository를 활용한 network 코드 개선
2023.07.06처음 프로젝트 시작할 때 나는 repository와 DI에 대해 알지 못했다. 그래서 같은 상황에 대해 팀원과 내가 짜는 코드가 달랐다. 가령 나는 data 가공 코드를 다 ViewModel에 적어놓고 retrofit 객체도 직접 생성해서 썼지만 팀원은 repository와 Hilt를 사용해서 data 가공 코드를 ViewModel에서 분리하고 retrofit 객체도 주입 받아서 썼다. 공부해서 구현 방법을 통일하기엔 개발 기간이 2주 남짓되는 해커톤이었기에 현실적으로 어려운 부분이 있었다. 현재는 조금 여유가 생겼고 그때 못했던 공부를 보충하며 리팩토링을 해나가려고 한다. 통신 코드를 짤 때 repository와 hilt를 활용했다. 왜 repository를 사용하는가? repository를 쓰지 않으..
-
클린코드(~45pg)
클린코드(~45pg)
2023.03.15내용 34pg, 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 괜찮다. 36pg, 맥락을 개선하면 함수를 쪼개기가 쉬워진다. 42pg, 함수를 만드는 첫째 규칙은 '작게!'다. 두번째 규칙은 '더 작게!'다. 43pg, if문/else문/while문 등에 들어가는 블록은 한 줄이어야 한다. 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안 된다. 45pg, 함수는 한 가지를 해야 한다. 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 하는 것으로 취급한다. 한 가지 작업만 하는 함수는 자연스럽게 섹션으로 나누기 어렵다. 느낀점 45pg가 제일 핵심이라고 느꼈다. 함수는 하나의 기능만 수행하게 짧게 만들라는 말은 많이 들어왔지만 함수 하나..
-
객체지향의 사실과 오해(~71pg)
객체지향의 사실과 오해(~71pg)
2023.03.20내용 59pg, 객체는 식별자를 가지고 있고 값은 가지고 있지 않지만, 프로그래밍 언어의 관점에서 숫자도 Interger 클래스로부터 생성된 객체이다. 이런 오해의 소지를 줄이기 위해 값 객체(value object)라는 식별자를 가지지 않는 값을 가리키는 별도의 용어를 사용하기도 한다. 60pg, 일반적으로 객체의 상태를 조회하는 작업을 쿼리(query)라고 하고 객체의 상태를 변경하는 작업을 명령(command)이라고 한다. 객체가 외부에 제공하는 행동의 대부분은 쿼리와 명령으로 구성된다. 62pg, 버튼 이외의 다른 방법으로는 기계를 사용할 수 없다. 기계를 직접 열어 내부의 상태에 접근하려고 하지 않는다. 이것은 객체에 접근할 수 있는 유일한 방법은 객체가 제공하는 행동뿐이라는 점을 강조한다. 즉..
-
[공부] Repository의 효용에 대한 고찰
[공부] Repository의 효용에 대한 고찰
2023.03.16개요 data source가 remote인지 local인지 구분할 필요 없게 해준다는 게 어떤 효용인 건지 체감을 잘 못했다. 그런데 어제 책을 통해 캡슐화에 대해 조금 이해하게 되면서 그 의미를 얼핏 알 것만 같다. Presentation Layer에서 분리 클린 아키텍쳐에서는 Layer를 Presentation - Domain - Data 이렇게 3 단계로 나누어야 한다. 레트로핏 코드는 Activity나 Fragment와 같은 View에 바로 작성하거나 ViewModel에 작성을 할 수도 있다. 어느쪽이든 Presentation Layer에 포함되는 것이다. 그런데 이렇게 할 경우 data는 Data Layer에서 다뤄져야 하는데 Presentation Layer에 포함되므로 올바르게 분리되지 못한..
-
[공부] MVVM, ViewModel, LiveData, DataBinding, Fragment
[공부] MVVM, ViewModel, LiveData, DataBinding, Fragment
2023.01.21개요 앱잼이 끝나고 이제 리팩토링을 해야 하는 단계인데 내가 혹시 모르는 부분이 있는지, 애매하게 알고 있어서 찝찝했던 부분들을 공부하고 있다. 여기에 쓰이는 글은 fact라기보단, 현재까지 내가 이해하고 있는대로 쓰는 것이므로 부정확할 수 있다. MVVM ViewModel, AAC ViewModel ViewModel이 다르다는 얘기는 들어본 적이 있는데 당시에는 별 생각 없이 넘겼었다.그러다 이번에 찝찝함을 참지 못하고 결국 구글링을 해보았다. 아래 포스팅을 보고 이해를 했는데 부정확할 수 있다. 안드로이드: How to MVVM MVVM이 뭘까요~~ medium.com 위 포스팅에 따르면 MVVM에서 말하는 ViewModel은 우리가 보통 ViewModel이라 했을 때 떠올리는 것과 다르다는 것이다...