GDSC HUFS 4기/Kotlin Team #7

[7팀]코틀린 기초 더 배우기(2)

lny021102 2022. 10. 11. 01:03

작성자 : 이나영

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

 

1. 컬렉션

 

컬렉션: 같은 데이터 타입 또는 다른 데이터 타입의 묶음

 

코틀린에서 컬렉션은 두가지로 나뉜다.

하나는 특정 데이터 타입의 요소를 저장하는 클래스이고, 다른 하나는 다른 타입의 요소를 저장하는 클래스이다.

->모든 데이터 타입은 그 요소를 저장한 클래스가 있다.

 

int는 정수, boolean은 참거짓, double은 double 타입, ....

이때 string 타입은, 위에 언급된 모든 타입들을 저장할 수 있는 arrayOf를 사용한다.

 

list - listOf

->arrayOf와 비슷하지만 더 많은 연산 메소드 도우미들이 있으며 크기도 더 키울 수 있다.

set - setOf

->중복되는 값이 없게 하는 클래스이다.

map - mapOf

키와 값이 한 쌍으로 정리되는데, 그 키로 값을 찾을 수 있다.

상기 클래스들은 이뮤터블(immutable)이다. 즉, 값을 읽을 수 는 있지만 변경할 수는 없는 클래스들이다.

 

2. 배열

 

한 개의 변수에 여러가지 데이터를 저장할 수 있다

 

val numbers ( : intArray -> 이 부분은 타입 추론의 기능이 있으므로 생략이 가능한데, 생략할 시 오른쪽의 intArrayOf를 arrayOf로 바꿔줘야한다.)= intArrayOf(1, 2, 3, 4, 5, 6)

 

이때 print(numbers)를 입력하고 실행하면 1, 2, 3, 4, 5, 6이 아닌 array의 주소값이 출력된다

->print 메소드가 아닌 코틀린이 제공하는 유틸리티 메소드를 사용해야 한다.

 

print(numbers.comtentToString())를 입력하면, contentToString이 내용을 스트링으로 전송하고 변환시켜 [1, 2, 3, 4, 5, 6]의 형태로 볼 수 있게 해준다.

 

이때 배열의 각 요소를 보고싶다면 

for(element in numbers) {

print(element) } 를 입력하면 123456이 출력된다

 

print(numbers[ ])를 쓰고 대괄호 안에 요소의 인댁스 번호를 입력해 요소를 출력하는 방법 또한 존재한다.

 

*이때, 배열은 고정된 크기이므로 크기를 키우거나 새로운 인덱스를 추가할 수 없다.

 

배열 선언 후 새로운 값을 지정하고 다시 출력하면, 후에 새로이 지정한 값으로 출력되는 결과를 관찰할 수 있다.

 

또한 배열 안에 객체 한개를 다 저장할 수도 있다.

val Fruits = arrayOf(Fruits(name: "Grape", price: 2.5), Fruits(name: "apple", price: 3.5)) 

data class Fruit(val name: string, val price: double) //데이터 클래스 구조를 만든 것이다

->[Fruits(name: "Grape", price: 2.5), Fruits(name: "apple", price: 3.5))

 

3. 리스트

 

리스트: 하나의 데이터 타입과 커스텀 객체 또는 클래스를 모두 저장할 수 있고, 값이 추가된다면 크기를 늘릴 수도 있다.

수정할 수 있는 뮤터블 타입과 수정할 수 없는 이뮤터블 타입이 존재한다.

 

listOf에는 모든 타입이 들어갈 수 있다.

 

val months = ListOf("january", "march")

이 리스트는 이뮤터블(수정 불가능한 리스트)라 변경할 수 없다.

 

뮤터블 리스트를 만드려면, val additional month = month.toMutableList()를 추가해주면 변경 가능한 뮤터블 리스트로 인식된다

 

그리고 additionalMonth.add("july")를 입력하면, additionalMonth라는 리스트에 july 요소가 추가되어 출력할 수 있다.

 

요소를 삭제하고 싶을 때에는 removeAt 함수를 사용하고(전체 삭제를 원할 경우 removeAll함수가 간편하다), 다양한 함수를 사용하여 오버라이딩하는 것이 가능하다.

 

4. set

 

이뮤터블 클래스는 setOf

뮤터블 클래스는 mutable setOf

hash setOf

 

.toSortedSet()함수를 사용하면 리스트 안의 요소들을 알파벳 순으로 정렬해준다

 

특정 요소에 접근하길 원한다면 .elementAt(index : n)을 넣으면, n번 인덱스 요소에만 접근할 수도 있다.

 

mapOf( 1 to "momday", 2 to "tuesday") mapOf 함수는 특정 값과 키를 연결해 키로 값을 찾을 수 있다

->1과 월요일을 연결, 2와 화요일을 연결한 것

키는 단 한번만 연결될 수 있다.

다른 언어에서는 hash map, dictionary로 불리기도 한다.

 

5. arrayList

 

동적 배열을 생성하는 것이며, 컬렉션의 일종이다.

 

arrayList는 필요에 따라 크기를 조절할 수 있다.

읽기용과 쓰기용 모두 가능하다.

삽입시퀀스를 따른다.

arrayList는 동기회되지 않아서 중복 요소가 가능하다.

 

-arrayList의 다양한 생성자 예시

arrayList <> () 비어있는 배열을 만들 때 이용되는 가장 기본 생성자

arrayList(capacity: int0 배열의 용령을 정할 수 있는 생성자, 요소의 최대량을 정할 수 있다.

arrayList(elements: collection < >) 컬렉션을 기반으로 배열 리스트를 생성할 수 있다.

 

-arrayList의 함수 예시

open fun add(element: ) : Boolean adda 함수는 특정 요소를 리스트에 추가할 수 있다.

open fun clear() clear 함수는 모든 요소를 컬렉션에서 삭제할 수 있다.

open fun get(index: int): get 함수는 특정 인덱스 값을 돌려준다.

open fun remove(element: ): Boolean remove함수는 컬랙션애서 특정 요소의 한 예시를 제거한다

 

*배열 리스트는 이뮤터블이라 var 변수를 쓸 수 없지만 일정 부분 조정은 가능하다

->객체를 대체할 수는 없지만 객체의 내용을 바꿀 수는 있다

 

.iterator 함수: 배열리스트가 다른 입력값을 가지고 있는 한 while 루프를 실행한다

 

6. 람다식

 

람다 표현식은 고급스러운 코드를 짧고 간결하게 정리해준다

 

이름이 없는 함수이다(그렇지만 익명의 함수는 아니다!!)

 

람다 표현식과 익명의 함수는 모두 함수 리터럴이다

->선언되지 않고 곧바로 표현식으로 전달된 함수

 

람다는 중괄호로 정의되고, 매개변수와 함수 바디로 변수를 받는다

*반드시 매개변수로 변수를 받을 필요가 있는 것이 아니다

 

함수 바디는 변수 뒤어 화살표와 연산자와 함께 쓰인다 -> 람다 연산자

 

-기본적인, 일반적인 함수의 기능과 형태

fun addNumber(a: int, b: int) {

val add = a + b

print(add) }

 

-람다 표현식

val sum(int, int) -> int = {a = int, b = int -> a + b } //sum이라는 람다 표현식을 만든 것이다

print(sum(10, 5))

 

-더 짧은 람다 표현식?

val sum  = {a = int, b = int -> println(a+b)}

sum(10, 5)

 

이 글은 유데미 강의 Android 12 및 Kotlin 개발 완전 정복을 참고하여 작성하였습니다.

 

 

 

 

'