반응형

코틀린 시작하기

코틀린의 특징

  • Java와 형태는 다르나 의미가 유사한 문법을 가지고있기때문에 Java개발자라면 쉽게 학습이 가능하다.
  • 클래스 상속 없이 클래스에 도메인 특화 편의 메소드 추가가 가능하고, 오리지날 클래스의 메소드터럼 사용할 수 있다.
  • 델리게이션을 지원해서 상속보다 더 좋은 디자인이 가능하다. 델리게이션은 타입 안정적으로 사용할 수 있다.
  • if-else 문 대신 argument-matching문법을 사용할 수 있다.
  • 이미 존재하는 함수를 확장하는것이 쉽게 가능하다. 기본 파라미터 기능이 있다.
  • 명시적 인자 사용이 가능하다.
  • 연산자 오버로딩이 가능하다.
  • 우아하고, 표현력이 강하고, 간결하다.
  • C스타일의 프로시저, 스칼라 스타일의 스크립트, Java같은 객체지향형 코드, 스몰톡/얼랭과 같은 함수형 스타일 코드 모두 사용 가능하다.
  • 코루틴과 컨티뉴에이션으로 비동기 프로그래밍 영역에서 혁신을 이끌고 있다.

코틀린이 좋은 이유(와 나의 생각)

  • 다양한 프로그래밍 패러다임
    • 객체지향,함수형, 절차지향, 스크립트, 비동기 프로그래밍 등 다양한 프로그래밍 페러다임을 제공하기때문에 그중 상황에 맞는 방식을 사용하면된다.
    • 보일러 플레이트 코드가 없다.
    • 더 적은 코드로 동일한 일을 할 수 있다.
  • 타입 추론으로 사용하는 정적 타입
    • 강력한 타입 추론을 해주기때문에 시간낭비할 필요가 없다.
    • 타입 추론이 명확하지 않은 경우 개발자에게 타입 명시를 요청한다.
    • 널러블 / 널불가 타입이 구분되어있다.
  • 풀스택 개발을 위한 히나의 언어.
    • 한번의 코드 작성으로 백엔드, 모바일, 네이티브, 웹어셈블리 등의 코드로 컴파일(혹은 트랜스파일)이 가능하다.
    • ( 가능하긴하나 아직 적극적으로 사용하긴 조금 어려운 부분이 있지 않은가 하는 생각이 든다.)
  • 자연스럽고 우아함
    • 보일러플레이트 코드가 필요 없다.
    • 세미콜론이 옵셔널이다
    • 인픽스 어노테이션 사용이 가능하다.

코틀린 설치 및 사용

  • 인텔리J를 사용중이라면 함게 설치되어있다.
  • 별도로 설치를 원하면 https://kotlinlang.org 에서 다운로드 및 설치할 수 있다. 자세한 설치방법은 공식 홈페이지를 참고하도록하자.

설치 확인

cli에서 다음과 같이

kotlinc-jvm -version

본인의 경우는
info: kotlinc-jvm 1.4.31 (JRE 15.0.2+7)
이렇게 출력이 나왔다.

우리가 늘 하는 Hello World 만들기

적절한 폴더에 hello.kt라는 파일을 만들고 아래와 같이 코드를 넣어본다.

//hello.kt
fun main() = println("Hello World")

cli로 실행시키기

kotlinc-jvm hello.kt -d hello.jar

위 명령어를 실행시키면 hello.kt 코틀린 코틀린코드를 Java바이트 코드로 컴파일시키고 hello.jar를 만들어둔다.
jar를 java툴을 이용해서 실행시키면된다.

java -classpath hello.jar HelloKt

hello.kt는 main함수만 가지고있고, 클래스가 아니기때문에 코틀린 컴파일러가 자동으로 확장자를 제거한 파일 이름을 가지고 Kt라는 접미사를 추가한 클래스이름을 만든다.

실행결과는 당연히
Hello World가 나온다.

classpath cli옵션을 열거하지않고, jar옵션으로 실행 가능하다. main()함소를 찾을때 코틀린 컴파일러가 jar 파일에 Main-Class 매니패스트 어트리뷰트를 추가한다.

java -jar hello.jar

현재는 코틀린 스탠다드 라이브러리를 사용하지 않았기 때문에 실행이 잘 되지만 코틀린 스탠다드 라이브러리의 클래스와 함수들을 사용하는 경우 java툴로만 실행한다면 java.lang.NoClassDefFoundError예외가 발생하면서 실패한다. 이를 방지하기위해서는 kotlin-stdlib.jar파일을 클래스패스에 추가해줘야한다.

