2022. 3. 9. 18:49ㆍ[Android APP] feat. Kotlin/Kotlin 언어 기초
배열이란?
데이터를 연속적으로 나열한 형태이며 순서 번호에 해당하는 인덱스(index)와 값이 들어있는 요소로 구성된다.
배열 특징
- 같은 자료형을 가진 값(value: 자료형)들을 하나로 나타낸 것
- 초기화와 동시에 크기(size)가 정해짐
- 메모리 공간에 연속적으로 저장됨
- 인덱스(index)를 통하여 값(value: 자료형)에 접근
- 정적 타입
배열의 장점
- 인덱스(index)를 통한 검색이 용이함
- 연속된 메모리 공간을 사용하여 메모리 관리가 편리함
배열의 단점
- 배열에서 값을 삭제하더라도 배열의 크기가 줄어들지 않아 메모리가 낭비된다.
- 배열은 정적이므로 배열의 크기를 컴파일 이전에 지정해야 한다.
- 배열은 정적이므로 배열의 크기가 정해진 이후 배열의 크기를 재조정 할수 없다.
연속된 Integer 값들이 들어간 배열 numbers를 만들고 print문으로 출력한다.
1,2,3,4,5,6,7의 정수 값이 나와야 하는데 뭔가 이상하다?
[Ljava.lang.Integer;@67b64c45
이는 배열의 주소로 저장된 위치로 값을 출력한 것이 아닌 값을 가르키는 위치를 알려준 것이다.
이처럼 배열은 print로 출력할 수 없다.
따라서 코틀린에서 제공하는 메서드를 이용해 String형식으로 바꿔서 출력해야한다.
contentToString()
다른 방법은 for문을 돌려서 출력하는 방식이다.
변수 element 값에 numbers배열을 검토하여 1부터 시작하여 하나씩 저장하고, 그것을 출력해준다.
즉 numbers안에 있는 값들을 하나씩 검토하고 element에 저장하고 출력해주는 것을 반복하여 출력해준다.
이 방식은 number의 값에 오버라이딩을 하는 것이 아니라 Display할 때 바꿔주는 것이다.
따라서 2를 더해서 출력하면 number값에 각각 2를 더한 값이 출력되지만
number안에 있는 값은 그대로인 것을 확인할 수 있다.
========================================================================
배열의 인덱스 값을 넣어 출력하는 방식도 있다.
조심해야할 건 인덱스는 1부터 시작하는게 아니라 0부터 시작하기 때문에 (1,2,3,4,5가 아니라 0,1,2,3,4 순으로)
위 예제에서 8을 출력하려면 인덱스 [1] 위치를 출력해야한다.
===========================================================================
인덱스를 이용해 배열의 값을 바꿀 수 있다.
하지만 배열은 고정된 사이즈이므로 사이즈를 키우거나 새로운 인덱스를 추가할 수 없다.
예를 들면 위 코드에서 numbers 배열의 인덱스는 0~6까지인데 7번째 값을 넣고 싶어서
numbers[7] = 5
이렇게 7번째 인덱스를 추가하면 7번째 인덱스는 존재하지 않기 때문에 out of bound에러가 발생하게 된다.
다음은 arrayOf에 String값을 넣은 days 배열과 String, Double 값을 같이 넣은 Fruit 배열, 여러 데이터를 섞은 mix배열을 만들어서 출력해보자.
전 시간에 배운 것 처럼 arrayList는 형이 섞여도 들어갈 수 있기 때문에 fruit나 mix 배열같이 여러 데이터 타입의 배열도 만들 수 있다.
이처럼 arrayList는 다른 데이터 타입을 섞어서도 사용할 수 있는데
왜? 굳이?
IntArrayOf, DoubleArray등이 따로 존재하는 것일까?
이는 IntArrayOf는 숫자 사용에 정확하기 때문이다.
예를 들어 데이터를 다른 곳에서 받아왔는데 정수를 예상한 곳에 데이터베이스가 숫자를 알려주면 코드는 알아서 정수라고 처리하고 해결해주거나 또는 예외를 추가해서 문제를 해결한다.
데이터 타입이 상관없는 mixed Array에서는 인지되지 않는 것들을 각각의 특성에 맞게 처리하기 때문에 존재한다.
'[Android APP] feat. Kotlin > Kotlin 언어 기초' 카테고리의 다른 글
24. 집합과 맵(Set & Map) (0) | 2022.03.10 |
---|---|
23. 리스트 (0) | 2022.03.09 |
21. 컬렉션의 개요 (0) | 2022.03.09 |
20. 형 변환 (0) | 2022.03.08 |
19. 추상 클래스 (0) | 2022.03.08 |