GDSC HUFS 4기/Kotlin Team #3

[3팀] Android-12-Kotlin : 코틀린 기초 더 배우기(배열 - 람다식)

비코(gyeom) 2022. 10. 9. 04:34

이 글은 Android12 및 코틀린 완전 정복를 참고하여 작성하였습니다.

작성자 : 김인겸

개발환경은 Windows, Android Studio입니다.

 

1. Array : 배열

생성식 - val numbers : Intarray = IntArrayOf(1, 2, 3, 4)

- 배열을 생성할 때, val을 쓰는 이유는?

var 을 사용하게 되면, Variable is never modified so it can be declared using 'val' 이라는 문장이 나타나게 된다. 이는 우리가 생성하는 객체는 변화할 수 없으니 val변수를 사용하는 것을 권장한다는 의미이다.

 

출력식 - 일반 출력식 불가능하므로, 유틸리티 메소드를 이용한다
for (element in numbers)
print(element)
&
print(numbers.ContentToString())

- 배열에서의 인덱스

Array {1, 2, 3, 4, 5}가 있을 때, 이 배열에서의 인덱스는 [0, 1, 2, 3, 4] 의 순서이다. 모든 배열식에서의 인덱스는 0에서 부터 시작한다는 것을 알 수 있다.

- Array 내 요소 교체

numbers[0] = 6
{1, 2, 3, 4, 5} - > {6, 2, 3, 4, 5}
numbers[6] = 8
out of bound error 발생 - (인덱스 6 번은 존재하지 않기 때문이다.)

- 배열 내 다양한 객체 포함시키기

data class 이용
data class Fruit (val name : String, val price : Double)

val fruits = array of (Fruit("Apl", 2.5), Fruit("Man", 3.0))
출력 - > Fruit(name = Apl, price = 2.5), Fruit(name = Man, price = 3.0)
indices 함수 = 인덱스가 무엇인지 알려준다.
for (index in fruits.indices){ print("$fruits[indes].name is $index")}
출력 - > Apl is 0 Man is 1

- 다양한 데이터타입 사용가능

val mix = arrayOf("A", "B", "1", "2", Fruit("Apl", 2.5))
arrayOf 사용시 다양한 데이터타입 사용 가능함

- Array 는 배열 내의 요소들의 교체는 가능하나, 요소들을 추가하거나, 제거할수 없습니다.

 

2. List : 리스트

생성식 - val months = listOf{"jan", "feb", "mar"}
              &
              val any = listOf{"jan", "feb", "1", "2", False, True)

- List의 특징

● List 는 Array와 마찬가지로, size, index, for 루프 등의 다양한 메서드와 프로퍼티를 사용할 수 있다.

● immutable한  List가 존재하므로,  리스트 내의 아이템을 추가하기 위해서는 mutable 리스트로 변환시켜줘야 한다.

val addionalMonths = months.toMutableList()
val newMonths = arrayOf("apr", "may", "june")
addionalMonths.addAll(newMonths)
addionalMonths.add("jul")
print(addionalMonths)

- 출력 - > [jan, feb, mar, apr, may, june]

 

● List 내의 아이템들은 제거와 추가가 가능하다. 

val days = mutableListOf<String>("mon", "tue", "wed")
days.add("thu")
days[2] = "sun"
days.removeAt(3)
val removeList = mutableListOf<String>("mon",  "wed")
days.removeAll(removeList)
print(days)

- 출력 - > [tue, sun]

3. Set : 집합

생성식 - val fruits = setOf("orange", "mango", "orange", "apple")

- Set 의 특징

● 중복된 요소를 하나로 통합시킨다. 따라서 위의 집합의 사이즈 는 3이다.

● .toSortedSet() 함수 이용시, 위 요소들을 알파벳 순서대로 나열한다. - [apple, mango, orange]

● immutable한 Set 이 존재하므로,  집합 내의 아이템을 추가하기 위해서는 mutable Set으로 변환시켜줘야 한다.

val newFruits = fruits.toMutableList()
newFruits.add("Water Melon")
newFruits.add("pear")

- 출력 - > [orange, mango, orange, apple, Water Melon, pear]

 

4. Map 

생성식 - val daysOfweek = mapOf(1 to "Mon", 2 to "Tue", 3 to "Wed")

- Map 의 특징

Key 값을 따로 정의한다. ("Mon"의 키값은 1이므로 위 Key 값을 이용하여 출력한다)

.toSortedSet()함수 사용시, 키 값의 크기 순으로 배열한다.

dataclass를 이용하여 댜양한 데이터 값을 Collection에 저장할 수 있다.

immutable한 Map 이 존재하므로,  집합 내의 아이템을 추가하기 위해서는 mutable Map으로 변환시켜줘야 한다.

 

- List, Set, Map 은 Collection이라고 말한다. 그렇다면 이러한 Collection들을 왜 불변한 것으로 정의한 후 , 가변으로 변환시켜주는가?

코틀린은 불변성이 강제되는 프로그래밍 언어가 아니기에, 불변성을 부여하면 안정성이 높아진다. 때문에 코틀린에서는 불변성을 부여한 다음 가변성을 부여하는 것을 권장한다.

5. ArrayList

생성식 - ArrayList<E>() : 기본 생성식
             &
            ArrayList(elements : Collection<E>) : 특정 Collection으로 채움
             &
            ArrayList(Capacity : Int값) : 최대 크기를 결정

- ArrayList 의 특징

● Array - 배열의 크기가 정해진다. 값을 추가하거나 제거할 수 없다.

● List  - List내의 값을 수정할 수 없다.

● ArrayList - 위 두 단점들을 보완하는 배열로, 크기가 정해지지 않고, 값을 수정, 추가, 제거할 수 있다.

- ArrayList 함수의 종류

Add : 추가                Clear : 모든 요소 제거                Get : 특정 인덱스 값을 돌려줌

Remove : 특정 요소 제거

등 다양한 함수를 사용할 수 있다.

 

6. Lambda : 람다식

생성식 - val sum : (Int, Int) -> Int = {a : Int, b : Int -> a+b}
              println(sum(10, 5))
             &
             val sum : {a : Int, b : Int -> println(a + b)}
             sum(10, 5)

- Lambda식의 특징

 이름이 없는 함수[익명함수]의 형태이다.

● 불필요한 루프문의 삭제가 가능하여 간결하게 나타낼 수 있다.

 

이상으로 블로그 포스팅을 마치겠습니다. 감사합니다.