Hello World!!
fun main(args: Array<String>) {
println("Hello, world!!!")
}
- 함수 선언 시: fun을 사용
- 자바와 달리 이름 뒤에 파라미터 타입 사용
- 함수를 정의할 수 있다.
- 배열 처리를 위한 문법은 없다.
- System.out.println 대신 println으로 간결해졌다.
- 줄 끝에 ;(세미 콜론)을 붙이지 않아도 된다.
함수를 만들어 보자
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}
더 간결하게 만들어 보자
fun max(a: Int, b: Int): Int = if (a > b) a else b
인텔리J
인텔리제이에선 반환 타입을 생략해도 된다. 코틀린이 정적 타입 지정 언어지만 컴파일러가 본문을 해석해 반환 타입을 알아서 지정해준다.
fun max(a: Int, b: Int) = if (a > b) a else b
변수
코틀린은 타입 지정을 생략하는 것이 일반적이다.
val result = 42 // 타입 생략
val result: Int = 42 // 타입 지정
초기화 식을 사용하지 않고 변수 선언 시에는 반드시 타입을 명시해야 한다.
val result: Int
result = 42
코틀린의 변수 타입은 두 가지가 있다.
- val - 변경 불가능한 참조 변수이다. 자바로 따지면 final 변수로 생각하면 된다.
- var - 변경 가능한 참조 변수이다.
기본적으로 모든 변수를 val 키워드로 선언하고 필요할 때만 var로 변경한다.
val는 정확히 한 번만 초기화 해야 한다.
val의 참조 자체는 불편이라도 참조가 가리키는 객체의 내부 값은 변경될 수 있다.
val languages = arrayListOf("Java")
languages.add("Kotlin")
var 키워드를 사용하면 변수의 값을 변경할 수 있지만 변수의 타입은 고정돼 바뀌지 않는다.
var result = 42
result = "no result" // 컴파일 오류 발생
문자열 형식 지정법
필요한 곳에 앞에 $만 넣고 변수를 넣으면 된다.
fun main() {
val hello= "frank"
println("hello $hello")
}
클래스 및 프로퍼티
기존 자바 클래스
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
코틀린으로 변환
코틀린의 기본 가시성은 public 으로 변경자를 생략해도 된다. val type으로 final 변수를 대체한다.
class Person(val name: String)
프로퍼티
class Person(
// 읽기 전용 프로퍼티로, 코틀린은 (비공개) 필드와 필드를 읽는 단순한 (공개) 게터를 만들어 낸다.
val name: String, //private final String name
// 쓸 수 있는 프로퍼티로, 코틀린은 (비공개)필드, (공개) 게터/세터를 만들어 낸다.
var isMarried: Boolean //private Boolean isMarried
)
Enum과 when
when은 자바에서 switc문을 대체할 수 있다.
Enum 또한 똑같이 사용 가능하다.
enum class Color(
val r: Int, val g: Int, val b: Int
) {
RED(255, 0, 0), ORANGE(255, 165, 0),
YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255),
INDIGO(75, 0, 130), VIOLET(238, 130, 238);
fun rgb() = (r * 256 + g) * 256 + b
}
when으로 enum 타입 다뤄보기
fun main() {
println(getMnemonic(Color.ORANGE))
}
fun getMnemonic(color: Color) =
when (color) {
Color.RED -> "Richard"
Color.ORANGE -> "Of"
Color.YELLOW -> "York"
Color.GREEN -> "Gave"
Color.BLUE -> "Battle"
Color.INDIGO -> "In"
Color.VIOLET -> "Vain"
}
enum class Color(
val r: Int, val g: Int, val b: Int
) {
RED(255, 0, 0), ORANGE(255, 165, 0),
YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255),
INDIGO(75, 0, 130), VIOLET(238, 130, 238);
fun rgb() = (r * 256 + g) * 256 + b
}
Of 출력 됌
when에 객체 사용해보기
fun main() {
println(mix(Color.BLUE,Color.INDIGO))
}
fun mix(c1: Color, c2: Color) =
when (setOf(c1, c2)) {
setOf(Color.RED, Color.YELLOW) -> Color.ORANGE
setOf(Color.YELLOW, Color.BLUE) -> Color.GREEN
setOf(Color.BLUE, Color.VIOLET) -> Color.INDIGO
else -> throw Exception("Dirty color")
}
스마트 캐스트: 타입 검사와 타입 캐스트를 동시에
코틀린에선 is로 타입 검사를 한다. 자바에선 instanceof이지만 is를 사용하면 캐스팅을 하지 않아도 자동으로 캐스팅해준다.
fun eval(e: Expr): Int {
if (e is Num) {
val n = e as Num
return n.value
}
if (e is Sum) {
return eval(e.right) + eval(e.left)
}
throw IllegalArgumentException("Unknown expression")
}
for문
fun main(args: Array<String>) {
for (i in 100 downTo 1 step 2) {
print(fizzBuzz(i))
}
}
In으로 컬렉션이나 원소 검사하기
fun recognize(c: Char) = when (c) {
in '0'..'9' -> "It's a digit!"
in 'a'..'z', in 'A'..'Z' -> "It's a letter!"
else -> "I don't know…"
}
예외 처리
// 조건이 참이면 number의 값이 초기화되고 거짓이면 초기화되지 않고 throw를 호출한다.
val number = try {
Integer.parseInt(reader.readLine())
} catch (e: NumberFormatException) {
return // 예외가 발생한 경우 catch 블록 다음의 코드는 실행되지 않는다.
}
'스프링 부트 > 코틀린' 카테고리의 다른 글
[코틀린] 인터페이스 사용법 (0) | 2022.03.09 |
---|---|
[코틀린] 데이터 클래스 data class (0) | 2022.03.09 |
[코틀린] for문, while문, Iterator 사용법 (0) | 2022.03.09 |
[코틀린] 코틀린이란 무엇일까? (0) | 2022.03.09 |
[코틀린] 맥북에 설치하고 스프링 Rest API로 CRUD 해보기 (2) | 2022.03.08 |
댓글