Kotlin

개발/Kotlin

[Kotlin] 타입 소거와 Star projection

제네릭은 제대로 알고 사용해야 한다… ✔️ 제네릭은 Java 5에서 처음으로 도입된 개념이다. Java는 초기 개발 단계에서 제네릭을 고려하지 않았다. 제네릭 도입 전의 컬렉션은 타입 안전성을 제공하지 않았기 때문에 런타임 에러(ClassCastException) 발생 위험이 높았는데, 이후 제네릭이 도입되면서 기존의 컬렉션 클래스와 인터페이스를 타입 안전하게 만들기 위해 제네릭 타입 파라미터를 추가하게 된다. 그로 인해 제네릭이 없던 버전의 코드와 제네릭이 도입된 이후의 코드의 호환성을 유지해야 하는 문제가 발생하게 되는데, 여기서 오늘의 주제 중 하나인 "타입 소거"를 Java 5(1.5)에서 도입하게 된다.타입 소거 제네릭 타입 정보를 컴파일 타임에만 유지하고, 런타임에는 제거하여 원시 타입(raw..

일상/이직 과정 기록

(2) 카카오뱅크 안드로이드 하이라이트 채용 후기 - 1차 면접

1. 면접 준비 전나는 기술 면접 경험이 한 번도 없다. 신입으로 취업할 때에는 바로 실무에서 배우면서 성장하고 싶은 욕심에 기술 면접이라고 하기 애매한 간단한 면접을 보고 전 직장에 취업했었다. 근데 첫 기술 면접이 카카오뱅크라니.. 설레면서도 엄청난 부담감이 밀려왔었다. 주변에는 온통 백엔드 개발자들 뿐이라 검색을 통해 찾은 래퍼런스들 밖에 없어서 올바른 전략을 세우지 못했다ㅠㅠ 지금 생각해보면 당연한 게, CS 공부는 평상시에 꾸준히 했어야 했고 알고리즘 공부 또한 매주 1-2개씩이라도 꾸준히 했어야 했다. 하지만 난 새로운 프로젝트에 처음 사용해보는 구조, 기술들을 적용해야 했기에 직전 일년 간에는 그런 준비보다는 실무적인 부분에 무게를 뒀으므로 이 부분은 나의 실책이라고 생각한다. CS, 알고리..

일상/이직 과정 기록

(1) 카카오뱅크 안드로이드 하이라이트 채용 후기 - 사전 과제

1. 서류 합격퇴사 직후에 반신반의하며 서류를 제출했고, 당연히 서류 탈락할 거라 생각해서 여행 계획을 짜며 시간을 보내고 있었다. 근데 서류 합격? 신기하고 새로운 도전이라는 생각에 두근두근하기도 했다. 5월 5일에 제출했고, 5월 10일에 서류 합격 메일이 도착했다. 문자로도 왔다는데, 스팸 차단 앱이 필터링해버려서 난 뒤늦게 확인했다 ㅠㅠ2. 사전 과제 전형안드로이드는 백엔드 직군과는 다르게 사전 과제 전형이다. 코테 연습은 작년에 하다 새로운 프로젝트 들어가면서 멈춰있던 상태라, 나에게는 천만다행이였다 ㅠㅠ 사전 과제는 5월 11일 오전 10:00 ~ 5월 16일 오후 11:59 까지 진행되었는데, 석가탄신일이 끼어있어서 하루가 늘어난 것으로 보인다. 다른 포스팅들을 보면 과제 전형에 보통 5일을..

개발/Android

[안드로이드] EXTRA_PICK_IMAGES_MAX 사용 시 주의할 점

개발을 하다 보면 이미지 업로드를 위해 갤러리 사진 선택 기능을 사용하는 경우가 있다. 내가 구현하고자 했던 기능은 이미지를 최대 N장 선택 및 리사이클러뷰에 추가, 이후 서버에 업로드하는 기능이였는데, Tiramisu 이상에서 추가된 MediaStore.ACTION_PICK_IMAGES의 MediaStore.EXTRA_PICK_IMAGES_MAX라는 Intent extra를 설정하다 문제에 직면했다. 트러블 val maxPhotoCount = MAX_PHOTO_COUNT - currPhotoCount val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply { putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNumPhotos..

CS

[CS] mutableMapOf / linkedMapOf / hashMapOf 차이

#본 포스팅은 Kotlin 기준으로 작성되었습니다. linkedMapOf는 LinkedHashMap을 반환하겠지.hashMapOf는 HashMap을 반환하겠지.mutableMapOf는 MutableMap을 반환하겠지. 근데 그건 사실 LinkedHashMap이였다. 왜? mutableMapOfmutableMapOf 함수는 LinkedHashMap을 반환하는 함수이다.public inline fun mutableMapOf(): MutableMap = LinkedHashMap()public fun mutableMapOf(vararg pairs: Pair): MutableMap =    LinkedHashMap(mapCapacity(pairs.size)).apply { putAll(pairs) } 초기값이..

개발/Kotlin

[Kotlin] 테스트 코드 (1) - 테스트 코드란?

오늘 포스팅할 내용은 "테스트 코드 작성"에 관한 이야기이다. 안드로이드 단톡방에서 사람들이 메서드 하나 추가될 때마다 적는다던 테스트 코드, 정보처리기사 공부하다 봤던 TDD, 여러 채용 공고들에 숱하게 적혀있던 "테스트 코드 작성 경험이 있으신 분" 등 안드로이드 진영에서의 테스트 코드 작성의 중요성은 날이 갈수록 커지고 있다. "테스트 코드"를 실무에서 작성해 본 경험이 없어 이에 대한 지식이 전무한 사람들도 꽤 많을 것이라 생각되는데, 이번 "테스트 코드" 시리즈 포스팅을 읽은 뒤에는 테스트 코드 작성의 중요성과 작성 방법, 다른 여러 정보들을 알고 갈 수 있었으면 좋겠다. 테스트 코드란? 소프트웨어의 기능과 동작을 테스트하는데 사용되는 코드 테스트 코드는 비단 spring, android에서만 ..

개발

레거시에 대하여

얼마전에 한 테크블로그에서 Legacy에 대해 포스팅한 글을 읽었다. 다른 분야 못지 않게 Legacy에 대해 민감할 수 밖에 없는 안드로이드 개발자로서, 오늘은 Legacy에 대하여 이야기해보고자 한다. Legacy는 종종 게임, 드라마/영화, 영어 공부 책에도 심심치 않게 등장하는 단어이기 떄문에 그리 생소하게 느껴지는 단어는 아닐 것이다. # 사전적 의미 Legacy 1. (죽은 사람이 남긴) 유산 (=inheritance) 2. (과거의) 유산 출처: 네이버 영어 사전 # 개발자에게 Legacy란? Legacy system - 낡은 기술이나 방법론, 컴퓨터 시스템, 소프트웨어 등을 말한다. - 더 이상 쓰이지 않더라도 현대의 기술에 영향을 주는 경우도 포함한다. # 안드로이드 개발자에게 Legac..

최선의 최선
'Kotlin' 태그의 글 목록