오늘부터 그동안 배운것들을 복습한다는 생각으로 하나씩 정리해나가려한다.
함께 공부하자는 마음으로 읽어나가주면 좋겠다.
Java 에서 Kotlin 으로
안드로이드 앱을 만드는 방법은 참 다양하다.
React-Native 나 Flutter 를 이용하여 하이브리드 방식으로 개발할 수도 있고
Java 나 Kotlin 을 이용하여 네이티브 방식으로 개발할 수도 있다.
혹은 최근에 핫한 웹앱 방식으로 개발할 수도 있다.
그 중에서도 우리는 Kotlin 에 주목해보려 한다.
사실 Kotlin 이 세상에 처음 모습을 드러낸 것은 꽤 오래된 일이다.
2011년 7월에 JetBrains 가 처음 Kotlin 을 발표하고나서 벌써 10년이라는 세월이 넘게 지났다.
하지만 안드로이드 공식 지원 언어가 된 것은 구글 I/O 2017 에서 이고 2019년에 안드로이드 공식 개발 언어가 되었으니
사실 우리가 안드로이드 개발로써 Kotlin 을 접한것은 그리 오래되지는 않은 것 같다.
왜 Kotlin 을 쓰는가?
컴공과에 입학하고 안드로이드 프로그래밍을 배우면서 내가 처음 접한건 Java 였다.
이미 선수과목으로 Java 를 배우고 올라왔기 때문에 그냥저냥 어렵지않게 다가왔던것같다.
졸업 후 처음 Kotlin 을 접하게 된건 그야말로 별거 아닌 계기였다.
'회사에서 많이 쓴다니까.. Jetpack이 어쩌구.. 요즘 대세는 어쩌구..'
그냥 취업이 잘 된다니까 Java 대신 Kotlin 을 공부했을 뿐이었다.
Kotlin 을 처음 배우기 시작할땐 Java 와 차이가 너무 나서 정말 많이 헷갈렸다.
학부생때 배웠던 언어들은 대부분 타입 선언 후 변수명을 선언하는데 { TypeParameter valueName }
Kotlin 은 mutable 선언 후 변수명 선언 후 타입 선언의 형태를 가지고있다. { val(var) valueName: TypeParameter }
처음엔 val 과 var 의 차이도 구분 못해서 맨날 고쳐쓰고 var 로 통일하고 난리도 아니었다.
무엇보다 Java 는 기본적으로 Nullable 인데에 반해 Kotlin 은 Nullable 을 명시적으로 선언해줘야 하는점에서 정말 많이 해맸다.
이 당시 작성한 코드를 보면 ! 가 얼마나 더럽고 지저분하고 많이 붙어있는지 읽기도 힘들 정도다.
어떻게 이 포트폴리오로 취업을 했는지 그저 신기할 따름이다.
https://github.com/eitu-jerry/ArcornBook
그리고 이건 다음 포스팅에서 다룰 예정이지만 ViewBinding 때문에도 정말 많이 해맸다.
물론 ViewBinding 은 Kotlin 이라서 어려웠던건 아니지만 Kotlin 을 배우면서 처음 접한 개념이라
당시에는 그냥 Kotlin 이라서 어려웠다고 생각했으니까말이다.
사실 위에 말한 어려웠던 점들은 지금에 와서는 모두 장점이라고 볼 수 있다.
mutable 을 간편하고 보기 쉽게 정의하는 점이나
명시적 Nullable 선언으로 NullPointerException 에 대응하기 더 좋은 점이라던가 말이다.
물론 dataClass 나 compose 등 장점이 더욱 많지만 그건 차차 다뤄가도록 하자.
마무리
이 포스팅에서 말하고 싶은건 "Kotlin 이 Java 보다 더 뛰어나니까 무조건 Kotlin 을 써!" 이게 절대 아니다.
단지 안드로이드 공식 개발 언어도 Kotlin 이고 Kotlin 에서만 사용할 수 있는 기술들도 많이 나오고있고
무엇보다 장래를 생각하면 Kotlin 을 시작하지 않을 이유가 없기 때문에
굳이 둘 중 하나를 추천해야한다면 Kotlin 을 추천하겠다는 이야기를 하고싶었다.
앞으로 이 심기일전 시리즈를 통해 스스로도 많이 복습하고 공부하고 미래를 위한 준비시간이 되길 바라며
이만 말 줄이도록 하겠다.
'Android(Kotlin)' 카테고리의 다른 글
심기일전 코틀린! - 02. Jetpack Compose (1) (0) | 2023.06.20 |
---|---|
심기일전 코틀린! - 01. ViewBinding (0) | 2023.06.12 |
안드로이드 레트로핏(Retrofit) (2) (0) | 2021.09.17 |
안드로이드 레트로핏(Retrofit) (1) (0) | 2021.07.29 |
HttpURLConnection (0) | 2021.07.29 |