별의 공부 블로그 🧑🏻‍💻

🗒️ 코틀린 (28)

728x90
  1. 2022.09.21 [Kotlin] 검사와 자료형 변환

    검사와 자료형 변환 코틀린의 자료형 변환 기본형을 사용하지 않고 참조형만 사용 서로 다른 자료형은 변환 과정을 거친 후 비교 val a: Int = 1 // 정수형 변수 a를 선언하고 1을 할당 val b: Double = a // 자료형 불일치 오류 발생 val c: Int = 1.1 // 자료형 불일치 오류 발생 변환 메서드의 이용 val b: Double = a.toDouble() // 변환 메서드 사용 표현식에서 자료형의 자동 변환 val result = 1L + 3 // Long + Int -> 결과는 Long 변환 메서드의 종류 toByte : Byte toLong : Long toShort : Short toFloat : Float toInt : Int toDouble : Double toC..

  2. 2022.08.28 [Kotlin] 널(Null)

    널(Null) 널(Null), 너는 누구니? 코틀린은 변수를 사용할 때 반드시 값이 할당되어 있어야 한다는 원칙이 있다. 만약 값이 할당되지 않은 변수를 사용하면 코틀린에서 오류가 발생한다. 한편 값이 없는 상태는 널(Null) 이라고 부른다. 프로그램이 실행되는 도중에 값이 null 인 변수에 접근하려 하면 NPE(NullPointerException) 오류가 발생한다. 변수에 null 할당을 허용하려면 자료형 뒤에 물음표 기호(?)를 명시해야 한다. null을 이용한 변수 검사 코틀린의 변수 선언은 기본적으로 null을 허용하지 않는다. val a: Int = 30 var b: String = "Hello" 다음과 같이 null 가능한 변수들을 선언할 수 있다. val a: Int? = null va..

  3. 2022.08.27 [Kotlin] 자료형과 변수

    자료형과 변수 자료형과 변수 자료형 Int String Float ... 변수 val (Value) : 불변형(Immutable) var (Variable) : 가변형(Mutable) 변수의 선언 val username: String = "Kildong" 선언 키워드 변수 이름 자료형 값 변수 선언 예 val username = "Kildong" // 자료형을 추론하여 String 으로 결정 var username // 자료형을 지정하지 않은 변수는 사용할 수 없음. val init: Int // 사용 전 혹은 생성자 시점에서 init 변수를 초기화 해야 함. val number = 10 // number 변수는 Int 형으로 추론 여기서 주의할 점은, var username 과 같이 자료형을 지정하지 ..

  4. 2022.08.26 [Kotlin] InteliJ IDEA 살펴보기 & main() 함수

    InteliJ IDEA 살펴보기 & main() 함수 IntelliJ IDEA 도구 창의 단축키 도구창 단축키(윈도우) 단축키(맥) Message [Alt] + [0] [Cmd] + [0] Project [Alt] + [1] [Cmd] + [1] Favorites [Alt] + [2] [Cmd] + [2] Run [Alt] + [4] [Cmd] + [4] Debug [Alt] + [5] [Cmd] + [5] TODO [Alt] + [6] [Cmd] + [6] Structure [Alt] + [7] [Cmd] + [7] Terminal [Alt] + [F12] [Option] + [F12] Create a new project Coding main을 타이핑하고 [Tab] 키를 눌러보자. main 함수가 코..

  5. 2022.08.26 [Kotlin] 자바 JDK 설치하기 / 환경 변수 설정하기

    자바 JDK 설치하기 / 환경 변수 설정하기 JDK 설치는 왜? 코틀린을 JVM에서 실행하기 위해 기존 자바와 상호작용할 수 있고, 자바 라이브러리를 이용할 수 있음. Oracle JDK vs. OpenJDK Oracle JDK : 보안 업데이트를 지속적으로 받으려면 '구독' 방식으로 라이선스를 구매해야 함. OpenJDK : 제한 없이 사용 가능하지만, 보안 서비스의 의무가 없어 유지보수가 어려움. Azul의 Julu TCK 인증을 통과한 OpenJDK를 묶어서 배포하는 제 3의 벤더 https://www.azul.com/downloads/ Downloads No matter the size of your company, Azul offers competitive pricing options to fi..

  6. 2022.08.24 [Kotlin] 코틀린의 개요

    코틀린의 개요 Kotlin 탄생 배경 목표 풀 스택 웹 개발, Android와 iOS 앱 그리고 임베디드, IoT 등 모든 개발을 다양한 플랫폼에서 개발할 수 있도록 하는 것 특징 IDE(Android Studio의 모체)로 유명한 JetBrains 에서 개발하고 보급 코드가 간결하고 다재 다능하며 호환성이 높다. 문장 끝에 세미콜론은 옵션이다. Android Studio 에서 안드로이드 공식 언어로 추가 변수는 Nullable(널 값 사용 가능)과 NotNull로 나뉘는데, 변수 선언시 '?'를 붙여 Nullable로 만들 수 있다. 다양한 플랫폼 사용 가능한 플랫폼 Kotlin/JVM : 자바 가상 머신 상에서 동작하는 앱을 만들 수 있다. Kotlin/JS : 자바 스크립트에 의해 브라우저에서 동작..

  7. 2022.08.21 [Kotlin] 코틀린 한 눈에 알아보기

    코틀린(Kotlin) 한 눈에 알아보기 코틀린(Kotlin) IntelliJ IDEA의 개발사 JetBrains에서 2011년에 공개한 오픈 소스 프로그래밍 언어 JVM 기반의 언어이며, Java와 유사하지만 더 간결한 문법과 다양한 기능을 추가하였다. Java와의 상호 운용이 100% 지원된다. JVM 바이트 코드가 기본이지만, Kotlin/Native 컴파일러를 사용하여 기계어로 컴파일할 수 있다. 안드로이드, 스프링 프레임워크, 톰캣, JavaScript, Java EE, HTML5, iOS, 라즈베리 파이 등을 개발할 때 사용할 수 있다. 2017년에 구글이 안드로이드의 공식 언어로 Kotlin을 추가하였다. 이는 오라클과의 Java API 저작권 분쟁의 여파로 보는 시각이 많다. 이름은 JetB..

  8. 2021.04.10 [안드로이드] 합성 프로퍼티(Synthetic Property)를 사용한 뷰 바인딩(View Binding)

    # 뷰 바인딩(View Binding) 안드로이드에서 UI 를 화면에 나타낼 때 레이아웃 파일인 xml 파일에 UI 의 요소를 태그 표기법으로 작성함. xml 파일을 코드에서 사용하려면 뷰(View) 로 불리는 UI 요소의 id를 코드에서 지정해야 함. 이 작업을 뷰의 바인딩(View Binding) 이라고 함. 뷰의 바인딩을 이용하려면 코틀린 안드로이드 확장이 build.gradle 파일에 지정되어야 함. 모듈 단위의 build.gradle(.app) 파일에 다음 플러그인이 명시되어 있는지 확인함. apply plugin: 'kotlin-android-extensions' # 합성 프로퍼티 사용하기 코틀린 확장 기능을 이용해 다음과 같이 합성 프로퍼티(Synthetic Property) 를 사용하여 U..

  9. 2021.04.05 보일러플레이트(Boilerplate)

    보일러플레이트(Boilerplate) 보일러플레이트(Boilerplate)한 코드 반복되어 자주 쓰지만 매번 작성하기 번거롭고 읽기 어려운 많은 양의 코드 코틀린의 목표는 이러한 보일러플레이트한 코드를 제거해서 자주 사용되는 루틴을 간략화하는 것이다. 참고 : Wikipedia

  10. 2021.04.05 [코틀린] 기본 스레드 생성하기

    ■ 스레드 루틴 만들기 (Java) - Thread 클래스 상속받기 - Runnable 인터페이스 구현 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // (1) Thread 클래스를 상속받아 구현하기 class SimpleThread: Thread() { override fun run() { println("Current Threads: ${Thread.currentThread()}") } } // (2) Runnable 인터페이스로부터 run() 메서드 구현하기 class SimpleRunnable: Runnable { override fun run() { println("Current Threads: ${Thread.currentThread()..

  11. 2021.04.03 [코틀린] 컬렉션의 순서와 정렬 예제

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 fun main() { val unsortedList = listOf(3, 2, 7, 5) // reversed: 뒤집힌 순서로 컬렉션 반환 println("reversed: " + unsortedList.reversed()) // sorted: 요소를 정렬한 후 정렬된 컬렉션 반환 println("sorted: " + unsortedList.sorted()) // sortedDescending: 내림차순 정렬 println("sortedDescending: " + unsortedList.sortedDescending()) // sortedBy: 특정 비교식에 의해 정렬된 컬렉션 반환 println("sortedBy: " + unsor..

  12. 2021.04.03 [코틀린] 컬렉션의 분리와 병합 예제

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 fun main() { val list1 = listOf(1, 2, 3, 4, 5, 6) val list2 = listOf(2, 2, 3, 4, 5, 5, 6, 7) // union: 두 List를 합침 (중복 요소는 하나만) println(list1.union(list2)) // plus: 두 List를 합침 (중복 요소 포함), + 연산자와 같음. println(list1.plus(list2)) // partition: 주어진 식에 따라 2개의 컬렉션으로 분리해 Pair로 반환 val part = list1.partition { it % 2 == 0 } println(part) // zip: 동일한 인덱스끼리 Pair를 ..

  13. 2021.04.03 [코틀린] 컬렉션 요소 처리와 검색 예제

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 fun main() { val list = listOf(1, 2, 3, 4, 5, 6) val listPair = listOf(Pair("A" , 300), Pair("B", 200), Pair("C", 100), Pair("D", 200)) val listRepeated = listOf(2, 2, 3, 4, 5, 5, 6) // elementAt: 인덱스에 해당하는 요소 반환 println("elementAt: " + list.elementAt(1)) // e..

  14. 2021.04.03 [코틀린] 컬렉션 요소의 매핑 예제

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 fun main() { val list = listOf(1, 2, 3, 4, 5, 6) val listWithNull = listOf(1, null, 3, null, 5, 6) // map: 컬렉션에 주어진 식을 적용해 새로운 컬렉션 반환 println(list.map { it * 2 }) // mapIndexed: 컬렉션에 인덱스를 포함하고 주어진 식을 적용해 새로운 컬렉션 반환 val mapIndexed = list.mapIndexed { index, it -> index * it } println(mapIndexed) // mapNotNull: null을 제외하고 식을 적용해 새로운 컬렉션 반..

  15. 2021.04.03 [코틀린] 컬렉션 요소의 필터와 추출 예제

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 fun main() { val list = listOf(1, 2, 3, 4, 5, 6) val listMixed = listOf(1, "Hello", 3, "World", 5, 'A') val listWithNull = listOf(1, null, 3, null, 5, 6) val listRepeated = listOf(2, 2, 3, 4, 5, 5, 6) val map = mapOf(11 to "Java", 22 to "Kotlin", 33 to "C++") // fil..

  16. 2021.04.03 [코틀린] 컬렉션 요소의 검사 예제

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 fun main() { val list = listOf(1, 2, 3, 4, 5, 6) val listPair = listOf(Pair("A" , 300), Pair("B", 200), Pair("C", 100)) val map = mapOf(11 to "Java", 22 to "Kotlin", 33 to "C++") // all: 모든 요소가 일치해야 true 반환 println(list.all { it < 10 }) println(list.all { it % 2 == 0 }) // any: 최소한 하나 혹은 그 이상의 특정 요소가 일치해야 true 반환 pr..

  17. 2021.04.03 [코틀린] 컬렉션 요소의 처리와 집계 예제

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 fun main() { val list = listOf(1, 2, 3, 4, 5, 6) val listPair = listOf(Pair("A", 300), Pair("B", 200), Pair("C", 100)) val map = mapOf(11 to "Java", 22 to "Kotlin", 33 to "C++") // forEach: 각 요소를 람다식으로 처리 list.forEach { print("$it ") } println() list.forEachIndexed { index, val..

  18. 2021.04.03 [코틀린] 컬렉션 연산 예제

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 fun main() { val list1: List = listOf("one", "two", "three") val list2: List = listOf(1, 3, 4) val map1 = mapOf("hi" to 1, "hello" to 2, "Goodbye" to 3) println(list1 + "four") // + 연산자를 사용한 문자열 요소 추가 println(list1 + 1) // + 연산자를 사용한 정수형 요소 추가 println(list2 + listOf(5, 6, 7)) // 두 List의 병합 println(list2 - 1) // 요소의 제거 println(list2 - listOf(3, 4, 5)) // 일치하는 요..

  19. 2021.04.03 [코틀린] 불변형(Immutable) List를 가변형(Mutable)으로 변환하기

    - List의 toMutableList() 메서드를 사용하여 불변형(Immutable) List를 가변형(Mutable)으로 변환할 수 있음. (가변형 List를 불변형 List로 변환하는 메서드는 존재하지 않음.) 1 2 3 4 5 6 fun main() { val names: List = listOf("one", "two", "three") // 불변형 List 초기화 val mutableNames = names.toMutableList() // 새로운 가변형 List가 만들어짐. mutableNames.add("four") // 가변형 List에 하나의 요소 추가 println(mutableNames) } [one, two, three, four]

  20. 2021.04.02 [코틀린] 배열의 인덱스 찾아내기 예제 (제네릭, 배열 사용)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 fun find(a: Array, Target: T): Int { for (i in a.indices) { if (a[i] == Target) return i } return -1 } fun main() { val arr1: Array = arrayOf("Apple", "Banana", "Cherry", "Durian") val arr2: Array = arrayOf(1, 2, 3, 4) println("arr.indices ${arr1.indices}") // indices는 배열의 유효 범위 반환 println(find(arr1, "Cherry")) // 요소 C의 인덱스 찾아내기 println(find(arr2, 2)) // 요소 2의..

  21. 2021.03.31 [코틀린] 접근 지정자(Getter, Setter) 예제

    게터와 세터가 포함되는 프로퍼티 선언에 대한 구조 var 프로퍼티_이름[: 프로퍼티 자료형] [= 프로퍼티 초기화] [get() { 게터 본문 }] [set(value) { 세터 본문 }] val 프로퍼티 이름[: 프로퍼티 자료형] [= 프로퍼티 초기화] [get() { 게터 본문 }] 프로퍼티를 var로 선언하는 경우 게터와 세터 둘 다로 선언할 수 있음. 프로퍼티를 val로 선언하는 경우 게터로만 선언 가능함. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 class User(_id: Int, _name: String, _age: Int) { // 프로퍼티 val id: Int = _id get() = field var name: St..

  22. 2021.03.30 [코틀린] 바깥 클래스 호출하기 (Inner Class)

    이너 클래스 에서 바깥 클래스의 상위 클래스 를 호출하려는 경우 super 키워드와 함께 @ 기호 옆에 바깥 클래스 이름을 작성함. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 open class Base { open val x: Int = 1 open fun f() = println("Base Class f()") } class Child : Base() { override val x: Int = super.x + 1 override fun f() = println("Child Class f())") // 이너 클래스 inner class Inside { fun f() = println("Inside Class f()") fun ..

  23. 2021.03.17 [코틀린] 사용자 예외 클래스 생성 & 사용 예제

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class InvalidNameException(message: String) : Exception(message) // 1. 사용자 예외 클래스 설정 fun main() { var name = "Kildong123" // 2. 숫자가 포함된 이름 try { validateName(name) } catch (e : InvalidNameException) { // 3. 숫자가 포함된 예외 처리 println(e.message) } catch (e : Exception) { // 기타 예외 처리 println(e.message) } } fun validateName(name: String) { if (name.matches..

  24. 2021.03.16 [코틀린] Try-Catch-Finally & Throw 예제

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 fun main() { var amount = 600 try { amount -= 100 checkAmount(amount) } catch (e : Exception) { println(e.message) } finally { println("이 문장은 무조건 실행됩니다.") } println("amount: $amount") } fun checkAmount(amount: Int) { if (amount < 1000) { throw Exception("잔고가 $amount 으로 1000 이하입니다.") } } 잔고가 500 으로 1000 이하입니다. 이 문장은 무조건 실행됩니다. amount: 500

  25. 2021.03.15 [코틀린] 람다식의 매개변수

    람다식의 매개변수 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 fun main() { // 매개변수가 없는 람다식 noParam({ "Hello World!" }) noParam { "Hello World!" } // 위와 동일한 결과, 소괄호 생략 가능 println() // 매개변수가 1개 있는 람다식 oneParam({ a -> "Hello World! $a" }) oneParam { a -> "Hello World! $a" } // 위와 동일한 결과, 소괄호 생략 가능 oneParam { "Hello World! $it..

  26. 2021.03.15 함수에서 다양한 인자의 개수를 전달받기 (vararg 키워드)

    함수에서 다양한 인자의 개수를 전달 받기 가변 인자(Variable Argument) 를 사용하여 여러 개의 인자를 받을 수 있음. 가변 인자(Variable Argument) '인자의 개수가 변한다.' 는 뜻 함수는 하나만 정의해 놓고, 여러 개의 인자를 받을 수 있음. 사용 방법 함수를 선언할 때, 매개변수 왼쪽에 vararg라는 키워드를 붙이면 됨. 사용 예 1 2 3 4 5 6 7 8 9 10 11 fun main() { normalVarargs(1, 2, 3, 4) // 4개의 인자값 구성 normalVarargs(4, 5, 6) // 3개의 인자값 구성 } fun normalVarargs(vararg counts: Int) { // vararg 키워드 사용 for (num in counts) ..

  27. 2021.03.15 [코틀린] XOR을 이용하여 2개의 변수 값 바꾸기 (Swap 기법)

    XOR을 이용하여 2개의 변수 값 바꾸기 xor의 독특한 성질을 이용하여 2개의 변수 값을 바꿀 수 있음. 스왑(Swap) 기법 xor 연산자를 3번 사용하여 두 변수의 값을 바꿈. 임시 변수를 놓고 변수를 저장하여 옮기는 등의 작업을 하지 않아도 간편하게 두 수를 바꿀 수 있어 편리함. 1 2 3 4 5 6 7 8 9 10 11 fun main() { var number1 = 12 var number2 = 25 number1 = number1 xor number2 // number1 = 21, number2 = 25 number2 = number1 xor number2 // number1 = 21, number2 = 12 number1 = number1 xor number2 // number1 = 25..

  28. 2021.03.13 프로그램의 메모리 영역

    프로그램의 메모리 영역 코드 영역 (Code) 데이터 영역 (Data) 힙 (Heap) ↓ 스택 영역 (Stack)) ↑ 프로그램이 사용되는 메모리 영역 ① 코드(Code) 영역 명령어가 들어가는 영역 ② 데이터(Data) 영역 프로그램이 컴파일되면 정적 변수 나 문자열 등이 들어가는 정적 메모리 영역 정해져 있어서 실행 중에 오류가 발생할 가능성이 적음. JVM 에서는 이 영역을 메서드 정적 영역(Method Static Area) 으로도 부름. ③ 힙(Heap) 영역 실행 중 생성되는 객체 가 만들어지는 동적 메모리 영역 프로그램이 동작하는 도중에 위쪽 그림의 화살표 방향으로 채워짐. (↓) 너무 많이 메모리를 할당하는 객체가 있을 경우 Out of Memory 오류가 발생할 수 있음. 함수 호출이 ..

728x90


📖 Contents 📖