티스토리 뷰
지금으로부터 약 1년전인 2017년 5월 18일, 구글 I/O행사에서 구글이 코틀린(Kotlin)을 안드로이드 공식 언어로 채택하였습니다.
IOS의 경우 약 4년전 발표되었던 Swift가 간결한 문법을 내세우며 빠르게 Objective-C를 대체해 나가고 있던 상태였습니다. Swift와 문법적으로 비슷한 Kotlin 임에도 불구하고 개발자들이 Kotlin을 사용하지 않았던 이유는, 공식언어가 아닐 뿐더러 구글이 만든 언어도 아니었기 때문입니다.
Kotlin은 발표된지 약 7년정도가 되었으며, Kotlin/JVM Kotlin/JS Kotlin/Native 등 여러 환경에서 동작이 가능합니다.
Kotlin의 공식 블로그에 의하면, Kotlin의 목표는 Full-Stack 웹개발, Android와 IOS앱/임베디드와 IoT 등 다양한 플랫폼에서 Kotlin 하나로 개발할 수 있도록 하는 것이라고 합니다.
Kotlin의 장점으로 많이 꼽히는 이야기는 간결하며 안전성이 있고 다재다능며 호환성이 좋다는 등의 이야기가 많습니다. Java로 안드로이드 앱을 개발해보신 분이 있다면, 별것 없는 기능을 구현할 때에도 쓸때없이(?) 코드의 양이 많음을 느낄 수 있으셨을텐데, Kotlin에서는 그 코드의 양을 비약적으로 줄여주고 JAVA로 만들때 지겹게 개발자들을 괴롭히던 Null Pointer 예외에 대한 앱 팅김 현상도 많이 줄어들었다고 합니다.
기존에 JAVA로 앱개발을 하고 있던 개발자도, 요즘은 AndroidStudio에서 Kotlin을 지원해주기 때문에 원하는 언어로 앱을 개발할 수 있습니다.
Kotlin의 문법을 간단히 살펴보자면, Swift와 비슷함을 알 수 있습니다. 특히 Nullable만 보아도 Swift의 문법과 같은 방식이라는 것을 느낄 수 있습니다.
var nullable: String?
이런식으로 자바와는 달리 코틀린에서는 null이 기본값이 아니라서, null을 쓰고싶으면 Nullable로 선언을 해야합니다.
다음으로, 콜백함수의 경우에는 JAVA의 경우 interface를 상속받아 구현을 일일히 해줘야 하는 반면, 함수를 변수에 저장/다른 함수안에서 함수를 생성 할 수 있어 생성해 놓고 다음에 사용할 수 있다고 합니다.
JAVA 8 버전부터 익명함수 (람다)를 지원하지만, 안드로이드에서는 작년까지 JAVA7을 사용해왔기 때문에 익명함수를 만들거나 사용할 수 없었습니다.
public interface Callback {
void onSuccess(ResultType result);
void onError (Exception exception);
}
public void networdCall (Callback callback) {
try{
// 내용
callback.onSuccess(myResult);
}catch (e: Throwable) {
callback.onError(e);
}
}
//Usage:
networkCall(new Callback() {
public void onSuccess(ResultType result) {
// call 성공시 동작
}
public void onError(Exception e){
// call 실패시 동작
}
})
JAVA에서 콜백함수를 구현할 때는 위와 같이 구현합니다.
fun networkCall(onSuccess: (ResultType) -> Unit, onError: (Throwable) -> Unit){
try {
// 내용
onSuccess(myResult)
} catch(e: Throwable) {
onError(e)
}
}
//Usage:
networkCall(result -> {
// call 성공시 동작
}, error -> {
// call 실패시 동작
});
Kotlin에서는 콜백함수를 위와 같이 하나의 함수 안에서 만들 수 있습니다.
언뜻 보아도 문법 자체가 매우 간결해 지는 것을 볼 수 있습니다.
다음으로, DATA CLASS를 비교해보면, 자바에서는 GET/SET 메서드 등을 일일히 구현해야 하지만,
data class User(var name: String, var age: Int)
Kotlin에서는 data class로 만들면 위와 같은 한줄로 컴파일러가 GET/SET 및 toString,copy 함수를 알아서 생성한다고 합니다.
마지막으로, 가장 유용해보이는 (?) 특징은 JAVA에서는 볼수 없었던 Type aliases 입니다.
typealias MapOfLists = Map<String, List>
fun useMap(map: MapOfList) {
//...
}
이와 같이 Kotlin에서는 JAVA와 다르게 이름이 길거나 어려운 자료형에 마음대로 별명을 붙여 사용할 수 있습니다.
Kotlin의 단점 으로는 점점 나아지고는 있지만, 순수 JAVA 패키지보다 사이즈가 크며, 빌드시간이 JAVA에 비해 조금 느리다고 합니다.
그 이유는 Kotlin은 JAVA 6버전의 바이트코드를 대상으로 하기 때문에, JAVA8의 향상된 기능들을 제공하지 않고, Kotlin 표준 라이브러리가 JAVA 표준 라이브러리의 기능을 중복해서 제공하고 있기 때문 이라고 합니다.
'동아리 활동' 카테고리의 다른 글
[JAVA 기초] 클래스, 상속, 접근지시제어자, 오버라이드 (0) | 2018.05.20 |
---|---|
[JAVA 기초] 오버라이드(OverRide) 예제코드 + 소스코드 리뷰 (0) | 2018.05.20 |
[JAVA 기초] 상속을 활용한 자바 프로그램 예제 (0) | 2018.05.20 |
딥러닝을 활용한 제품 예시 3가지 (0) | 2018.05.13 |
선형회귀 (Linear Regression) 기본 소스코드 분석 (0) | 2018.05.13 |
- Total
- Today
- Yesterday
- 파이썬 숫자타입
- Grafana
- 파이썬 설치
- python3
- youtube_dl
- #baekjoon
- 파이썬 개발환경
- Python IDE
- 모니터링툴
- 파이썬이란
- Python Number
- 파이썬 IDE
- DB분석
- 파이썬
- 그라파나
- 파이썬3
- 유튜브 동영상 다운로드
- 파이썬 실행
- 모니터링도구
- release
- 파이썬 장점
- python3.9
- 알림센터
- 파이썬 문자열
- 윈도우 11
- 파이썬 개요
- python
- SJVA
- 파이썬 문자형
- 분석도구
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |