본문 바로가기

공부 자료/코틀린[Kotlin]

[Atomic 27] 맵 (feat. Map)

key(키)와 value(값)을 연결하는 Map

 

 

오늘의 아톰은 컬렉션의 마지막으로 예상되는 Map에 대한 아톰이다.

해당 아톰 내용은 자바와 어떻게 다른지, 어떤 함수들이 존재하는지 알아보자!

 


 

[ Map ]

map

: 키-값 쌍을 mapOf()를 통해 Map 생성

: 키-값을 연결시켜주기에 연관 배열이라고 불림

: DB에 비해 기능이 제한적이나 DB에 비해 효율적

: 키와 값을 분리할 때에는 to를 사용해 key to value로 사용

: [] 연산자는 키를 사용해 값을 검색할 때 사용 (검색되는 것이 없다면 null 반환)

: 원소가 Map에 전달된 순서를 유지해주며 (mapOf()/mutableMapOf()) 다른 Map 타입에서는 순서가 보장되지 않을 수 있음

: 이터레이션을 수행하면 맵 항목으로 키-값의 쌍을 전달받을 수 있음

: 이터레이션 수행 시 키와 값 분리 가능

: 읽기 전용 / 가변 map이 존재

* 읽기 전용 / 가변에 대한 내용은 Set과 마찬가지로 List를 참고하면 됨

 

import atomictest.eq

fun main(){
	// to를 사용해 map의 키-값 
	val contants = mapOf(
    	"PI" to 3.141,
        "e" to 2.718,
        "phi" to 1.618
    )
    constants eq "(PI=3.141, e=2.718, phi=1.618)" // True
    
    // [] 연산자, keys/values를 이용해 key에 대한 값, key / value 출력 가능
    constans["e"] eq 2.718
    constans.keys eq setOf("PI", "e", "phi") // key는 Set
    constans.values eq "[3.141, 2.718, 1.618]" // value는 배열
    
    // 이터레이션
    for(entry in constans) print("${entry.key} = ${entry.value}")
    
    for((key,value) in constans) print("${key} = ${value}")
}

 

 


 

[ getValue() / getOrDefault() ]

map에서 주어진 키에 대한 원소가 포함되어 있지 않을 경우 null을 반환한다고 하였는데

null이 될 수 없는 결과를 원할 경우, null일 경우 대체를 하고 싶은 경우 어떻게 할 지 알아볼 예정이다.

 

1) getValue(key) : null 이 될 수 없는 결과를 원할 경우 사용하며, 사용 시 null 이 반환되면 NoSuchElementException 발생

2) getOfDefault(key, 대체 출력) : 원소가 있을 경우 원소를 출력하며, null을 반환될 경우 대체 출력된 것을 출력

 

 


[ 클래스 인스턴스 Map ]

클래스 인스턴스를 Map의 값으로 저장이 가능한데,

이는 아래 예시를 보면 이해가 가능하다.

 

import atomictest.eq

class Contact(val name : String, val phone : String) {
	override fun toString():String{
    	return "Contact('$name', '$phone')"
    }
}

fun main(){
	val miffy = Contact("Miffy", "1234")
    val cleo = Contact("Cloe", "5678")
    
    val contacts = mapOf(miffy.phone to miffy, cleo.phone to cleo) // 클래스를 값으로 저장
    contacts["1234"] eq miffy
    contacts["5678"] eq cleo
}

 

 


 

[ 오늘의 학습 소감 ]

 

오늘은 Map에 대해서 학습하는 아톰이었는데, 자바에서 학습했던 Map과 크게 다르지는 않았다. 다만, 키를 이용해 값을 검색하거나 null 값이 반환될 때에 대한 처리는 다르기 때문에 이에 대한 내용은 확실히 인지하는 것이 좋을 것 같다는 생각을 했다. 요즘 알고리즘을 공부하면서 코틀린의 방식으로 알고리즘을 처리하는 방식이 떠오르는데 그 때마다 자바보다 코틀린이 어떤 면에서 좋은지 조금씩은 실감이 나기도 한다.