관리 메뉴

VivaButton

코틀린(Kotlin) 기본 문법1(#4 - class, fun, println, var, val, String templates) 본문

IT/코틀린(Kotlin)

코틀린(Kotlin) 기본 문법1(#4 - class, fun, println, var, val, String templates)

비바버튼 2021. 3. 15. 11:15
728x90

오늘은 코틀린 기본문법에 대해 알아보도록 하겠습니다.

예제 코드를 작성한 코틀린의 버전은 v1.4.31이며, 인텔리J로 코틀린 프로젝트를 생성하여 작성하였습니다.

 

1. 출력

fun main(args: Array<String>){
    //출력
    print("기본 출력!");
    println("출력후 줄바꿈!");
    println("인수 출력 : " + args.contentToString())
}

main 펑션을 생성하고 출력. main 펑션을 클래스 내에 생성하지 않고, 클래스 외부에 생성합니다.

 

1. class

//클래스 정의 - 상속 받을 수 없음. 
class BasicSyntax

//클래스의 속성은 선언 또는 본문에 나열 될 수 있다.
class Rectangle(var height: Double, var length: Double){
    var perimeter = (height + length) * 2
}

//클래스를 상속 가능하게 하려면 open 을 붙인다.
open class OpenClass(){
    var two: Int = 2
}

//클리스의 속성은 선언 또는 본문에 나열 될 수 있다.
class OpenRectangle(var height: Double, var length: Double): OpenClass(){
    var perimeter = (height + length) * two
}

fun main(args: Array<String>){
    //클래스 변수 선언
    println("직사각형의 둘레 : "+ Rectangle(5.0, 2.0).perimeter)

    //상속 클래스
    println("상속 직사각형의 둘레 : "+ OpenRectangle(5.0, 2.0).perimeter)
}

코틀린에서는 자바와는 다르게 Class 생성 시 중괄호(braces, {})를 붙이지 않아도 문법 오류가 나지 않습니다.

 

2. function 생성

class BasicSyntax {
    //기본 function
    fun sum(a: Int, b: Int): Int{
        return a + b
    }

    //더 간단한 function
    fun sumSimple(a : Int, b : Int) = a + b

    //return이 없는 function
    fun printSum(a: Int, b: Int): Unit{
        println("BasicSyntax().printSum : sum of $a and $b is ${a + b}")
    }
    
    //return Unit 생략
    fun printSumNoReturn(a: Int, b: Int){
        println("BasicSyntax().printSumNoReturn : sum of $a and $b is ${a + b}")
    }
}

fun main(args: Array<String>){
    //함수
    println("BasicSyntax().sum(1,2) : " + BasicSyntax().sum(1,2))
    println("BasicSyntax().sumSimple(1,2) : " + BasicSyntax().sumSimple(1,2))
    BasicSyntax().printSum(1,2)
    BasicSyntax().printSumNoReturn(1,2)
}
 

function은 클래스 내부와 외부에 모두 생성 가능합니다.

 

3. 출력(print, println)

fun main(args: Array<String>){
    //출력
    print("기본 출력!");
    println("출력후 줄바꿈!");
    println("인수 출력 : " + args.contentToString())
}

출력은 자바에서는 앞에 System.out. 이 붙던 것이 생략된다.

 

4. 주석

//주석

/*
 * 이것은 주석
*/

/**
 * 이것도 주석
 */

주석은 자바와 동일하게 작성됩니다.

 

5. 변수 

class Variables(){
    //val은 초기값 할당 후 값을 변경 할 수 없음. (java의 final 변수와 유사, ReadOnly)
    fun variableVal(){
        val a: Int = 1 //즉시 할당
        val b = 2       //변수 타입을 지정하지 않았지만, Int형이 유추됨
        val c: Int      //값을 초기화 하지 않는 경우 타입 필요.
        c = 3           //초기값 지연 할당

        println("Variables.variableVal - a : ${a}, b : ${b}, c : ${c}")
    }

    //var는 재할당 할 수 있는 변수
    fun valiableVar(){
        var x = 5
        x += 1
        println("x : ${x}")
    }
}

fun main(args: Array<String>){
    //변수
    Variables().variableVal()
    Variables().valiableVar()
}

 

6. String templates

/**
 * 문자열 템플릿
 * s1은 이미 a의 값이 담겨 있기 때문에 1 출력
 * s2는 a의 값이 2로 변경되어 출력
 */
fun printStringTemplate(){
    var a = 1
    val s1 = "a is $a"
    a = 2
    val s2 = "${s1.replace("is", "was")}, but now is $a"

    println("s1 : $s1");
    println("s2 : $s2");
}

fun main(args: Array<String>){
    //String 템플릿
    printStringTemplate()
}
결과 출력 : 
s1 : a is 1
s2 : a was 1, but now is 2

 

오늘은 코틀린의 기본문법에 대해 간략하게 알아봤습니다.

아직까지는 코드 스타일에서 자바와의 차이는 코드가 간략하다? 정도로 느끼고 있네요.

그냥 자바스크립트 코드와 유사한 느낌입니다.