Hilt는 안드로이드 스튜디오에서 편리하게 DI를 사용할 수 있도록 Dagger 기반으로 빌드된 라이브러리이다. 프로젝트의 모든 Android 클래스에 컨테이너를 제공하고, 수명 주기를 자동으로 관리하여 DI를 사용한다. 1. build.gradle (kts 기준) 프로젝트 수준 plugins { id("com.google.dagger.hilt.android") version "2.48" apply false } 모듈 수준 plugins { id("kotlin-kapt") id("dagger.hilt.android.plugin") } dependencies { implementation ("com.google.dagger:hilt-android:2.48") kapt ("com.google.dagger:h..
DTO(Data Transfer Object) 로직을 가지고 있지 않으며, 오로지 데이터를 저장하고 다른 곳에 데이터를 전달하는 역할을 한다. getter와 setter만을 가지면 다른 함수는 가지지 않는다. (kotlin은 data class로 선언하면 getter, setter를 생성하지 않아도 된다.) VO(Value Object) 값 자체를 표현하는 역할을 한다. DTO와 반대로 로직을 포함할 수 있다. 불변성을 가지는 데이터를 저장하기 때문에 setter를 가지지 않는다. 다른 메모리를 가지는 객체라도, 모든 속성 값이 같다면 같은 객체라고 판단한다. 객체를 생성하는 시점에 유효성 검사를 한다. class User(private val name: String, private val age: In..
영역 함수는 내가 코틀린에서 가장 좋아하는 기능이고, 그만큼 많이 사용해 왔다. 불필요한 일회성 변수를 선언하지 않아도 되고, 코드의 가독성이 증가하는 점이 좋다! 하지만 정작 영역 함수 6개가 어떤 차이를 가지는지, 어떤 경우에 사용하면 적절한지 확실히 알지 못하고 있는 것 같아 제대로 알아보려고 한다.. 영역 함수는 범위 함수, 범위 지정 함수라고도 불린다. 영역 함수가 필요한 경우 (1) val user = User() user.name = "abc" user.age = 20 print(user) 영역 함수를 사용하지 않은 경우의 간단한 예제를 작성해봤다. user 객체의 프로퍼티를 변경하고, user를 출력하기 위해 객체명인 user를 계속해서 사용한다. val user = User().apply..
보통 프로젝트를 진행할 때 콘솔에 값을 출력할 일은 거의 없지만, 우테코 프리코스를 진행하면서 콘솔창에 출력된 값을 테스트할 일이 생겼다. 우테코에서 미리 구현한 NsTest를 활용해 테스트했지만, 어떻게 돌아가는지 궁금해서 코드를 뜯어봤다. 사실 System.out, OutputStream 등등은 다 java.io 라이브러리이기 때문에, 문법만 코틀린이고 관련 내용은 자바다.. 먼저 printWinners()라는 함수는 게임 우승자를 출력하는 함수라고 가정하자. 이 함수를 테스트하기 위해 필요한 given-when-then은 다음과 같다. given: pobi, woni가 담겨있는 winners 리스트 when: printWinners() 호출 then: "최종 우승자 : pobi, woni" 라는 문..
app:itemBackground - 이 속성을 통해 background color 지정시 메뉴 클릭 효과 나타나지 않음 app:itemIconTint - icon의 색상 app:itemTextColor - text의 색상 app:labelVisibilityMode - labeled로 지정시 icon과 함께 label이 항상 띄워짐 (아이콘만 띄우고 싶을 때 unlabeled) item이 클릭되었을 때, 클릭되지 않았을 때 color를 지정해주고 싶은 경우, 위와 같이 color xml 파일을 생성한다. (res/animator 폴더 안에) state_checked="true"는 클릭되었을 때 color를 지정, false는 클릭되지 않았을 때 color를 지정. 그리고 app:itemIconTint와 ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b7GlHN/btsy9NzPrQH/NR0kzvHc8s7JjbXVpNwvYK/img.png)
Navigation 앱 내의 화면을 들어갔다 나올 수 있게 플로우를 정한다. 일반적으로 화면을 전환할 수 있는 하단바를 의미함. Navigation 구성요소 Navigation Graph: 모든 Navigation 관련 정보가 한 곳에 모여있는 xml 파일. 사용자가 앱에서 갈 수 있는 모든 경로를 보여준다. NavHost: Navigation Graph에서 화면을 표시하는 빈 컨테이너. NavController: NavHost에서 앱 Navigation을 관리하는 객체. 사용자가 앱 내에서 화면을 이동할 때 NavHost에서 화면 전환을 controll하는 역할. Navigation Graph에서 어떤 경로로 이동할지 NavController에게 전달하고, NavController는 NavHost에게 ..
우테코 프리코스를 하다보니 테스트 코드를 작성할 일이 자주 생겼다. 오랜만에 작성해보니까 헷갈려서.. 자주 쓰이는 어노테이션과 함수들을 정리해보려고 한다. Junit 자바를 위한 단위 테스트 라이브러리. Junit 어노테이션 @Test 함수 위에 선언해 테스트 함수임을 지정 @Test(timeout=밀리초) 테스트 함수의 수행 시간을 제한 테스트할 함수가 수행되는 시간이 어노테이션 매개변수로 지정한 시간을 넘긴다면 fail @Test(expected=예외) 테스트할 함수의 예외를 지정 매개변수로 지정한 예외가 발생해야 테스트 pass @Ignore 해당 어노테이션이 선언된 테스트 함수는 무시하도록 지정 @BeforeEach 해당 어노테이션이 선언된 함수는 모든 @Test 함수가 실행되기 전에 실행된다. ..
자바와 코틀린을 둘다 사용하고 있어서, 코틀린에 대한 어려움은 없지만..코딩 테스트에서만 자주 쓰이는 컬렉션 다루는 함수들이나 입출력 관련 함수들은 아직 익숙치 않은 것 같다.안드로이드 직무는 코딩 테스트 언어를 코틀린으로만 제한하는 경우가 종종 있어서, 이번 기회에 코테 준비를 위한 코틀린 함수를 정리해보려 한다! 입력fun main() = with(System.'in'.bufferedReader()) { // Int 읽기 val integer = readLine().toInt() // 입력된 String을 공백 기준으로 나눈 후 Int로 변환 val nums = readLine().split(" ").map { it.toInt() }}자바처럼 속도를 개선하기 위해 Sc..