kotlinc-jvm hello.kt -d hello.jar
java -classpath hello.jar:$KOTLIN_PATH/lib/kotlin-stdlib.jar HelloKt
//위도우인경우 %KOTLIN_PATH% 를 사용, 콜론(:)이 아닌 세미콜론(;)으로 구문해야한다. 등록된 환경변수를 사용하면된다.

ide로 실행하기

코틀린 공식 홈페이지 및 각 ide의 홈페이지와 라이브러리를 참고하면 될거같다. 여기서는 굳이 언급하지 않도록하겠다.

REPL실험

cli에서 kotlinc-jvm 이라고 입력하면 REPL이 실행된다.
아래와같이 조금 사용해보자.

//kotlinc-jvm
Welcome to Kotlin version 1.4.31 (JRE 15.0.2+7)
Type :help for help, :quit for quit
>>> 7 + 5
res0: kotlin.Int = 12
>>> val list = listOf(1,2,3)
>>> list.map{ it * 2}
res2: kotlin.collections.List<kotlin.Int> = [2, 4, 6]
>>>

종료할땐 컨트롤D 를 사용하거나 :quit 라고 입력한다.

REPL에선 이미 존재하는 코드를 불러와서 실행시킬수도 있다.

kotlinc-jvm

Welcome to Kotlin version 1.4.31 (JRE 15.0.2+7)
Type :help for help, :quit for quit
>>> :load hello.kt
>>> main()
Hello World!
>>>

이렇게 REPL에선 존재하는 코드를 컴파일 없이 실행할 수 있다.

스크립트로 실행하기

코틀린은 스크립트로 사용가능하다. 여타 스크립트에 비해서 좋은점이라면 스크립트를 위해 따로 문법 공부를 할 필요가 없다는 점이 있을것이고, 코틀린 스크립트는 문법 오류가 있는 경우 스크립트 실행 전에 실패를하기때문에 컴파일 후 칠행하는것 만큼 안전하다.

연습을 위해서 디렉토리에서 .kts 확장자를 가진파일을 리스팅 하는 스크립트를 만들어보자.

//listktsfile.kts
java.io.File(".")
    .walk()
    .filter { file -> file.extension =="kts" }
    .forEach { println(it) }

지금까지 작성한 코틀린 파일과 별반 타이가 없다. 차이점이라면 확장자가 kts라는것 뿐이다.
이 코드는 JDK의 java.io 패키지의 File 클래스를 사용한다. 그리고 코틀린이 해당 클래스에 추가한 확장 함수를 사용한다.
현재 디렉토리에 있는 모든 파일중 파일명이 kts로 끝나는 파일만 걸러내서 잡고 해당 파일의 경로를 출력한다.

스크립트 실행을 위해선 kotlinc-jvm 커맨드를 사용한다. -script옵션을 통해서 컴파일 대신 스크립트로써 즉시 실행시킨다.

kotlinc-jvm -script listktsfiles.kts

Unix-Like 시스템을 사용한다면 kotlinc-jvm -script라는 접미어 대신 셔뱅(shebang)을 사용하면된다.

greeting.kts

#!/ust/bin/env kotlin-jvm -script
println("hello")

실행을위해 chmod +x greeting.kts 명령어로 파일에 실행권한을 주고 아래의 커맨드라인을 통해 스크립트를 바로 시킬 수있다.

./greeting.kts

시스템에 따라 /usr/bin/env 대신 kotlinc-jvm이 위치한 전체경로를 써줘야 하는 경우도 있다.

다른 타깃으로 컴파일하기

코틀린은 여러개의 타깃으로 컴피일이 가능한 언어이다.

  • 안드로이드
  • javascript로 트랜스파일
  • 네이티브 타깃(iOS, Linux, MacOS, Windows 등 네이티브 타겟)
  • WebAssembly

어떤 옵션을 선택해야할까?

코틀린은 실행시킬때 특정 옵션 설정을 강제하지 않기때문에 개발자의 요구사항과 선호도에 따라 실행옵션을 선택하면된다.
아래는 옵션 선택시 고려해야할 사항이다.

  • JVM에서 실행시키거나 Java또는 다른 언어와 함께사용하는경우 --> kotlinc-jvm을 이용한다.
  • 여러개의 코틀린 파일을 통합해 하나의 코틀린 프로그램으로 실행시켜야한다 -> kotlin툴을 이용한다.
  • 시스템레벨 / 백엔드 태스크 수형해야한다 -> 스크립트

