코틀린이란?

젯브래인사에서 만든 언어

다중 패러다임을 지원하는데

  • 명령형 프로그래밍
  • 함수형 프로그래밍
  • 객체지향 프로그래밍

자바 상호 운용성과 Null 값이 없는게 가장 큰 두가지 특징이다.

 

기초 문법

함수들을 정의할땐, fun 키워드를 사용하고 function 을 줄인 단어이다.

var 와 val

var : 변할 수 있는 값 (variable) 의 약자, 재대입이 가능하다.

fun main() {
  var sum = 1
  sum = sum + 2
  sum += 3
  println(sum)
  // 6이 출력된다.
}

 

val : 값 (value) 의 약자로 단 한번만 초기화가 가능하다.

fun main() {
  val sum = 1
  sum = sum + 2
  // 3번째 줄에서 오류가 발생한다.
}

 

var, val 를 사용하지 않고 코틀린은 어떻게 사용할지 보고 타입을 알려준다.

이를 타입추론이라고 한다.

 

함수

일련의 동작을 묶어주고, 코드를 재사용하는 가장 기본적인 방법

fun 함수명(p1: 타입1, p2: 타입2): 반환타입 {
  로직
  return 반환타입
}

 

위 코드 블럭을 보게되면, p1 과 p2 는 함수에 전달할 파라미터다.

함수명, 팔라미터, 반환 타입을 합쳐 함수 시그니처라고 한다.

 

print, println 과 같이 코틀린이 정의한 함수표준 라이브러리 함수라고 부른다.

 

반환 타입이 없는 함수는 생략이 가능하고, 원한다면 Unit 으로 반환 타입이 없음을 명시할 수 있다.

fun hello() {
  println("hello")
}

fun hello(): Unit {
  println("hello")
}

 

함수 본문이 중괄호로 둘러쌓인 부분을 블록 본문이라 하는데, 하나의 식으로만 이루어진 경우 등호(=) 로 짧게 표현도 가능하다.

fun sumByThree(x: Int): Int = x + 3

 

문자열 템플릿

식발자 이름 앞에 $를 붙이면, 문자열 템플릿이 그 식별자의 내용을 알맞게 넣어준다.

$ 뒤에 프로그램 식별자로 인식되지 않으면 그대로 문자로 출력된다.

${} 식을 사용할 수도 있는데 ${if true 'a' else 'b'} 이렇게 표현도 가능하다.

fun main() {
  val answer = 17
  println("print $answer!")
} // print 17!

 

String 안에 큰따옴표 등의 특수 문자가 필요한 경우 역슬래시(\)를 사용하거나 String 리터럴을 사용해야 한다.

String 리터럴이란, """안녕하세요""" 이렇게 사용하는 문법이다.

 

루프와 범위

범위를 표현하는 법은 기본적으로 ..until 이다.

.. : 범위 양 값이 포함되는 범위이다.

until : until 다음에 오는 값을 제외한 범위이다.

fun main() {
  var sum = 0
  for (n in 1 .. 10) {
    sum += n
  }
  print(sum)
  // 55가 출력된다.
}

fun main() {
  var sum = 0
  for (n in 1 until 10) {
    sum += n
  }
  print(sum)
  // 45가 출력된다.
}

 

또한, 간격을 지정할 수 있는데 step 을 사용한다.

fun test(r: IntProgression) {
  for (i in r) {
    print("$i ")
  }
  print(" --> $r")
  println()
}

fun main() {
  test(1..5)
  test(0 until 5)
  test(5 downTo 1)
  test(0..9 step 2)
  test(0 until 10 step 3)
  test(9 downTo 2 step 3)
}

// 출력
// 1 2 3 4 5 --> 1..5
// 0 1 2 3 4 --> 0..4
// 5 4 3 2 1 --> 5 downTo 1 step 1
// 0 2 4 6 8 --> 0..8 step 2
// 0 3 6 9 --> 0..9 step 3
// 9 6 3 --> 9 downTo 3 step 3

 

IntProgression 을 출력한 결과를 보면 전달한 범위와 다른 경우가 많은 것에 주의해야 한다.

전달한 범위를 표준적인 형태로 변환해서 표현한다.

 

문자 범위도 가능하다.

fun test() {
  for (c in 'a'..'z') {
    print(c)
  }
}
// abcdefghijklmnopqrstuvwxyz

 

부동 소수점 범위에선 .. 만 사용이 가능했지만,

코틀린 1.8 부터는 반 열린 범위인 ..< 를 사용할 수 있다.

 

1.0 ..< 2.0 = 1.0 이상 2.0 미만인 범위를 만들어 낸다.

 

in

어떤 값이 주어진 범위 안에 들어 있는지 검사한다.

fun test() {
  val percent = 35
  print(0 <= percent && percent <= 100)
  print(percent in 0..100)
}

 

문자의 범위 안에 속하는지도 검사 가능하다.

fun test() {
  println('t' in "kotlin")
  println('a' in "kotlin")
}

 

식과 문

문은 효과를 발생시키지만 결과를 내놓지 않는다.

식은 항상 결과를 만들어낸다.

for 루프는 부수 효과를 위해서만 사용되기 때문에 변수에 대입할 수 없다.

if 는 식을 만들 수 있기 때문에 변수에 대입할 수 있다.

fun test() {
  val e = for(i in 1..10){}
  // 컴파일 오류가 발생한다.
  // For is not an expression, and only expressions are allowed here
}

fun test() {
  val e = if(1 > 0) 1 else 0
}

 

수타입

Int 를 다른 Int 로 나누면 Int 결과를 얻고 버려진다.

1/2 = 0

 

Double 을 사용해 연산하면 1.0/2 = 0.5 가 된다.

fun test() {
  val d1: Double = 3.0 + 2 / 5
  val d2: Double = 3 + 2.0 / 5
  
  println(d1)
  println(d2)
  // 3.0
  // 3.4
}

'개발서적' 카테고리의 다른 글

토프링 - 5장 정리  (0) 2022.10.09
토프링 - 4장 정리  (0) 2022.10.02
토프링 - 3장 정리  (0) 2022.09.26
토프링 - 2장 정리  (2) 2022.09.24
토프링 - 1장 정리  (0) 2022.09.23
복사했습니다!