우아한테크코스가 이번 기수부터 안드로이드 분야가 추가되었고, 사전에 코딩 테스트 없이 4주간의 프리코스를 진행할 수 있다고 해서 신청해보았습니다.
1주 차 미션은 출제된 7문제를 풀어 제출하는 것이었습니다.
특정 알고리즘을 알아야 풀 수 있는 문제가 아니었으며, 문법과 메서드를 잘 활용하면 풀 수 있는 문제로 구성되어 있었습니다.
코딩 테스트처럼 초반 문제는 비교적 쉬운 난이도였고, 뒤로 갈수록 생각해보아야 할 문제가 많았습니다.
저는 코딩테스트를 파이썬으로 준비하다 보니 코틀린으로 코드를 작성하기 위해서는 공부해야 할 것이 많았습니다. 당장에 for문과 리스트부터 코틀린에서는 어떻게 쓰나 찾아보아야 했습니다. 문법을 찾아보느라 초반 문제에서는 시간이 조금 걸렸지만 문법에 익숙해지니 점차 나아졌습니다.
필요한 메소드, 기능을 작성해보고 해당 내용을 작성한 게시글이 있다면 게시글을 통해 다시 한번 학습하고, 없다면 구글 검색을 통해서 학습하는 과정을 거쳤습니다.
기능 목록 작성 시에도 어떻게 작성하면 좋을지 고민이었고, 커밋시에는 커밋명을 어떻게 작성하면 좋을지, 어떻게 작성해야 누구나 알아보기 쉬울지 고민을 많이 했습니다. 7번까지 통일된 구조로 작성하긴 했지만 좋은 구조인지 의문이 드네요. 그동안 저만 보는 커밋명이었기에 크게 신경쓰지 않았는데, 미션은 그렇지 않으니 더 신경쓰이는 것 같습니다. 다음번에는 커밋명 작성법을 알아봐야겠습니다.
작성한 코드는 pull-request 를 통해 제출하는 방식이었습니다. pull-request는 원본 저장소를 제가 fork한 뒤 업데이트, 수정한 내용을 원본 저장소에 적용해달라고 요청하는 방식입니다. 협업에 사용하는 것으로 저는 프리코스를 시작하며 처음 사용해보는 계기가 되었습니다.
오늘은 1주차 미션을 진행하며 학습한 내용을 적어보려고 합니다.
1️⃣ List 리스트
listOf
- 변경 불가능한 리스트
- 읽기 전용이므로 리스트에 요소를 추가/삭제할 수 없습니다.
fun main(args: Array<String>) {
var number = listOf<Int>(1,2,3)
println(number[0]) // == 1
// number.add(4) Error
// number.remove(2) Error
}
mutableListOf
- 수정 가능한 리스트
- 리스트에 요소를 추가/삭제할 수 있습니다.
fun main(args: Array<String>) {
var number = mutableListOf<Int>(1,2,3)
number.add(4) // 요소 추가
number.remove(4) // 요소 삭제
number.removeAt(1) // 인데스 기반 요소 삭제
number.indexOf(2)// 요소의 인덱스 위치 찾기
println(number) // == [1,3]
}
- add와 remove 뿐만 아니라, + 와 - 를 통해 요소를 추가/삭제할 수 있습니다.
fun main(args: Array<String>) {
var number = mutableListOf<Int>(1,2,3)
var newNumber = number + 4
newNumber = number - 1
println(newNumber) // == [2,3]
}
2️⃣ map 맵
파이썬에서 자주 사용하던 딕셔너리를 코틀린에서는 map이라고 부릅니다.
맵은 key-value 쌍으로 데이터를 저장하는 자료구조로, key를 통해 value에 접근할 수 있습니다.
중복된 key값을 가질 수 없으며, value는 중복될 수 있습니다.
만약 중복된 키 값을 입력하면, 나중에 입력된 value 값으로 value가 덮어씌워집니다.
mapOf
- 변경 불가능한 맵
- 맵에 key-value 쌍을 추가/삭제할 수 없습니다.
fun main(args: Array<String>) {
var map = mapOf<String, Int>("Jen" to 1, "Nami" to 2)
println(map) // == {Jen=1, Nami=2}
// map["Khao"] = 2 Error
}
mutableMapOf
- 변경 가능한 맵
- 맵에 key-value 쌍을 추가/삭제 할 수 있습니다.
fun main(args: Array<String>) {
var map = mutableMapOf<String, Int>("Jen" to 1, "Nami" to 2)
map["Khao"] = 2 // key-value 쌍 추가1
map.put("Mia",3) // key-value 쌍 추가2
map.remove("Jen") // key-value 쌍 제거
println(map)
println(map.get("Nami")) // key를 통해 value 접근
println(map.keys) // 모든 key 출력
println(map.values) // 모든 value 출력
}
toSortedMap()
- map 정렬
- key 값의 사전 순서대로 map을 정렬합니다.
fun main(args: Array<String>) {
var alphabet = mutableMapOf<String, Int>("c" to 1, "a" to 2, "b" to 3)
println(alphabet.toSortedMap()) // == {a=2, b=3, c=1}
}
리스트.sortedBy
미션을 풀면서 key가 아닌 value값을 토대로 map을 정렬해야 하는 경우가 있었습니다.
이때는 toList()를 통해 map을 리스트로 변경한 후 sortedBy 함수를 사용하여 정렬하고, 다시 map으로 변경해주었습니다.
fun main(args: Array<String>) {
var alphabet = mutableMapOf<String, Int>("c" to 1, "a" to 2, "b" to 3)
// value에 대해 오름차순 정렬
alphabet = alphabet.toList().sortedBy { it.second }.toMap() as MutableMap<String, Int>
println("오름차순 : ${alphabet}")
// value에 대해 내림차순 정렬
alphabet = alphabet.toList().sortedByDescending { it.second }.toMap() as MutableMap<String, Int>
println("내림차순 : ${alphabet}")
}
코틀린에서는 JAVA의 HashMap, SortedMap, LinkedHashMap을 사용할 수도 있습니다.
HashMapOf
- 입력한 순서대로 key의 순서를 보장하지 않습니다.
- HashMap에 입력한 순서대로 출력하기 위해서는 LinkedHashMap을 사용해야 합니다.
fun main(args: Array<String>) {
var map = hashMapOf<String, Int>("Jen" to 1, "Nami" to 2)
map["Khao"] = 2
println(map) // == {Khao=2, Jen=1, Nami=2}
println(map.entries) // 모든 key-value 쌍 출력
}
LinkedHashMap
- 입력한 순서대로 key의 순서를 보장합니다.
fun main(args: Array<String>) {
var map = LinkedHashMap<String, Int>()
map.put("Jen",1)
map.put("Nami",2)
map.put("Khao",2)
println(map) // == {Jen=1, Nami=2, Khao=2}
}
for문
.indices
- indices를 사용하면 0 until name.size와 같이 작성하지 않아도 i가 name의 최소 인덱스부터 최대 인덱스까지 돌게 됩니다.
fun main(args: Array<String>) {
var name = mutableListOf<String>("Jen", "Nami", "Khao")
for (i in 0 until name.size){
println(name[i])
}
println("==========================")
for (i in name.indices){
println(name[i])
}
}
1주 차 프리코스 모두 수고하셨습니다!
(테스트 결과는 실제 성적과 무관하다고 합니다.)
'Android > 우아한테크코스 5기' 카테고리의 다른 글
[우아한테크코스 5기 프리코스] 안드로이드 4주 차 회고록 (0) | 2022.11.23 |
---|---|
[우아한테크코스 5기 프리코스] 안드로이드 3주차 회고록 (0) | 2022.11.23 |
[우아한테크코스 5기 프리코스] 안드로이드 2주차 회고록 (0) | 2022.11.16 |