정리

코틀린의 특징에 대해 알아보았고, 간단한 코드를 작성해보았다. 다음번엔 코틀린의 특징을 좀더 자세하게 알아보고 좀더 많은 코드를 작성해본다.

 

영진닷컴 - 다재다능 코틀린 프로그래밍 - 스프링 분철선택

COUPANG

www.coupang.com

쿠팡 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있습니다.

반응형

'웹프로그래밍 > Kotlin' 카테고리의 다른 글

[KOTLIN] CLASS  (0) 2023.02.25
[코틀린KOTLIN 정리]0. 들어가며  (0) 2021.06.02
반응형

앞으로 코틀린에 대한 정리 글을 좀 올려보려합니다. 
정리는 영진닷컴에서 출판한 다재다능 코틀린 프로그래밍 서적을 기반으로 제가 이해한 내용을 정리합니다. 

 

 

 

 

영진닷컴 - 다재다능 코틀린 프로그래밍 - 스프링 분철선택

COUPANG

www.coupang.com

쿠팡 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있습니다.

반응형

'웹프로그래밍 > Kotlin' 카테고리의 다른 글

[KOTLIN] CLASS  (0) 2023.02.25
[코틀린 KOTLIN 정리]01.코틀린 시작하기  (0) 2021.06.02
반응형

2021.06.02

 아침에 일어나자마자 부재중전화를 확인했다. 헤드헌터님이었다. 어제 최종면접을 봤기때문에 관련된 내용일 것이라고 생각했다. 산책을 나가서 전화를 걸어봤더니 합격을 했다고 말씀 해 주셨다. 이렇게 의사결정이 빠르게 일어날지는 몰랐다. 하지만 합격했다고 끝난게 아니다. 나는 제주도에 거주중이고, 처우 협상을 통해서 최대한 재택근무가 가능하도록 해야한다. 헤드헌터님이 협상을 잘 해주면 좋겠다.

 오늘은 서부두에 볼락 낚시를 다녀왔다. 결과는 제목처럼 꽝이었다. 요즘 고기가 진짜 안잡힌다. 영등철도 끝난지 한참인데 추울때보다 더 안나오니 무슨일인지를 모르겠다. 빨리 뭘 좀 잡아야 영상을 올릴텐데

반응형

'2021년도 > step1.제주' 카테고리의 다른 글

day174. 블로그 글 하나쓰고 아무것도 못하겠는날  (0) 2021.06.04
day173. 중경삼림  (0) 2021.06.04
day171. 최종면접  (0) 2021.06.01
day170. 전화 알바  (0) 2021.06.01
day169. 서부두 광어 루어 낚시  (0) 2021.05.30
반응형

2021.06.01

 오늘 드디어 최종면접을 봤다. 솔직히 약간은 안되도 그만이란 생각이 있어서 마음 편해봤다. 하지만 면접이라는게 아무리 마음 편하게 봐도 당연히 약간은 긴장되기 마련이다. 

 인성면접일줄 알았는데 의외로 기술들에 대한 질문도 많이 했고, 아키텍처에대한 질문도 있고 기술적인 질문이 많았다. 연차가 어느정도 되니까 이제는 설계에 대한 질문이 많이 들어오나 싶었다. 공부를 좀 더 많이해야겠다. 

 면접 결과야 어찌되던, 면접하면서 공부할것들에 대한 키워드를 많이 얻었다. 공부를 열심히 해야겠다.

반응형

'2021년도 > step1.제주' 카테고리의 다른 글

day173. 중경삼림  (0) 2021.06.04
day172. 최종면접 합격, 낚시 꽝  (0) 2021.06.02
day170. 전화 알바  (0) 2021.06.01
day169. 서부두 광어 루어 낚시  (0) 2021.05.30
day168.리트코드 2문제, 알바준비  (0) 2021.05.29
반응형

2021.05.31 

 오늘은 왜인지 엄청나게 늦게 일어났다. 일어나서는 바로 건면을 사러갔다왔다. 안랙술과 건면을 먹고 3시부터는 전화알바를했다. 한시간정도 통화를 했는데 다행이 내가 잘 알려줄 수 있는것만 물어보더라. 잘알려줬다.
 내일은 면접이 있으니까 잘 봐야겠다.

반응형
반응형

2021.05.30

 오늘은 일어나자마자 안랙술이 해준 맛있는 PB&B스무디를 먹었다. 너무너무 맛있었다. 
