Kotlin 등장
- IntelliJ를 만든 회사(JetBrains)에서 Kotlin을 만들기 시작
- 2011년 처음 개발이 시작됐고 2016년에 어느 정도 안정된 버전인 코틀린 1.0버전이 출시
- 구글IO 에서 2017년에 안드로이드 공식언어로 지정 후, 인기 폭발
Kotlin 개발이유가 JetBrains의 제품 70%는 Java로 나머지 30%가 마이크로소프트의 C#으로 대부분 이루어져 있었다. Java는 객체지향 언어의 선두자로 불릴 만큼 강력한 언어로 불리고 있지만, 이들이 봤을 때 Java는 유지보수 하기에 골칫거리인 언어로 생각되었다. 그 이유는 객체를 생성 할 때도 new라는 키워드를 붙여주고 세미콜론을 붙여주는 등 굳이 꼭 필요할까 라는 문법들도 있었고 단순한 기능을 구현함에 있어서도 많은 줄에 코드가 필요했던 것이 Java의 특징 이었기 때문이다.
그래서 그들은 더 모던하면서도 간결하고 가독성 높은 코드를 작성할 수 있는 언어가 있을까 라고 고민을 하기 시작했지만 자사 제품 70%가 Java로 이루어져 있어서 언어를 한번에 이제 변경하는 것은 너무나 큰 리스크를 감수해야 하는 문제점이 있었다. 그래서 그들은 이제 직접 이 Kotlin 이라는 언어를 Java와 100% 상호 운용하는 것을 목적으로 만들기 시작했다.
또한 Kotlin을 개발하면서 속도, 상호 운용성, 간결성에 초점을 맞추기 시작했다.
Kotlin 장점
1. 정적 타입 지정언어
컴파일 시점에 타입이 지정되기 때문에 컴파일러가 코드를 검증하고 컴파일하기 때문에 런타임 오류를 줄일 수 있다.
2. 타입 추론
변수 선언 시 타입을 지정하지 않아도 val (value)와 var(variable) 키워드만으로도 선언이 가능하다. 예를 들어서 이름을 할 때도 String 타입 일 때 String을 지정해주지 않고 value만 입력해도 된다. 또한 나이, 키 같은 Int형 경우에도 객체 Reference 타입이든 primitive이든 상관없이 val, var 키워드만으로 작성이 가능하다.
value는 java code로 변환했을 때 final 형태를 가지고 있다. 즉 한번 초기화되면 다른 값으로는 다시 초기화 될 수 없다.
variable은 final이 없기 때문에 새롭게 초기화가 계속 가능하다는 특징을 가지고 있다.
kotlin에서는 java와 다르게 field라는 개념을 사용하지 않고 property라고 부른다.
그 이유는 getter와 sette를 자동으로 만들어 주기 때문이다.
value 같은 경우 getter만 자동으로 만들어지고 variable은 getter와 setter를 모두 자동으로 만들어 준다.
3. null safety
Kotlin는 null을 다루는 방식이 명확하게 정해져 있기 때문에 null safety를 보장할 수 있다.
먼저 타입의 끝에 물음표를 붙여주면 nullable한 타입으로 바꿔줄 수 있다.
ex) var name: String? = null
4. Elvis 연산자
nullable한 값에 대해서 이 값이 null인 경우 어떤 값을 디폴트로 처리할 것인지 정할 수 있다.
fun main() {
var name: String? = null
print(name ?: "비회원")
}
위와 같은 경우에 name이 null 이면 비회원을 출력한다.
4. 간결하고 명확
그렇기 때문에 비교적 코드를 파악하기도 쉽다
5. Coroutine
Kotlin은 비동기적 코드를 쉽게 작성할 수 있도록 제공해주는 개념
* Kotlin 고유의 개념은 아니다. 여러 언어에서 지원을 해주는 비동기 기술 중의 하나
Coroutine은 Thread에서 실행되는 단위이며, 경량 Thread라고 불릴 만큼 훨씬 가볍다.
Kotlin이 어떻게 Java와 100% 상호 운영 가능할까?
Kotlin 코드를 컴파일하면 Java와 동일한 바이트 코드가 생성된다. 최종적으로 클래스 파일이라는 바이너리 코트가 생성이 되어 JVM Class Loader가 가져와서 실행을 시키면 결국 Kotlin이든 Java든 똑같은 언어로 인식을 한다.
참고
https://www.youtube.com/watch?v=eA8e18ddSms&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC
'개발 관련 강의 정리 > 10분 테코톡' 카테고리의 다른 글
[10분 테코톡] 포키의 Parameter와 Argument 정리 (0) | 2023.05.22 |
---|---|
[10분 테코톡] 이프의 성능 테스트 정리 (0) | 2023.05.21 |
[10분 깃코톡] 🍟 웨지의 Git 브랜치 전략 정리 (0) | 2023.05.19 |
[10분 테코톡] 결의 브라우저 렌더링 정리 (0) | 2023.05.18 |
[10분 테코톡] 히이로의 불변 정리 (0) | 2023.05.17 |
댓글