Back-end Skill/Kotlin

kotlinBasic 이해하기

Sophie소피 2022. 10. 5. 16:14

코틀린( Kotlin )은 2011년 7월 JetBrains사가 공개한 JVM에서 동작하는 프로그래밍 언어로서, 간결하고 실용적이며 **자바코드와의 상호운용성( interoperability )**를 중시한 언어


대상 플랫폼

코틀린의 주목적은 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것이다.

  • 서버상의 코드 ( 특히 웹 애플리케이션의 백엔드 ( backend ) )
  • 안드로이드 디바이스에서 실행되는 모바일 애플리케이션

변수

package com.sophie.myapplication.Kotlin

//Variable

//var, var name = data

//var == varible - 내 맘대로 원하는 것을 넣을 수 있음
//value == value - 한번 넣으면 바꿀 수 없는 상자 -> Value

var num = 10
var hello = "hello"
var point = 3.4

val fix = 20

fun main(args: Array<String>) {
    println(num)
    println(hello)
    println(point)
    println(fix)

    num = 100
    hello = "Good Bye"
    point = 10.4

    println(num)
    println(hello)
    println(point)
    println(fix)

}

자료형

코틀린의 자료형은 자바와 동일 코틀린의 자료형은 기본적으로 레퍼런스 자료형이지만 기본적으로 NULL을 가질 수 없다. NULL 값을 갖게 하기위해서는 자료형 이름 뒤에 ?를 붙여줘야 한다.

package com.sophie.myapplication.Kotlin

val str:String = null // 컴파일 에러
val str:String? = null // ?를 붙여줘서 NULL 대입

// Type
// long int short byte
// double float
// char string
// boolean(true, false)

var number = 10
var number1: Int = 20
var hello1: String = "Hello"
var point1: Double = 3.4

fun main(array: Array<String>) {
    number = 20
}

배열

코틀린에서 배열은 Array클래스에 제네릭타입을 넣어 표현

package com.sophie.myapplication.Kotlin
// 빈 배열 객체 생성
var emptyArr = emptyArray<Int>()

// 기본값이 들어있는 배열 생성
var arr:Array<Int> = arrayOf(1,2,3)

// 배열의 사이즈를 정하고 값들을 null로 초기화
var nullArr = arrayOfNulls<Int>(5)
println(nullArr.size) //5

fun main(args: Array<String>) {

    //타입 명시 (변수 선언처럼 해당 타입의 원소만 포함 가능)
    var group1 = arrayOf<Int>(1,2,3,4,5)
    println(group1 is Array)

    println(group1.get(1)) //2
    println(group1.get(4)) //5

    println(group1[2]) //3
    println(group1[3]) //4

    //타입 비명시 (여러 타입의 원소 포함 가능)
    var group2 = arrayOf(1,2,3.5,"Hello")

}

조건문

if문

코틀린의 if문은 자바와 동일 대신 코틀린은 삼항연산자가 없기 때문에 if문을 삼항연산자처럼 값을 할당하는데에 사용할 수 있다.

package com.sophie.myapplication.Kotlin
fun main(args: Array<String>) {
    var a = 10;
    var b = 20;

    var c = if (a != b) {
        println("a와 b의 값이 다르다.")
        a + b // c = a+b
    } else {
        println("a와 b의 값이 같다.")
        1020 // c = 1020
    }

    println(c) // 30
}

When

자바의 switch-case와 유사 콜론(:) 대신 ->를 사용 또한 default 대신 else 사용

package com.sophie.myapplication.Kotlin
fun main(args: Array<String>){
    var num:Int = 10

    when(num){
        0 -> println("숫자는 0")
        5 -> println("숫자는 5")
        10 -> println("숫자는 10")
        else -> {
            println("숫자는 0,5,10도 아닌 다른 수")
            println("{}도 활용가능")
        }
    }
}

//결과 : 숫자는 10

여러 값 비교, 범위 또는 배열에 속하는지도 when에서 사용가능

package com.sophie.myapplication.Kotlin
fun main(args: Array<String>){
    var num:Int = 10
    var arr:IntArray = intArrayOf(1,2,3,4,10)

    when(num){
        0,1 -> println("숫자는 0과 1")
        in 2..5 -> println("2와 5사이의 수")
        in arr -> println("arr 배열에 속함")
        !in arr -> println("arr 배열에 속하지 않음")
    }
}

//결과 : arr 배열에 속함

