Kotlin 기초
Kotlin
의 기초로서, 아래 항목을 확인해보겠다.
- 함수와 변수
- 클래스와 프로퍼티
- 선택 표현과 처리
- 이터레이션
- 예외 처리
함수와 변수 Function & Variable
함수
Kotlin 함수 특징
- 함수 선언은
fun
키워드를 사용한다. - 파라미터 이름 뒤에 타입을 지정한다.
- 자바와 달리 꼭 클래스 안에 함수를 넣어야 할 필요가 없다.
- 코틀린 표준 라이브러리의 함수는 여러 가지 표준 자바 라이브러리 함수를 간결하게 사용할 수 있도록 감싼
Wrapper
를 제공한다.eg. println()
- 세미콜론을 붙이지 않는다.
Kotlin 함수 기본 형식
식이 본문인 함수
변수
Kotlin 변수 특징
- 변수의 타입은 표기 생략 가능하다.
- 변경 가능한 변수(
variable
) 와 변경 불가능한 변수(value
) 로 나눠진다.var
: variable 이란 뜻으로, 변경 가능(mutable
)한 변수val
: value 이란 뜻으로, 변경 불가능한(immutable
) 변수
val
참조 자체는 불변일지라도, 그 참조가 가리키는 객체의 내부 값은 변경될 수 있다.
var
변수는 값을 변경할 수는 있지만, 타입은 고정되어 변경 불가능하다.
Kotlin 의 간편한 문자열 템플릿 string template
- 특정 변수를 선언하여 문자열 리터럴 안에 그 변수를 사용 가능하다.
- 해당 문법은
Java
코드로 변환하면,Java
의String
+
연산 처럼StringBuilder
를 사용한append
문자열 빌더 뒤에 추가되는 바이트 코드를 생성한다.
클래스와 프로퍼티 Class & Property
클래스
Java 와 Kotlin 의 클래스 선언 차이
Java
Kotlin
Kotlin
에서 클래스의 기본 가시성은public
이므로 생략 가능하다.Property
라는 개념을 통해서Java
에서의private
지시자와getter
와 같은 접근자 메소드를 생략이 가능하다.
프로퍼티
프로퍼티
property
란 개념을 활용하는 프레임워크 (or 기술 스펙) 이 많지만,Kotlin
에서는 다음과 같이 언어 기본 기능으로 제공한다.
Kotlin 의 프로퍼티 property
정의
Java
클래스의 필드field
와 접근자 메소드getter
를 대신하는 개념이다.- 물론, 커스텀 접근자 메소드를 별도 구현 가능하다.
Kotlin 소스코드 구조: 디렉토리와 패키지
Kotlin
에서는Java
와 달리 하나의 클래스안에 파일명과 동일한 클래스 하나만 존재할 필요는 없다.- 하나의
.kt
클래스 안에는 여러 가지의 클래스 집합이 존재 가능하며, 각 클래스 파일 별로import
또한 가능하다.
선택 표현과 처리
enum 클래스
기본 enum 클래스 형식
Kotlin
의enum
클래스도 역시,Java
문법과 동일하게 열거형 뿐만 아니라 프로퍼티나 메소드를 별도 정의하여 다양한 프로그래밍이 가능하다.
When
- 별도의
break
를 넣지 않아도 된다. - 한 분기 안에 여러 값을 매치 패턴으로 사용한다면,
,
콤마로 분리하여 정의 가능하다.
임의의 객체를 함께 사용하는 경우
인자 없는 when 정의
스마트 캐스트 smart cast
& when 조합
이터레이션 iteration
in
으로 컬렉션이나 범위의 원소 검사
예외 처리
Kotlin
에서는throws
절이 없다.checked exception
과unchecked exception
를 구별하지 않는다.Java
에서는 무의미한 예외를 던지지만, 정작 처리되지 않는 코드들이 많기 때문에Kotlin
에서는 이와 같은throws
절을 없앴다.try
는 식으로도 사용 가능하다.- 그래서,
catch
에서도 값 반환이 가능하다.
체크 예외 vs 언체크 예외
체크 예외
checked exception
RuntimException
을 상속하지 않는 예외 클래스- 체크 예외가 발생 가능한 메소드를 사용할 경우, 복구가 가능한 예외들이므로 반드시 예외 처리 코드 필요 (
catch
문을 통한 예외 처리 orthrows
예외 처리)IOException
,SQLException
등언체크 예외
unchecked exception
RuntimeException
을 상속한 예외 클래스- 명시적으로 예외 처리를 강제하지 않음
- 언체크 예외는 프로그램에 오류가 있을 때 발생하도록 의도된 예외 처리
NullPointerException
,IllegalArgumentException
등