[Kotlin In Action] 1. 코틀린이란?


셀에서 코틀린 스터디를 시작했다..

굳건했던 자바대원군들이 코틀린으로 대거 갈아타는 움직임을 보이고있기도하고.. (여기서 느끼는바가 좀 있었음..)

함수형프로그래밍이 거스를수없는 대세처럼 오고있기도하고..

모던자바인액션을 파면서 긴역사를 가진 자바같은경우 결국 배포를 빨리하고 흐름을 쫓아가려고 새로운기능들을 추가해도 한계가 있다고 느낀부분이 있기때문이다.

python같이 러닝커브가 낮은 언어들이 시장에서 상위권으로 치고올라온지 꽤 됐고.. kotlin같은경우 안드로이드진영에서는 구글에서도 꽤 밀어주면서 그런 싹수가 보인다.

어쨌든 뭐든 공부해둬서 나쁠건 없다. 일단 해서 프로젝트도 몇개해보고.. 나중에가서 대세가 아니면….. 레거시되는거지뭐…..ㅎㅎ… 대세가 되면.. 잘배웠다 하는거고 ㅎㅅㅎ

어쨌든 굿바이 모던자바인액션….(아직 블로그 글로 정리는 다 못했지만….어쨋든 굿바이)

헬로우 코틀린앤액션….

제일 먼저,,, 코틀린이 뭐고 왜필요한지 알아보자

이 친구는 자바플랫폼에서 돌아가는 새로운 프로그래밍 언어.

요즘 이친구가 왜 핫한지 한번 알아보자

1) 코틀린 특성

1-1) 대상플랫폼

자바가 실행되는 모든곳

  • 서버상의 코드 (backend)
  • 안드로이드 디바이스에서 실행되늰 모바일 어플리케이션

1-2) 정적 타입 지정언어

  • 정적타입 지정언어 : C+, C, Java, Kotlin 등 처럼 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증
  • 동적타입 지정언어 : Python, javascript, Ruby 처럼 타입과 관계없이 모든 값을 변수에 넣을 수 있고 메소드나 필드 접근에 대한 검증이 실행시점에 일어나며 그에따라 코드가 더 짧아지고 데이터 구조를 유연하게 생성 가능. 다만 이름을 잘못입력하는 실수도 컴파일시 걸러내지 못하고 실행시점에 오류발생.

1-3) 정적타입지정의 장점

  • 성능 : 실행시점에 어떤 메소드를 호출하는지 알아내는 과정이 생략되어 메소드 호출이 더 빠름
  • 신뢰성 : 컴파일러가 프로글매의 정확성을 검증
  • 유지보수성 : 코드에서 다루는 객체가 어떤 타입인지 알 수 있기때문에 가독성 ⬆️
  • 도구지원 : 안전한 리팩토링, 코드 자동완성, IDE 기능 지원.

1-4) 함수형프로그래밍 / 객체지향 프로그래밍

코틀린은 함수형/객체지향프로그래밍 모두 지원. 프로그래머는 이 둘을 적절히 조합해 필요한 문제 해결방식을 취할수있음.

함수형 프로그래밍의 핵심개념

  • 일급시민 함수 (함수를 변수에 저장/ 인자로 전달/ 반환 가능)
  • 불변성
  • 부작용 없음

함수형프로그래밍의 이점

  • 간결성
  • multi thread safety
  • 테스트 쉬움

2) 코틀린 철학

2-1) 실용성

코틀린은 실제문제해결을 위해 만들어진 실용적 언어. 연구를 위한 언어가 아님. 따라서 다른 프로그래밍 언어가 채택한 이미 성공적으로 검증된 해법과 기능에 의존.

또한 특정 프로그래밍 스타일/패러다임을 강제하지 않음.

2-2) 간결성

기존 자바에 있던 getter, setter, 생성자 같은 번거로운 준비코드를 코틀린은 전부 묵시적 제공. 또한 다양한 표준 라이브러리를 제공하여 반복/길어질 코드를 라이브러리 함수 호출로 대치.

2-3) 안전성

프로그래밍 언어가 안전하다 = 프로그램에서 발생할수있는 오류중 일부 유형의 오류를 프로글매 설계가 원천적으로 방지해준다.

코틀린은 자바보다 높은 안전성을 지원하면서 비용은 적게 가져가기 위해 많은 노력을 한 언어.

  • 타입추론을 이용해 적은 비용으로 높은 안전성을 지원하도록 노력함.
  • NPE를 없애기 위해 노력함.
    • NULL이 될 수 없는 값을 추적
    • NPE가 발생할수있는 연산을 하는 코드를 원천적으로 금지
    • NULL 여부 체크를 위해서는 ? 한글자만 넣기!
  • 타입검사/캐스트트가 한 연산자에 의해 이뤄지도록함

2-4) 상호운용성

코틀린을 사용하면서 기존 자바라이브러리를 그대로 사용할 수 있음. 자바와 코틀린을 한 프로젝트에서 섞어쓸수도있음.




© 2020. by berrrrr

Powered by berrrrr