본문 바로가기
코틀린

아토믹 코틀린 - 객체 - 리스트

by 밝지 2023. 10. 2.
728x90
반응형
  • 컨테이너는 컬렉션이라고도 한다. 기본적인 컨테이너가 필요할 때 보통 List를 사용한다.
  • List는 표준 코틀린 패키지에 들어있기 때문에 import가 필요없다. 
  • List 만드는 법
    • 초기화 값과 함께 호출
fun main() {
	val ints = listOf(1,3,5,7,9)
}
  • List의 타입은 추론할수도, 타입 파라미터를 통해 명시할수도 있다.
    • 단, 처음에 아무 원소도 초기값으로 넣지 않고 생성한다면 타입 파라미터를 명시해줘야 한다. (뭘 담을 건지 알려줘야 함)
fun main() {
	//타입을 추론한다.
    val numbers = listOf(1, 2, 3)
    val strings = listOf("one", "two", "three")
    
    //타입을 명시한다.
    val numbers2: List<Int> = listOf(1, 2, 3)
    val strings2: List<String> = listOf("one", "two", "three")
}
  • 반환값의 타입이 타입 파라미터를 포함할 수도 있다.
//반환할 타입을 추론한다.
fun inferred(p: Char, q: Char) = listOf(p, q)

//반환할 타입을 명시한다.
fun explicit(p: Char, q: Char): List<Char> = listOf(p, q)
  • 읽기 전용 List / 가변 List
    • 읽기 전용: listOf()
    • 가변: mutableListOf()
      • add(), addAll() 을 사용해 MutableList에 원소나 다른 컬렉션의 원소들을 추가할 수 있다. 
      • += 로 추가도 가능
fun main() {
	val list = mutableListOf<Int>()
    
    list.add(1)
    list.addAll(listOf(2, 3))
    
    list += 4
    list += listOf(5, 6)
}
  • MutableList를 List로 (읽기 전용으로) 취급할 수는 있다. (내용 변경은 불가능) 하지만 애초에 읽기 전용인 List를 MutableList로 취급하는 것은 불가능하다.

 

  • += 연산자를 쓰면 불변 리스트가 마치 가변 리스트인 것처럼 보인다.
    • list는 var 이기 때문
    • 근데 애초에 불변 list를 val에 대입하면 불변이다..........!
fun main() {
	var list = listOf('X')	//불변리스트
    list += 'Y'	//근데 가변인가....?
}
728x90
반응형