반응형

코틀린에는 배열의 종류가 4가지가 있다.

array, list, set, map 네가지를 비교해보자

 

 

1. Array

// Array 선언
var arr = arrayOf("A", "B", "C", "D")

println(arr[0] + "  " + arr[1])
arr[0] = "AAA"
println(arr[0] + "  " + arr[1])

// A  B
// AAA  B
  • 특징 
    • Array 선언시 배열의 크기를 지정해야 한다.
      • 지정된 배열의 크기는 변경 불가하다.
        (python의 list.append(), C#의 list.ㅁdd() 사용 불가)
    • 배열 안의 값을 자유롭게 변경이 가능하다.
      • arr[0] = "AAA"처럼 인덱스값으로 내용 수정 가능
    • 순서를 저장한다.
    • 중복값을 허용한다.

 


2. List

// Immutable List

var imList = listOf<String>("mL-1", "mL-2", "mL-3")
for (a in imList) { println(a)}

// 읽기 전용(immutable)인 리스트의 값을 변경을 시도하기에 에러 발생
// imList[0] = "mL-4"

println("---------------")
for (a in imList) { println(a)}
println("---------------")

// error



// Mutable List

var mList = mutableListOf<String>("mL-1", "mL-2", "mL-3")
for (a in mList) { println(a)}

// mutable 리스트기에 값 변경 가능
mList[0] = "ML-4" // mList.set(0, "mL-4")도 같은 기능

// 리스트 값 추가
mList.add("mL-5")

println("---------------")
for (a in mList) { println(a)}
println("---------------")


// mL-1
// mL-2
// mL-3
// ---------------
// mL-4
// mL-2
// mL-3
// mL-5
// ---------------

 

  • 특징
    • List는 순서를 저장한다.
    • 중복값을 허용한다.
    • List는 두가지 mutable, immutable 두가지로 나뉜다.
      • immutable
        • 기본 값, 읽기전용 (수정 불가)
      • mutable
        • 값 수정 가능
        • 인덱스에 직접 접근하여 값 변경 가능
        • 배열 추가/삭제 가능 (add/remove)
    • List의 단점
      • 메모리에 순서대로 할당되지 않는다.
        • 검색기능 활용시 성능저하가 발생한다.
          (메모리 순서대로 검색이 아니라 각 데이터가 있는 메모리 주소를 찾아들어가 값을 확인하고 다음 주소로 이동해야 하기에 성능 저하가 발생한다)

 


3. Set

// immutable Set
var imSet = setOf(1, 2, 3, 1, 2, 3)
for (a in imSet) { println(a) }

// 1
// 2
// 3
// (중복값은 허용되지 않기에 1, 2, 3 한가지씩 저장된다)


// mutable Set
var mSet = mutableSetOf(1, 2, 3, 1, 2, 3)
for (a in imSet) { println(a) }
println("---------------")
mSet.add(4)
mSet.remove(1)
for (a in imSet) { println(a) }
println("---------------")

// 1
// 2
// 3
// ---------------
// 2
// 3
// 4
// ---------------
// (중복값이 허용되지 않아 1, 2, 3만 할당)
// (mutable이기에 내용 수정 가능 add/remove)
  • 특징
    • List와 같이 immutable / mutable로 나뉜다.
    • 순서를 저장하지 않는다.
    • 중복 값을 허용하지 않는다.

 


4. Map

// immutable Map
var imMap = mapOf("name" to "J", "age" to "13", "country" to "korea")
println(imMap)
println(imMap["name"])

// {name=J, age=13, country=korea}
// J


// mutable Map
var mMap = mutableMapOf("트와이스" to "TT", "아이유" to "내 손을 잡아", "NCT" to "영웅")
mMap.put("QWER", "고민중독")
println("-Put <mMap.put(\"QWER\", \"고민중독\")>")
println(mMap)
mMap.remove("NCT")
println("-Remove <mMap.remove(\"NCT\")>")
println(mMap)
mMap.remove("QWER", "내 이름 맑음")


// -Put <mMap.put("QWER", "고민중독")>
// {트와이스=TT, 아이유=내 손을 잡아, NCT=영웅, QWER=고민중독}
// 영웅
// -Remove <mMap.remove("NCT")>
// {트와이스=TT, 아이유=내 손을 잡아, QWER=고민중독}

 

  • 특징
    • key : value의 쌍으로 저장되는 자료 구조
      • 파이썬의 dictionary와 같은 형식
    • immutable / mutable로 분리됨
    • key값은 중복 불가
    • value값은 중복 가능

 

반응형
반응형

코틀린에서는 다른 언어(python, C# 등)에 있는 switch / case가 없다.

대신 when을 이용하여 분기문을 만든다.

 

 

- Kotlin의 when <kotlin when (switch/case)>


 

1. 기본 when 분기

var classCode : Int = 101

when(classCode){
    101 -> println("경영학개론")
    202 -> println("거시경제학")
    305 -> println("생산관리")
    else -> println("과목이 없습니다.")
}

// 경영학개론

 

기본적 분기문이다.

C#과 형태와 방법이 다르다.

  • C#과 다르게 콜론( : ) 대신에 ->를 사용한다.
  • default 대신 else를 사용한다.
    • default : 위의 분기중 아무것도 해당되지 않는 경우 실행되는 코드
  • 다른 언어들과 달리 break를 넣지 않는다.

 

 


 

2. 범위를 기준으로 나누기

// Example 1

var score = 85
when(score){
    in 0..40 -> println("D 학점입니다.")
    in 41..70 -> println("C 학점입니다.")
    in 71..90 -> println("B 학점입니다.")
    in 91..99 -> println("A 학점입니다.")
    else -> println("A+ 학점입니다.")
}

// B 학점입니다.


// Example 2

var classNo = 4
when(score){
    1, 3, 5 -> println("A팀")
    2, 4, 6 -> println("B팀")
    else -> println("팀이 없습니다.")
}

// B팀

 

  • in을 이용하여 숫자의 범위를 기준으로 삼을 수 있다.
    • 0 .. 40을 입력하면 '0<= 값 <=40'의 의미가 된다.
    • in 0..40, in 70..80 -> "uu" 이런 방식의 사용도 가능하다.
  • 여러 케이스가 하나의 결과를 출력하는 경우 콤마(,)를 이용해서 여러가지 작성이 가능하다. (Example2)
    • 자료형은 Int, String 등 여러 형태가 가능하다.

 


 

3. 간단하게 분기 결과 얻기 (실전 사용편)

// Example 1

var score = 85

var grade = ""
when(score){
    in 0..40 -> grade = "D 학점입니다."
    in 41..70 -> grade = "C 학점입니다."
    in 71..90 -> grade = "B 학점입니다."
    in 91..99 -> grade = "A 학점입니다."
    else -> grade = "A+ 학점입니다."
}
println(grade)

// B 학점입니다.



// Example 2

var score2 = 85

var grade2 = when(score2){
    in 0..40 -> "D 학점입니다."
    in 41..70 -> "C 학점입니다."
    in 71..90 -> "B 학점입니다."
    in 91..99 -> "A 학점입니다."
    else -> "A+ 학점입니다."
}
println(grade2)

// B 학점입니다.

 

  • 다른 언어의 switch와 달리 when은 반환값이 있다.
    • 위의 example1은 C#과 같은 방식으로 grade에 출력할 값을 입력했다.
    • kotlin은 example2처럼 분기 후 when의 return값을 바로 정할 수가 있다.
      따라서 별다른 ' grade = "내용" '이 필요 없이 그냥 "내용"을 입력하면 바로 grade2에 값이 할당된다.
반응형

+ Recent posts