인자의 타입을 모르는 경우에, 코틀린의 when 문법에서는 타입 검사에 자동 형변환도 지원해준다.

package com.sophie.myapplication.Kotlin

fun main(args: Array<String>){
    var unknownObject:Any = "ABCDEFG"

    when(unknownObject){
        is TestClass -> println(unknownObject.print())
        is String -> println(unknownObject.length)
        is Int -> println(unknownObject.minus(10))
    }
}
class TestClass{
    fun print(){
        println("TestClass 실행 print() 실행")
    }
}

//결과 : 7

when은 그 자체로도 함수가 될 수 있다.

package com.sophie.myapplication.Kotlin
fun main(args: Array<String>){
    val num:Int = 50
    val digitStr = digit(num)
    println(digitStr)
}

// when을 통해 값을 return
fun digit(num: Int) = when(num) {
    in 0..9 -> "한자리 수"
    in 10..99 -> "두자리 수"
    in 100..999 -> "세자리 수"
    else -> "out of Range"
}

// 결과 : 두자리 수

반복문

for 문

코틀린의 for문은 기본적으로 for-each문 자바처럼 조건식, 증감식을 사용하는 것이 아닌, 데이터의 묶음에서 요소를 하나씩 가져와 사용하는 구조이다.

fun main(args :Array<String>){
    var arr = arrayOf("A","B","C","D","E")

    // 기본적인 for문
    for(item in arr){
        print(item + " ")
    }

    // 배열, 자료구조에서 indices를 사용하여 인덱스를 가져올 수 있음.
    for(idx in arr.indices){
        print(arr[idx] + " ")
    }

    // range 문법을 이용하여 index값을 가져올 수 있음.
    for(idx in 0..arr.size-1){
        print(arr[idx] + " ")
    }

    결과 : A B C D E
}

fun main(args :Array<String>){
    var arr = arrayOf("A","B","C","D","E")

    // index와 값을 둘다 뽑아올때는 withIndex() 활용
    for((idx, value) in arr.withIndex()){
        println("$idx 번째 값은 $value")
    }
}
    결과 : 0 번째 값은 A
           1 번째 값은 B
           2 번째 값은 C
           3 번째 값은 D
           4 번째 값은 E

while / do-while

while 문은 자바의 while문과 100% 동일


코틀린( Kotlin )은 2011년 7월 JetBrains사가 공개한 JVM에서 동작하는 프로그래밍 언어로서, 간결하고 실용적이며 **자바코드와의 상호운용성( interoperability )**를 중시한 언어


대상 플랫폼

코틀린의 주목적은 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것이다.

  • 서버상의 코드 ( 특히 웹 애플리케이션의 백엔드 ( backend ) )
  • 안드로이드 디바이스에서 실행되는 모바일 애플리케이션

변수

package com.sophie.myapplication.Kotlin

//Variable

//var, var name = data

//var == varible - 내 맘대로 원하는 것을 넣을 수 있음
//value == value - 한번 넣으면 바꿀 수 없는 상자 -> Value

var num = 10
var hello = "hello"
var point = 3.4

val fix = 20

fun main(args: Array<String>) {
    println(num)
    println(hello)
    println(point)
    println(fix)

    num = 100
    hello = "Good Bye"
    point = 10.4

    println(num)
    println(hello)
    println(point)
    println(fix)

}

자료형

코틀린의 자료형은 자바와 동일 코틀린의 자료형은 기본적으로 레퍼런스 자료형이지만 기본적으로 NULL을 가질 수 없다. NULL 값을 갖게 하기위해서는 자료형 이름 뒤에 ?를 붙여줘야 한다.

package com.sophie.myapplication.Kotlin

val str:String = null // 컴파일 에러
val str:String? = null // ?를 붙여줘서 NULL 대입

// Type
// long int short byte
// double float
// char string
// boolean(true, false)

var number = 10
var number1: Int = 20
var hello1: String = "Hello"
var point1: Double = 3.4

fun main(array: Array<String>) {
    number = 20
}

배열

코틀린에서 배열은 Array클래스에 제네릭타입을 넣어 표현

package com.sophie.myapplication.Kotlin
// 빈 배열 객체 생성
var emptyArr = emptyArray<Int>()

// 기본값이 들어있는 배열 생성
var arr:Array<Int> = arrayOf(1,2,3)

// 배열의 사이즈를 정하고 값들을 null로 초기화
var nullArr = arrayOfNulls<Int>(5)
println(nullArr.size) //5

