💡 Kotlin
- 2017년 구글이 안드로이드 공식 언어로 채택한 언어이다.
- 안드로이드 앱, 서버측 앱등을 개발하는데 사용한다.
간결성, 생산성
- 코틀린은 자바보다 더 간결하고 직관적이며 읽고 쓰는 시간이 빠르다
- 자바에 존재하는 여러 준비코드(생성자 등)을 묵시적으로 제공한다.
- 기능이 다양한 표준 라이브러리를 제공하며 반복 코드를 줄일 수 있다.
- 코틀린에서 함수는 일급 객체이며 고차 함수로 사용이 가능하다.
- 타입추론 : 할당되는 값을 알아서 추론해준다.
안정성
런타임 에러보다 컴파일 타임 에러를 통해 디버깅이 용이하다.
- 모든 타입 + 기본형 타입도 클래스 타입이다. (Nullable을 위해)
- 코틀린은 Null이 될 수 없는 값을 추적한다.
- 실행 시점에 NPE가 발생할 수 있는 연산을 가진 코드를 금지한다.
- 자바에서 객체의 Null 방어로직을 작성하는데 사용되는 많은 코드라인을 생략 가능하다.
Nullable Type
- Nullable Type을 통해 Null이 될 수 있는 타입을 명시적으로 표현 가능하다.
- 즉, Nullable이 아닌 변수이 Null을 넣으면 컴파일 타임에 에러를 발생시킨다.
Null Check
자바에서 NPE를 방지하기 위해 Optional이나 Catch를 사용하던 것들 아래와 같은 연산자로 대체 가능하다.
- null safe operator (?.) : Null이 아님을 확인 후 안전하게 호출
- elvis operator (?:) : Null에 대한 직접적인 처리
상호 운용성
자바와 100% 호환되며, 기존 라이브러리를 활용할 수 있어서 기존의 자바코드를 최대한 활용 가능하다.
- Java 클래스 <-> Kotlin 클래스 서로 호환 가능
- 라이브러리가 어떤 API를 제공하던지 코틀린에서 그 API를 활용 가능
도구 친화적
코틀린은 IntelliJ의 제작사인 JetBrains가 설계한 언어라 IntelliJ에서 Kotlin을 가장 잘 지원한다.
💡 코드 비교
- 주석의 표현방법은 자바와 동일하다.
- 코틀린은 각 문장의 마지막에 세미콜론(;)이 없다.
- 클래스를 상속할때 extends 대신 콜론(:)을 사용한다.
- 콜론(:) 뒤에 부모 클래스 명이 오고 괄호를 붙이면 기본 생성자를 호출한다.
함수 정의
- 함수를 정의할 때 fun 키워드를 붙이며, 상위 클래스 재정의시 override fun의 형식으로 사용한다.
- 함수 정의 시 소괄호 안에 파라미터를 넣을 수 있다.
- 자바는 함수에 파라미터를 넣을떄 자료형과 파라미터 명을 넣어준다.
- 반면에 코틀린은 파라미터명 : 자료형 순이다.
- 이것은 변수를 선언할때도 마찬가지이다.
- 물음표(?) 기호는 변수나 파라미터에 Null을 허용한다는 의미이다.
자바
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
코틀린
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layOut.activity_main)
}
}
생성자
코틀린에서의 생성자는 기본적으로 프로퍼티의 선언과 초기화를 동시에 하기 때문에 코드가 간결하다.
프로퍼티 선언으로 만들어진 모든 필드를 포함하는 생성자와,
초기화 해준 필드를 제외한 생성자롤 따로 선언하지 않아도 사용이 가능하다.
자바
@Getter @Builder
@AllArgsConstructor
public class PageOptionRequest {
@NotNull(message = "actionType is Required!")
private String actionType;
@Nullable
private String os;
public PageOptionRequest(String actionType) {
this.actionType = actionType;
this.os = "ios";
}
}
코틀린
class PageOptionRequest(
val actionType: String,
val os: String? = "ios"
)
Data Class
데이터 보관 목적으로 만들어진 클래스이다. (Spring의 DTO로 활용하면 편리하다.)
toString(), hashCode(), equals(), copy()를 기본으로 제공하며 이에 대한 Boilerplate Code를 생략 가능하다.
자바
@EqualsAndAHashCode
@ToString
public class abc {
...
}
코틀린
data class PageOptionRequest(
...
)
문자열 처리
- 문자열 템플릿
- 여러줄의 문자열을 """을 이용해 하나의 문자열로 구성 가능
- trimIndent와 같은 문자열 사용을 편하게 하는 메서드 존재
자바
private final String GET_USER_NAME = ""
+ "SELECT DISTINCT user_name\n"
+ "FROM tbl\n"
+ "WHERE user_id = 3";
코틀린
const val GET_USER_NAME = """
SELECT DISTINCT user_name
FROM tbl
WHERE user_id = 3
""".trimIndent()
분기 처리
- return 값이 있는 if expression : 코틀린에서는 자바와 달리 조건문을 return 값이 있는 '식'으로 제공한다.
- switch보다 간결한 when
Null 처리
코틀린의 최대장점이다. 자바에서 Optional로 만드는 과정을 생략할 수 있어 간결하다.
자바
Optional.ofNullable(optionRequest.getOs())
.map(data -> " and os_type= " + data).orElse("");
코틀린
optionRequest.os?.let { data -> "and os_type=$data" } ?: ""
'Languages > Kotlin' 카테고리의 다른 글
Kotlin Controll Flow (0) | 2023.03.29 |
---|---|
[Operator Overloading] 이항 & 단항 산술 연산자 오버로딩 (0) | 2023.03.29 |
[Operator Overloading] 복합 대입 & 비교 연산자 오버로딩 (0) | 2023.03.29 |
Kotlin Basic Types (0) | 2023.03.26 |
Kotlin Basic Syntax (0) | 2023.03.26 |