코틀린이란?
젯브래인사에서 만든 언어
다중 패러다임을 지원하는데
- 명령형 프로그래밍
- 함수형 프로그래밍
- 객체지향 프로그래밍
자바 상호 운용성과 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 |