fun main(args: Array<String>) {

    //타입 명시 (변수 선언처럼 해당 타입의 원소만 포함 가능)
    var group1 = arrayOf<Int>(1,2,3,4,5)
    println(group1 is Array)

    println(group1.get(1)) //2
    println(group1.get(4)) //5

    println(group1[2]) //3
    println(group1[3]) //4

    //타입 비명시 (여러 타입의 원소 포함 가능)
    var group2 = arrayOf(1,2,3.5,"Hello")

}

조건문

if문

코틀린의 if문은 자바와 동일 대신 코틀린은 삼항연산자가 없기 때문에 if문을 삼항연산자처럼 값을 할당하는데에 사용할 수 있다.

package com.sophie.myapplication.Kotlin
fun main(args: Array<String>) {
    var a = 10;
    var b = 20;

    var c = if (a != b) {
        println("a와 b의 값이 다르다.")
        a + b // c = a+b
    } else {
        println("a와 b의 값이 같다.")
        1020 // c = 1020
    }

    println(c) // 30
}

When

자바의 switch-case와 유사 콜론(:) 대신 ->를 사용 또한 default 대신 else 사용

package com.sophie.myapplication.Kotlin
fun main(args: Array<String>){
    var num:Int = 10

    when(num){
        0 -> println("숫자는 0")
        5 -> println("숫자는 5")
        10 -> println("숫자는 10")
        else -> {
            println("숫자는 0,5,10도 아닌 다른 수")
            println("{}도 활용가능")
        }
    }
}

//결과 : 숫자는 10

여러 값 비교, 범위 또는 배열에 속하는지도 when에서 사용가능

package com.sophie.myapplication.Kotlin
fun main(args: Array<String>){
    var num:Int = 10
    var arr:IntArray = intArrayOf(1,2,3,4,10)

    when(num){
        0,1 -> println("숫자는 0과 1")
        in 2..5 -> println("2와 5사이의 수")
        in arr -> println("arr 배열에 속함")
        !in arr -> println("arr 배열에 속하지 않음")
    }
}

//결과 : arr 배열에 속함

인자의 타입을 모르는 경우에, 코틀린의 when 문법에서는 타입 검사에 자동 형변환도 지원해준다.

package com.sophie.myapplication.Kotlin

fun main(args: Array<String>){
    var unknownObject:Any = "ABCDEFG"

    when(unknownObject){
        is TestClass -> println(unknownObject.print())
        is String -> println(unknownObject.length)
        is Int -> println(unknownObject.minus(10))
    }
}
class TestClass{
    fun print(){
        println("TestClass 실행 print() 실행")
    }
}

//결과 : 7

when은 그 자체로도 함수가 될 수 있다.

package com.sophie.myapplication.Kotlin
fun main(args: Array<String>){
    val num:Int = 50
    val digitStr = digit(num)
    println(digitStr)
}

// when을 통해 값을 return
fun digit(num: Int) = when(num) {
    in 0..9 -> "한자리 수"
    in 10..99 -> "두자리 수"
    in 100..999 -> "세자리 수"
    else -> "out of Range"
}

// 결과 : 두자리 수

반복문

for 문

코틀린의 for문은 기본적으로 for-each문 자바처럼 조건식, 증감식을 사용하는 것이 아닌, 데이터의 묶음에서 요소를 하나씩 가져와 사용하는 구조이다.

fun main(args :Array<String>){
    var arr = arrayOf("A","B","C","D","E")

    // 기본적인 for문
    for(item in arr){
        print(item + " ")
    }

    // 배열, 자료구조에서 indices를 사용하여 인덱스를 가져올 수 있음.
    for(idx in arr.indices){
        print(arr[idx] + " ")
    }

    // range 문법을 이용하여 index값을 가져올 수 있음.
    for(idx in 0..arr.size-1){
        print(arr[idx] + " ")
    }

    결과 : A B C D E
}

fun main(args :Array<String>){
    var arr = arrayOf("A","B","C","D","E")

    // index와 값을 둘다 뽑아올때는 withIndex() 활용
    for((idx, value) in arr.withIndex()){
        println("$idx 번째 값은 $value")
    }
}
    결과 : 0 번째 값은 A
           1 번째 값은 B
           2 번째 값은 C
           3 번째 값은 D
           4 번째 값은 E

while / do-while

while 문은 자바의 while문과 100% 동일

 

아직 미완성.. 나혼자 볼것 ,,,