본문 바로가기
Kotlin

[Kotlin] 2차원 배열을 이해하고 사용해 보자!

by 안솝우화 2021. 7. 8.
반응형

코틀린에서의 2차원 배열은 다른 언어와 조금 다릅니다. 그리고 사용하는 방법도 여러가지 입니다.

우선들어가기 앞서서 행과 열에 대해 알아봅시다

가로로 쭉 한줄이 1행 입니다. 이 표는 가로 5줄 이므로 5행을 의미합니다

세로로 쭉 한줄은 1열 입니다. 이표는 세로 6줄 이므로 6열을 의미합니다

 

 

 

1. 첫번째 방법은 arrayOf() 괄호 안에 배열을 행의 개수만큼 arrayOf()를 쓰고 배열의 열만큼 두번째 arrayOf() 괄호안에 값을 넣는 방법입니다

//2차원 배열 선언
val array1 = arrayOf(arrayOf("Aa", "Bb", "Cc", "Dd", "Ee"),
        arrayOf("Ff", "Gg", "Hh", "Ii", "Jj"),
        arrayOf("Kk", "Ll", "Mm", "Nn", "Oo"))
//출력값
println(array1[0][1])
println(array1[1][1])
println(array1[2][1])

출력값

array1[0][1]이라는 뜻은 array1이라는 2차원 배열의 행[0]번째에(순서는 0부터 시작한다 -> 5=0, 1, 2, 3, 4) 열[1]번째를 의미합니다

 

 

 

2. 두번째 방법은 2차원 배열을 선언하고 한가지 수로 모두 초기화 하는 방법입니다

   //2차원 배열 선언
   val array2 = Array(3,{IntArray(3,{2})})
   
   //출력값
    for ((i, row) in array2.withIndex()){
        for ((j,column) in row.withIndex()){
            print("[$i,$j] => $column\t")
        }
        println()
    }

Array()괄호 안에 첫번째로 행의 크기를 적습니다. 예시 코드에서는 행의 크기는 3으로 정했습니다.

그리고 , 을 찍고 {} 안에 IntArray()를 넣고 괄호안에 또다시 열의 크기를 정합니다. 여기서는 이것또한 3으로 정했습니다. 

그리고 , 을찍고 {} 안에 초기화할 숫자를 넣어줍니다. 이로써 2로 모든값이 초기화 되었습니다. 

구조를 간단하게 이해하자면 배열안에 또다른 배열을 넣은것이라고 생각하지면 편합니다

 

Array(행의 크기, {IntArray(열의 크기, {초기화 값})}

 

아래 출력값의 for문에 신기한 점이 있을겁니다. 바로 (i, row) 일텐데요, 코틀린에서 2차원 배열을 사용할때 for문에서는 이러한 문법을 사용할수 있도록 해줍니다. i가 array2의 인덱스 사이즈만큼(처음꺼는 행을 의미) 돌아갑니다.

row는 2차원 배열에 해당하는 행의 열값을 가지고 있습니다(여기서 0행은 3개의 열을 가지고 있음)

때문에 그안에 2중for문에서 row.withIndex()를 사용해 열의 개수만큼 반복합니다

이제 출력값을 확인해봅니다!

 

출력값

예상한데로 나오셨나요? 이해가 않된다면 처음부터 다시 꼭 이해하고 넘어가셔야 합니다!

 

 

 

3. 세번째 방법은 2번째 방법의 약간의 응용 입니다

   //배열 선언
   val array3 = Array(3,{ i -> IntArray(4,{j -> j + i*4})})
   
   //출력값
   for ((i, row) in array3.withIndex()){
        for ((j,column) in row.withIndex()){
            print("[$i,$j] => $column\t")
        }
        println()
    }

람다식을 이용한 방법입니다. Array()안에 첫번째에 행의 크기를 정하는건 값습니다. 하지만 그다음 안에 i -> 를 사용해 행이 몇번째인지를 기억하게 하고 IntArray()안에 j 는 j + i*4 값을 기억하게 합니다. 

이 값이 의미하는 바는 j = j+i*4인데 배열의 번째에 따라 알맞는 숫자를 넣어주는 코드 입니다

(예 0번째 행이고 2번째 열이면 j = 2 + 0*4 이렇게 하면 2의 값이 나옵니다. 뒤에 *4를 붙여주는 의미는 열의 끝까지 가면 행이 올라가게 되는데 이렇게 되면 계속해서 0, 1, 2, 3 만 찍기 때문에 다음 행에서는 4, 5, 6, 7 을 찍기위해 붙여준겁니다

 

출력값

 

 

 

이 글을 통해 2차원 배열을 꼭 이해하시고 넘어가셨으면 합니다! 감사합니다

 

추가로

안드로이드 개발에 대한 질문과 정보 등을 공유 및 소통하는 채팅방입니다

https://open.kakao.com/o/gG5PueVd

반응형