-
[Kotlin] 코틀린 기초 (feat. 함수, 클래스, Null 등...)IT Study/Android 2024. 1. 14. 22:53728x90
함수
1. 유닛 반환 타입(Unit Return Type): 반환값 없는 함수에 대한 타입 표현, 생략 가능
2. 기본 인수(Default Arguments): 함수 매개변수에 기본값 설정으로 함수 오버로딩 필요성 감소
3. 명명된 인수(Named Arguments): 매개변수 이름을 통한 인수 전달로 인수 순서 자유로움
4. 단일 표현식 함수(Single Expression Functions): 함수 본문 축약 표현으로 코드 간결성 향상package fastcampus.part0.kotlin fun main() { println("Hello") test1(1, 2) test1(1, 3) test2(1) test2(l = 1, n = 3) // 2-3. 함수 안에서 선언 값에 대해 작성 가능 (순서 무관) info1(id = "1three", name = "스리", nickname = "Three") info2("스리", "Three", "1three") } // 2. 함수 : fun // 2-1. 반환 타입 : 반환 타입이 없을 경우 Unit (생략 가능) fun test1(n: Int, m: Int) { println("$n, $m") } // 2-2. 오버로딩 필요 X : 매개변수 m의 default value 4로 설정 가능 fun test2(n: Int, m: Int = 4, l: Int = 5): Int { println("$n, $m, $l") return n + m } fun info1(name: String, nickname: String, id: String) { println("$name, $nickname, $id") } // 2-4. Single Expression (단일 표현식) : 함수 정의 축약 fun info2(name: String, nickname: String, id: String) = println("$name, $nickname, $id")
변수
package fastcampus.part0.kotlin fun main() { // 3. 변수 // val 상수 // var 변수 var a: Int = 3 val b: Int = 10 a = 4 val name = "한슬" // 타입 추론 }
클래스
1. 클래스 생성자(Constructor): 클래스 인스턴스를 생성할 때 호출되는 함수, 매개변수에 기본값 설정 가능
2. 접근 제어자(Access Modifiers): 클래스 멤버의 접근 범위를 제한, private 키워드로 비공개 설정
3. 상속(Inheritance): 클래스의 특성을 재사용하고 확장하기 위한 기능, open 키워드로 상속 허용
4. 주 생성자(Primary Constructor): 클래스 헤더에 선언되며, 클래스 인스턴스 생성 시 호출
5. 부 생성자(Secondary Constructor): 클래스 본문에 선언되며, 주 생성자 외의 추가적인 생성자
6. 초기화 블록(Init Block): 클래스 인스턴스 초기화 과정에서 실행되는 코드 블록
7. 오버라이딩(Overriding): 상속받은 멤버의 기능을 자식 클래스에서 재정의, override 키워드 사용package fastcampus.part0.kotlin fun main() { val user = User("한슬", 24) user.age = 26 // user.name : 접근 불가 (private) println(user.age) Kid("아이", 3, "male") } // 4. 클래스 // 4-1. () : Constructor(생성자) // 4-2. Constructor : default value 설정 가능 class User(private val name: String, var age: Int = 24) // 4-3. 상속 : open 키워드 사용 // Kid 생성 시, User2 상속 받고 싶을 경우 open class User2(open val name: String, open var age: Int = 24) // 바깥 : 주 생성자 class Kid(override val name: String, override var age: Int) : User2(name, age) { var gender: String = "female" // 클래스 내 가장 먼저 호출 init { // Fragment 초기화 시 사용 println("초기화 중") } // 내부 : 부 생성자 constructor(name: String, age: Int, gender: String) : this(name, age) { this.gender = gender println("부 생성자 호출") } }
조건식
package fastcampus.part0.kotlin fun main() { max(10, 3) min(10, 3) isHoliday("월") } // 5-1. if fun max(n: Int, m: Int) { // result : kotlin.Unit val result = if (n > m) println("큰 수는 $n") else if (n < m) println("큰 수는 $m") else println("$n = $m") println(result) } fun min(n: Int, m: Int) { val result = if (n > m) "작은 수는 $m" else if (n < m) "작은 수는 $n" else "$n = $m" println(result) } // 5-2. when fun isHoliday(dayOfWeek: Any) { val result = when (dayOfWeek) { "토", "일" -> if (dayOfWeek == "토") "토요일 좋아 :)" else "내일 월요일..." in listOf("월", "화") -> "버티자" in 2..4 -> "숫자의 경우, 범위 값으로 사용 가능" else -> false } println(result) }
반복문
package fastcampus.part0.kotlin fun main() { // 6-1. for // 1..10 == IntRange(1, 10) == 1 until 11 for (i in 1..10) { print("$i ") } println() for (i in IntRange(1, 10)) { print("$i ") } println() for(i in 1 until 11) { print("$i ") } println() for(i in 10 downTo 1) { print("$i ") } println() for(i in 1..10 step 2) { print("$i ") } println() for(i in 10 downTo 1 step 2) { print("$i ") } println() // 6-2. while var j = 1 while(j < 11) { print("$j ") j++ } }
컬렉션
package fastcampus.part0.kotlin fun main() { // 7-1. list // mutableList : 추가, 삭제 등 변경 가능 // list : 변경 불가 val list = mutableListOf(1, 2, 3, 4, 5) list.add(6) list.addAll(listOf(7, 8, 9)) val list2 = listOf(1, 2, 3, 4) // list2.add // Error println(list) println(list2.joinToString(" ")) // it 사용 // 특징 1 : 다양한 타입 저장 val diverseList = listOf(1, "hi", 3.14, true) // 특징 2 : 강력한 확장 함수 // first, map 등 // 7-2. map val map = mapOf((1 to "안녕"), (2 to "Hello")) // map.put // Error val map2 = mutableMapOf((1 to "안녕"), (2 to "Hello")) // map2.put(3, "Bonjour") map2[3] = "Bonjour" // Index Operator }
Null
1. Null 안정성: 코틀린은 기본적으로 모든 타입의 변수가 null을 가질 수 없도록 설계되어, NullPointer 예외 방지
2. Nullable 타입: ?를 타입 뒤에 붙여 null을 가질 수 있는 변수로 선언
3. Elvis 연산자(Elvis Operator?:): 왼쪽 피연산자가 null이 아니면 그 값을, null이면 오른쪽 피연산자의 값을 반환
4. Safe Call Operator(?.): null이 아닌 경우 해당 연산을 수행하고, null인 경우 null을 반환
5. Non-null Assertion Operator(!!.): null이 아님을 확신할 때 사용하며, null인 경우 NullPointer 예외 발생package fastcampus.part0.kotlin fun main() { // 8. null (Kotlin의 null 안정성) // 타입 선언 : null 불가 명시 // : String // : Int var name: String = "한슬" // name = null // 컴파일 단계 Error // 타입? 선언 : null 가능 명시 // : String? // : Int? var nickname: String? = "three" /* * Elvis Operation (?:) * * 왼쪽 값이 non-null 경우, 객체 값 리턴 * 왼쪽 값이 null 경우, 오른쪽 값 리턴 */ // val result = if (nickname == null) "값 X" else nickname val result = nickname ?: "값 X" println(result) nickname = null // val nicknameLength = nickname.length // Error // ? : null 경우, null 반환 // !! : null 아님이 확실할 경우 val nicknameLength = nickname?.length println(nicknameLength) }
타입 체크와 캐스팅
1. 타입 체크(Type Check): is 키워드를 사용하여 변수의 타입을 확인
2. 캐스팅(Casting): as 키워드를 사용하여 변수의 타입을 변환
3. 세이프 캐스트(Safe Cast): as? 키워드를 사용하여 변환 불가능한 경우 null을 반환
4. 스마트 캐스트(Smart Cast): is 키워드를 사용하여 타입 체크 후, 해당 타입으로 자동 변환되어 사용
5. 엘비스 연산자(Elvis Operator): ?: 키워드를 사용하여 null인 경우 대체 값 제공package fastcampus.part0.kotlin fun main() { // 9-1. 타입 체크 : is println(checkType("Hi")) println(checkType(3)) println(checkType(true)) // 9-2. 캐스팅 (형 변환) : as cast("안녕") // cast(10) // ClassCastException (Int → 불가 → String) println(smartCast("안녕")) println(smartCast(10)) println(smartCast(true)) } fun checkType(n: Any): String { return when (n) { is String -> "문자열" is Int -> "정수" else -> "몰라" } } fun cast(m: Any) { // as? Type : Type으로 변환 불가 시, 자동 null 반환 // val result = m as? String // val result = (m as? String) ?: "실패" val result = m as String println(result) } fun smartCast(l: Any): Int { return when (l) { is String -> l.length is Int -> l.dec() // dec = -1 else -> -1 } }
String template
package fastcampus.part0.kotlin fun main() { // 10. string template val n = 10 val name = "three" val isTrue = true println("$n $name ${name.length} $isTrue") }
'IT Study > Android' 카테고리의 다른 글
[Android] 액티비티의 라이프 사이클 (생명주기, Life cycle) (0) 2024.01.20 [Kotlin] 코틀린 중급 (feat. 람다, 확장함수, Scope function, 초기화 지연 등...) (0) 2024.01.15 [Android] 안드로이드... 개념적인 것도 공부해보자! (0) 2023.12.10 [Android/Kotlin] 앨범, 주사위, 명언 앱 만들어보기 (Feat. GitHub) (0) 2023.11.10 [Android/Kotlin] 인프런 강의 시작! (Feat. [왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린) (0) 2023.11.08