본문 바로가기

Language/Kotlin

[Kotlin] 8장. 제네릭과 배열 2 - 배열

728x90

배열

기본적인 배열 표현

배열을 생성하기 위해서는 arrayOf()Array() 생성자를 사용하면 되고, 빈 상태의 배열을 지정하는 경우 arrayOfNulls()를 사용하면 된다.

다차원 배열의 경우 arrayOf안에 다시 arrayOf로 배열을 선언하면 다차원 배열을 만들 수 있다.

 

val arr = arrayOf(arrayOf(1,2,3), arrayOf(4,5,6), arrayOf(7,8,9))

for (e1 in arr) {
	for (e2 in e1) {
		println(e2)
	}
	println()
}

 

과 같이 2차원 배열을 선언하고, for문을 사용해 각 값을 출력할 수 있다.

 

특정 자료형으로 제한하지 않는다면 여러가지 자료형을 혼합할 수 있다.

 

val mixArr = arrayOf(1, 2, 3, "asd", 450.4f, false)

 

다음과 같이 다양한 자료형을 혼합해서 하나의 배열로 만들어 사용이 가능하다.

배열에서 특정 자료형을 제한하고자 하려면 arrayOf<자료형>() 형태자료형 + ArrayOf() 형태의 조합으로 나타낼 수 있다.

 

val arr1 = arrayOf<Int>(1, 2, 3, 4)
val arr2 = intArrayOf(5, 6, 7, 8)

 

배열 요소에 접근하기

Array 클래스는 get() 과 set() 메서드를 가지고 있는데, 이것은 요소에 접근하기 위한 게터/세터 이다. 또한, 대괄호를 사용해도 접근할 수 있다.

 

val arr = intArrayOf(1, 2, 3, 4)

println(arr.get(1))
println(arr[2])

val arr2 = arrayOf(arr, arr, arr)

println(arr2[2][1])

arr.set(2, 7)
arr[0] = 6
arr2[2][1] = 5

 

배열의 내용 출력

Arrays의 멤버인 toString()을 사용하면 배열의 내용을 한꺼번에 출력할 수 있다.

위의 예제에서 사용된 arr를 toString을 통해 출력하게 되면 Arrays.toString(arr) 로 선언하며 [1, 2, 3, 4] 로 출력된다.

다차원 배열을 표현하고자 하면 deepToString을 사용하면 되고, 이 또한 대괄호를 통해 구분되어 출력된다.

[[1, 2, 3, 4], [1, 2, 3, 4], ...] 처럼 말이다.

표현식을 통해 배열 생성하기

Array() 생성자에 표현식을 사용해 배열을 생성할 수 있다.

 

val|var 변수 이름 = Array(요소 개수, 초기값)

val arr = Array(5, {i -> i * 2})
val arr2 = Array(100, {0})

 

 

위의 예제에서 표현식 i -> i * 2 으로 만들어지는 배열의 요소는 0, 2, 4, 6, 8 가 된다.

요소 추가하고 잘라내기

배열이 정의되면 고정되기 때문에 새로 할당하는 방법으로 요소를 추가하거나 잘라낼 수 있다.

  • plus() : 하나의 요소를 추가
  • sliceArray() : 필요한 범위를 잘라내 새 배열 생성

배열 관련 API

  • first() : 첫 번재 요소 확인
  • last() : 마지막 요소 확인
  • indexOf() : 인자로 받은 요소의 인텍스 출력
  • average() : 배열의 평균 값 출력
  • count() : 요소 개수 세기
  • contains() : 배열에 요소가 포함되어 있는지 확인
    • arr.contains(5) == 5 in arr
  • forEach { 표현식 } : 배열의 요소 개수만큼 지정한 구문을 반복 실행
    • arr.forEach { element -> "$element" }
  • forEachIndexed { } : forEach 기능과 더불어 인덱스 까지 출력한다.
    • arr.forEachIndexed ({ i, e -> pinrlnt("arr[$i] = $e" })

배열 정렬하기

  • sortedArray() : 오름차순 정렬 후 일반 배열로 반환
  • sortedArrayDescending() : 내림차순 정렬 후 일반 배열로 반환
  • sort(), sortDescending() : 원본 배열에 대한 정렬
  • sorted(), sortedDescending() : List로 반환
  • sortBy { 표현식 } : 표현식에 따른 정렬

기타 메서드

  • flatten() :  배열 평탄화에 쓰이는 메서드. 다차원 배열을 단일 배열로 만들 수 있다.
  • filter() : 표현식에 따라 원하는 데이터를 골라낼 수 있다.

문자열 다루기

  • 문자열 추출하고 병합하기 : substring() 이나 subsequence()를 사용해 특정 범위의 문자열을 추출할 수 있다. 인자로 인덱스 범위를 지정하여 사용한다.
String.substring(인덱스 범위): String
CharSequence.subSequence(인덱스 범위): CharSequence

 

  • 문자열 비교하기 : s1.compareTo(s2) 를 사용하여 문자열을 비교하며. s1과 s2이 같다면 0, s1이 s2보다 작으면 양수 크면 음수의 값을 반환한다.

StringBuilder

StringBuilder를 사용하면 문자열이 사용할 공간을 좀 더 크게 잡을 수 있기 때문에 요소를 변경할 때 이 부분이 사용되어 특정 단어를 변경할 수 있게 된다.

 

var s = StringBuilder("Hello")
s[2] = 'x'
// Hexlo가 된다.

 

StringBuilder 관련된 메서드를 사용하면 포함(append), 추가(insert), 삭제(delete)가 용이하다.

 

s.append("World") // HexloWorld
s.insert("10", "Added") // HexloWorldAdded
s.delete(5,10) // hexloAdded

 

기타 문자열 처리

  • toLowerCase : 소문자로 변경
  • toUpperCase : 대문자로 변경
  • split : 특정 문자 단위로 잘라내기
  • trim : 앞뒤 공백 제거
  • toInt : 문자열을 정수로 변환하여 반환

 

728x90