그리고 점심으로는 치킨오트밀을 먹었다. 이것도 역시 너무맛있었다. 

 그리고 바로 낚시를 갔다. 서부두에서 4시간가량 광어를 노려봤다. 지그헤드, 스푼, 프리리그, 다운샷 여러 채비를 써봤지만 오늘은 입질도 없었다. 여러분 서부두엔 광어가 없어요 가지마세요.... 가 아니고 내가 못 잡은거겠지. 다음번엔 꼭 잡으리라.

반응형

'2021년도 > step1.제주' 카테고리의 다른 글

day171. 최종면접  (0) 2021.06.01
day170. 전화 알바  (0) 2021.06.01
day168.리트코드 2문제, 알바준비  (0) 2021.05.29
day167. 리트코드, 영상편집  (0) 2021.05.28
day166. 인터뷰 합격  (0) 2021.05.27
반응형

2021.05.29

 오늘은 리트코드 두문제를 풀고, 알바준비를했다. 오늘의 이지는 너무 이지였고, 미디움도 이지에 가까운 이지였다.

점심으로는 카레 파스타를 먹었는데 너무 맛있었다.

반응형

'2021년도 > step1.제주' 카테고리의 다른 글

day170. 전화 알바  (0) 2021.06.01
day169. 서부두 광어 루어 낚시  (0) 2021.05.30
day167. 리트코드, 영상편집  (0) 2021.05.28
day166. 인터뷰 합격  (0) 2021.05.27
day165. 리트코드1개  (0) 2021.05.27
반응형

2021.05.28

 오늘은 잘 일어나서 리트코드 이지 하나 미들 하나 풀고 영상 편집해서 올렸다. 
오늘 푼 미들은 미들중에서도 엄청 쉬운 미들이었다. 내생각에 이정도면 이지가 아닌가 하는 생각이 들 정도였다. 풀고나니까 성능을 올릴만한 방법이 보이긴 했는데 거기까진 좀 귀찮아서 안했다.다음부터는 성능도 좀 신경 써 가면서 코딩을 해야겠다.

 엄청 귀찮았지만 작년에 찍어둔 영상들을 편집해서 올렸다. 하고니나 잘했다는 생각이 든다. 이제 노트북 용량이 조금씩 여유가 생기는거같다.

반응형

'2021년도 > step1.제주' 카테고리의 다른 글

day169. 서부두 광어 루어 낚시  (0) 2021.05.30
day168.리트코드 2문제, 알바준비  (0) 2021.05.29
day166. 인터뷰 합격  (0) 2021.05.27
day165. 리트코드1개  (0) 2021.05.27
day164.리트코드 2개  (0) 2021.05.26
반응형

2021.05.27 

 이터뷰에 합격했다고 연락이왔다. 회사가 사옥 이전을 하느라 결과를 빨리 못줘서 미안하단다. CTO면접을 다음주에 보기로했다. 저번 인터뷰때 물어본 질문들 다시한번 복기 해봐야겠다.

 오늘부터는 리트코드를 이지 1 미들 1 하나씩 풀었다. 이지는 별 문제없이 넘어갔고, 미들의 경우는 무식한 방법으로는 잘 풀었는데 효율적인 방법을 사용하려니 비트연산이 들어가더라. 비트연산은 잘 안해서 좀 했갈리는데 관련된 문제들을 쉬운것부터 좀 풀어봐야겠다.

오늘도 편집은 못했다. 내일은 꼭 해야지.

오늘은 엄청 오랫만에 안랙술과 동문시장에 다녀왔다. 맑은날 돌아다니니 즐거웠다. 앞으로도 이렇게 다닐 수 있으며 좋겠다. 여름이 되면 같이 해변도 갈 수 있으면 얼마나 좋을까.

그리고 가이드포인트로부터 전화자문 요청을 받았는데 이사람들 일처리하는게 조금 이상한거같다. 자세히 알아보고 해봐야겠다.

반응형
반응형

2021.05.26

 오늘은 어제보다 못한 하루를 보낸거같다. 너무 늦게 일어났고, 일어난 이후에도 폰게임만했다. 너무 폰게임만하면서 쓸모없는 시간을 보내는거 같아서 몇개를 지웠는데 다시 몇개를 다운받아서 하고있다. 참나. 좀 스스로 시간관리를 잘 해야겠다.

 오늘은 리트코드1개를  풀었다. 어제까지한것들은 쉬움 난이도중에서도 난이도가 좀 높은 축이었던거같다. 오늘은 확실히 빨리 끝났다. 앞으로는 쉬움한개, 중간 한개를 풀어야겠다.

반응형

+ Recent posts