Programming/Kotlin

코틀린(Kotlin) - 함수, 변수, 문자열템플릿 정리

JunsuKim 2021. 9. 12.
728x90

함수(Function)

fun main() {
    println("Hello World")
}
fun add(a: Int, b:Int): Int {
    return a + b
}
  • 코틀린에서의 함수는 "fun"이라는 키워드로 정리한다.
  • 파라미터는 이름 -> 타입 순으로 쓴다.
  • 함수의 파라미터가 없을 때에는 빈 괄호인 상태이다.
  • 함수의 파라미터는 이름을 입력한 후 콜론(:) 뒤에 타입을 입력한다.
  • 함수의 파라미터가 두 개 이상일 시 콤마(,)로 구분한다.
  • 코틀린에서의 함수는 최상위 수준에 속하므로 클래스 안에 함수를 넣을 필요가 없다.
  • return 타입은 함수 이름 뒤에 정의한다. 

볼록문이 본문인 함수

본문이 중괄호({ })로 묶인 함수를 블록문이 본문인 함수라고 한다.

fun divide(a: Int, b: Int) {
    return a / b
}

식이 본문인 함수

등호와 식으로 이루어진 함수를 식이 본문인 함수라고 하며, 마지막에 나온 값이 return값이 된다.

블록문이 본문인 함수에서 함수의 본문이 식 하나로 이뤄져 있다면 식이 본문인 함수로 표현할 수 있다.

코틀린은 루프를 제외한 대부분의 제어구조가 식이기 때문에 if, when, try, while 등 식으로 표현이 가능하다.

fun add(a: Int, b:Int): Int = a + b
fun max(a: Int, b: Int): Int = if(a > b) a else b

코틀린은 컴파일러가 식을 분석할 수 있어 타입 추론이 가능하여 반환 타입은 생략이 가능하다

fun add(a: Int, b: Int) = a + b

변수(Variable)

코틀린에서의 변수 선언은 두가지의 키워드가 있다.

val

  • 불변타입변수(immutable type)로 초기에 할당한 값을 변경할 수 없다.(java의 final함수와 동일)
  • val변수가 한번만 초기화되는 것이라면 상황에 따라 다른 값을 할당할 수 있다.
  • 컴파일러에서 타입 추론이 가능할 경우 생략 가능하다.
val name = "James"
// 위에서 이미 name에 값이 할당되었기 때문에 아래 코드처럼 값 할당이 불가능하다.(컴파일 에러 발생)
name = "David"

val count: Int = 3; // 타입추론이 가능하므로 val count = 3으로 생략 가능

val winner: String
if(win()) winner = "James"
else winner = "David"

var

  • 가변타입변수(mutable type)로 초기화 후 값을 변경할 수 있다.
  • 다른 타입의 값으로 변경할 수는 없지만 자바와 같이 형 변환을 통해 타입 변경이 가능하다.
var grade = "F"
grade = "A"
println(var) // A

grade = 1 //기존에 String타입이었으므로 Int의 값을 넣으려면 형변환을 해줘야한다.

문자열템플릿(String Template)

문자열템플릿을 통해 자바보다 간편하게 원하는 문자열을 생성 가능하다.

//java
String name = "James";
String grade = "A+";		
System.out.println(name + "grade : " + grade); // James grade : A+
//python
val name = "James"
var grade = "A+"
println("$name grade : $grade") // James grade : A+

자바와 같이 +연산을 사용하지 않아도 " "안에서 $기호로 시작하는 식이나 변수는 자동으로 문자열과 연결된다.

 

주의할 점)

$변수명 바로 뒤에 문자를 입력하는 경우 온점(.), 쉼표(,), 공백( )이 나오기까지 변수명으로 인식된다.

이때 변수명을 중괄호({ })로 감싸 해결할 수 있다.

val name = "James"
val grade = "A+"
println("$name grade : $grade입니다.") // grade입니다를 변수명으로 인식하여 오류가 난다.
println("$name grade : ${grade}입니다.") // 변수명을 중괄호({ })로 감싸주어 정상 작동한다.

문자열 템플릿은 식(expression)으로 중괄호 안에 있는 연산과 함수 호출도 가능하다.

fun main() {
    val radius = 2;
    println("사각형의 넓이 : ${SquareArea(radius)}")
}

fun squareArea(a: Int) = a*a
728x90

댓글