Kotlin

[Kotlin] 데이터클래스 / 컬렉션

sian han 2022. 11. 14. 17:15

※ 데이터 클래스

단순히 값을 담는 클래스

 

자바 : VO, DTO

코틀린 : 데이터클래스

   ㄴ 기본적으로 DTO 가 제공되며, getter 도 자동적으로 제공한다. 

    하지만 setter는 변수가 val 일 경우 제공하지 않는다.

      ㄴ 상수인 값을 변경하고자 할 때에는 copy 메소드를 통해 값이 변경된 새로운 객체를 생성한다

 

 

 

▷ 데이터클래스의 선언

data class Book1(val title:String, val author:String, val price:Int)

하지만 이렇게 선언한다면 매개변수가 없는 생성자로, 객체생성을 하지 못한다.

 

 

 매개변수가 없는 빈 객체를 만들고싶다면

data class Book2(
    val title: String = "No Title",
    val author: String = "No Author",
    val price: Int = 0
)

위와같이 데이터클래스의 모든 속성에 기본값을 주어야 한다

    //main
    val book2 = Book2()
    println("${book2.title} / ${book2.author} / ${book2.price}")

 

 


 

※ Collections

 

▶ List

코틀린의 List 는 기본적으로 읽기 전용이며 수정이 되질 않는다

 

List : 수정불가

ArrayList : 수정가능

 

▷ List 생성

1. List 객체를 생성하는 방식으로

2. listOf 함수를 이용

List 객체 생성할 때 첫번째 인자는 리스트의 사이즈이며, 두번째는 리스트의 값을 초기화하는 람다식이다.

사이즈가 5이므로 0,1,2,3,4 가 각각 람다의 매개변수 i 로 전달되고,

i 의 인덱스에 해당하는 값은 i+i 의 값으로 초기화 된다.

 

두번째 방법은 listOf 함수에 list 에 넣을 요소들을 인자로 넣어주면 된다.

 

 

▷ List 값 출력

자바에서와 같이 get() 메소드를 통하지 않고도 배열처럼 대괄호를 통해 요소에 접근이 가능하다

  var list3 = listOf("A","B","C","D","E")
    for(idx in 0..(list3.size-1)){
        println(list3[idx])
    }

=

 

 

▷ 수정이 가능한 리스트 = ArrayList 선언

 

1. ArrayList 클래스의 생성자로 객체 만들기

    - 자바와 같이 생성 후에는 add() 메서드로 추가 가능

2. arrayListOf 함수 사용

   - 사용법 List 와 동일

   - 대괄호로 요소에 접근가능 ( arr[0] )

 

 

 

 

▶ Map

Map : 수정 불가

HashMap : 수정 가능

 

 

▷ Map 선언

    var map = mapOf(Pair("A","Seohyun"),
    Pair("B","Hyerim"),
    Pair("C", "Jiwon"),
    Pair("D","Jooeun"))

mapOf 메소드는 Pair 라는 타입의 가변인자를 받는다

이렇게 키, 값 쌍(Pair) 의 여러 인자를 넣어 map 을 생성할 수 있다

 

 

▷ Map 접근

    println(map["A"])
    println(map["B"])
    println(map["C"])
    println(map["D"])

리스트와 비슷하게 대괄호로 [키] 형식으로 요소에 접근할 수 있다.

 

 

 

▷ HashMap 선언

HashMap 객체를 생성한 다음, List 와 다르게

대괄호로 존재하지 않는 키의 요소에도 값을 부여할 수 있다.

    var map2 = HashMap<String, String>()
    map2["A"] = "Joongsoo"
    map2["B"] = "Younghwan"
    map2["C"] = "Minji"

 

또한 HashMapOf() 메서도를 사용해서도 HashMap을 생성 할 수 있다 

    var map3 = hashMapOf<String, String>()
    map3["A"] = "Joongsoo"
    map3["B"] = "Joongsoo"
    map3["C"] = "Joongsoo"

 

 

 HashMap 선언

    println(map["A"])
    println(map["B"])
    println(map["C"])

 

 

 

 

▶ Range

Range 는 숫자나 문자의 범위를 나타낼 때사용된다.

특정 명시된 범위를 나타내며, 코드에서 반복문으로 명시된 범위만큼의 숫자와 문자를 순서대로 출력할 수 있다.

 

 

▷ Range 선언

    var intRange = IntRange(0,10)
    var charRange = CharRange('a','e')
    var longRange = LongRange(11,20)

 

보통은 코틀린에서 지원하는 Range 문법을 사용함

    var intRange1 = 0..10
    var charRange1 = 'a' .. 'e'

 

 

▷ Range 접근

    for(i in intRange)
        println(i)

    for(i in charRange)
        println(i)

    for(i in longRange)
        println(i)