우테코 6기 ot 전날 설렘 반 떨림 반의 마음으로 합격 회고를 적어본다. 뒤늦게 합격 회고를 적는 이유는... 우테코 과정에서 얻은 사소한 것 모두 티스토리에 기록하자는 자신과의 다짐을 했는데, 이 합격 회고가 그 기록의 시작이길 바라며! 지원 계기+자소서 사실 얼른 취업하고 싶은 마음이 커서 (지금은 아님), 혼자 기업지원+스터디를 할 생각이었다. 그래서 우테코 모집글을 보고도 아무 생각 없이 넘겼고, 내 머릿속에서 우테코가 잊혀질 때쯤.. 우연히 백준에서 우테코 지원 광고를 다시 보게 되었다. "취준 기간 동안, 증거로 남는 의미있는 활동을 하는 것도 좋다"는 동기의 말이 생각나 지원을 다짐했다. 그때가 딱 지원 마감 하루 전이라서 자소서 벼락치기를 했다 ^^;; 우테코 자소서가 기존에 작성하던 기..
특정 뷰가 사용자에게 보여지지 않을 때를 처리할 경우가 있다. 안드로이드 View 클래스에 onWindowVisibilityChanged 라는 리스너가 있었는데, xml이나 코드 상에서 뷰의 visibility 자체를 GONE, INVISIBLE, VISIBLE로 변경하는 경우에만 호출이 되었다. (참고: https://developer.android.com/reference/android/view/View#onWindowVisibilityChanged(int)) 하지만 visibility는 변하지 않고 다른 뷰에 의해 가려지거나 스크롤 액션에 의해 가려지는 경우를 특정하고 싶었다. 그래서 디바이스 화면 자체에서 뷰의 x, y 좌표를 구하고, 그 좌표가 음수값인지 아닌지에 따라 hide 여부를 판별했다...
Failed to compile values file. Resource compilation failed. Check logs for details. Illegal char at index app-mergeDebugResources-70:/values/values.xml resources 파일을 컴파일하면서 생기는 에러인데 따로 빨간줄이 쳐지는게 없어서 찾기 오래걸린다;; 보통 strings, themes, colors, attrs 등 xml 파일에 오타가 나면 발생한다. 1) colors.xml ##FFCC02 위처럼 #을 두개 작성하거나 컬러 코드가 7자리인 경우 오류가 발생한다. 2) attrs.xml 커스텀뷰에 커스텀 속성을 추가할 때, 속성 이름이 이미 존재하는 속성 이름인 경우 발생한다. 나는..
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와 ..