1. Hello, World! 찍기
fun main(args:Array<String>){
println("Hello, World!")
}
-> 함수를 정의할 때 fun을 사용
2. 반환 값의 타입이 있는 경우
fun main(a: Int, b:Int) : Int {
return if (a >b) a else b
}
- main -> 함수 이름
- (a: Int, b:Int) -> 파라미터 목록
- : Int -> 반환 타입
- return if (a>b) a else b -> 함수 본문
3. 코틀린에서 문(statement)과 식(expression)의 구분
- 코틀린에서 if는 문이다.
- 식 : 값을 만들어 내며 다른 식의 하위 요소를 계산에 참여할 수 있음
- 문 : 자신을 둘러싸고 있는 가장 안쪽 블록의 최상위 요소로 존재, 아무런 값을 만들어내지 않는다는 차이가 있음
- 블록이 본문인 함수 : 본문이 중괄호로 둘러싸인 함수
- 식이 본문인 함수 : 등호와 식으로 이뤄진 함수, 사용자가 반환 타입을 적지 않아도 컴파일러가 함수 본문 식을 분석해서 결과 타입을 함수 반환 타입으로 정해줌
- 타입 추론(Type inference) : 컴파일러가 타입을 분석해 프로그래머 대신 프로그램 구성 요소의 타입을 정해주는 기능
4. 변수 val, var
- val : 변경 불가능한 변수, 재대입 불가능, 참조 자체는 불변이지만 그 참조가 가리키는 객체의 내부 값은 변경될 수 있음(읽기 전용 변수)
- var : 변경 가능한 변수
-> 기본적으로는 모든 변수를 val로 선언하고, 필요할 때 var로 변경
5. 문자열 템플릿
fun main(args:Array<String>){
val name = if (args.size > 0) args[0] else "Kotlin"
println("Hello, $name!")
}
- 문자열 리터럴안에서 name 변수를 사용. 필요한 곳에 변수를 넣되 변수 앞에 $를 추가해야 함
- $ 문자를 문자열에 넣고 싶으면 \(역슬래시)를 사용해야 함
- 복잡한 식도 중괄호({})로 문자열 템플릿 안에 넣을 수 있음 ex) ${args[0]}
- 문자열 템플릿을 사용하면 문자열을 연결하지 않아도 되므로 코드가 간결해짐
6. 값 객체 ( value object ) : 코드가 없이 데이터만 저장하는 클래스
ex)
class Person(val name: String)
-> 클래스를 간결하게 표현
7. 프로퍼티(Property)
- 클래스 : 데이터를 캡슐화(encapsulate)하고, 캡슐화한 데이터를 다루는 코드를 한 주체 아래 가두는 것
- 필드 : 데이터를 저장하는 장소
- 프로퍼티 : 필드와 접근자를 묶어 부름, 프로퍼티를 선언할 때 앞에 val or var를 사용
(1) val : 읽기 전용
(2) var : 변경 가능
(3) 프로퍼티의 값을 저장하기 위한 필드를 프로퍼티를 뒷받침하는 필드(backing field)라고 함
8. 코틀린 소스코드 구조
- 패키지(package) : 파일 안에 있는 모든 선언(클래스, 함수, 프로퍼티 등)이 해당 패키지에 들어간다
( 다른 패키지에 정의한 선언을 사용하려면 임포트를 통해 선언을 불러와야함 )
ex)
9. enum 클래스 정의
- 코틀린에서 enum은 소프트 키워드라 부르고, 클래스 안에 프로퍼티나 메소드를 정의할 수 있다.
enum class Color(
val r:Int, val g:Int, val b:int
){
RED(255,0,0), ORANGE(255,165,0);
fun rgb() = (r*256+g)*256+b
}
* val r:Int, val g:Int, val b:int : 상수의 프로퍼티 정의
* RED(255,0,0), ORANGE(255,165,0); : 코틀린에서 유일하게 세미콜론이 필수인 부분, enum 상수 목록과 메소드 정의 사이에 세미콜른을 넣어야한다.
* fun rgb() = (r*256+g)*256+b : enum 클래스 안에서 메소드를 정의한다
10. when
- when 식의 인자로 임의의 객체를 허용함
- when 식은 인자 값과 매치하는 조건 값을 찾을 때까지 각 분기를 검사함
- 인자가 없는 when 식을 사용하면 불필요한 객체 생성을 막을 수 있음
11. 스마트 캐스트(smart cast)
- 스마트 캐스트 : 어떤 변수가 원하는 타입인지 일단 is로 검사 -> 캐스팅 하지 않아도 마치 처음부터 그 변수가 원하는 타입으로 선언된 것처럼 사용할 수 있는것 ( 실제로는 컴파일러가 캐스팅을 수행해줌 ) => 스마트 캐스트를 활용해 자동으로 타입을 바꿔줌
- 원하는 타입으로 명시적으로 타입 캐스팅을 하려면 as 를 사용한다.
12. if와 when
- if와 when 모두 분기에 블록을 사용할 수 있다. 그럴 경우 마지막 문장이 블록 전체의 결과가 된다.
- if는 코틀린에서 식이며, 값음 나들어낸다
13. 이터레이션(iteration)
- Iterator은 모든 요소들의 컬렉션을 하나씩 처리할때 유용하게 사용한다.
- 수열(progerssion) : 어떤 범위에 속한 값을 일정한 순서대로 이터레이션 하는 경우
- until 함수를 사용하여 반만 닫힌 범위(반폐구간)에 대해 이터레이션
14. in
- in : 연산자를 사용해 어떤 값이 범위에 속하는지 검사할 수 있음
- !in : 어떤 값이 범위에 속하지 않는지 검사할 수 있음
15. 예외처리
- try, catch, finally 절을 사용
- try : try의 값을 변수에 대입할 수 있음, 본문을 중괄호{}로 둘러싸야 함, 여러문장이 있을 경우 마지막 식의 값이 전체 결과 값
- catch: try에서 예외가 발생하고 잡히면 그 예외에 해당하는catch 블록의 값이 결과임
참고
https://kotlinlang.org/docs/iterators.html
참고
kotlin in Action 2장
'Kotlin' 카테고리의 다른 글
[Kotlin] Kotlin in Action 1장. 코틀린이란 무엇이며, 왜 필요한가? (0) | 2023.03.09 |
---|---|
[Kotlin] 코틀린 리스트 생성 방법 (0) | 2022.03.30 |
[Kotlin] invoke 란? (0) | 2022.03.03 |