본문 바로가기
Kotlin in Action

1. 코틀린이란?

by 히예네 2024. 7. 13.
728x90
반응형

1. 코틀린이란?

  • 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어
    • 자바 코드와 상호운용성을 중시함
  • 간결하고 실용적
  • 무료, 오픈소스

2. 코틀린의 주요 특성

(1) 대상 플랫폼

  • 서버, 안드로이드 등 자바가 실행되는 모든 곳

a. 코틀린 서버 프로그래밍

  • 브라우저에 HTML 페이지를 돌려주는 웹 애플리케이션
  • JSON API를 제공하는 백엔드 애플리케이션
  • RPC(원격 프로토콜 호출)을 통해 서로 통신하는 작은 서비스들로 이뤄진 마이크로 서비스
  • 예시
    • 코틀린 빌드 패턴
    • DSL

b. 코틀린 안드로이드 프로그래밍

  • null 값을 정확하게 추적한다. 널 포인터로 인한 문제가 줄어든다.
  • 예시
    • 리스너, 바인딩 …

(2) 정적 타입 지정 언어

a. 정적 타입 vs 동적 타입

  정적타입 동적타입
타입 판단 개발자가 컴파일 단계에서 직접 작성한다. 코드 실행 시, 자동으로 판단해줌.
변수 타입이 결정되는 시기 컴파일 시 런타임 시
예시 C, C#, C++, Java, Kotlin JavaScript, Ruby, Python
특이점 코틀린은 타입추론이 가능하다.
(즉 타입을 명시하지 않아도 된다.)
 

b. 정적 타입 언어의 장점

  • 성능 : 실행 시점에서 어떤 메소드를 호출 할 지 알아내는 과정이 필요없으므로 메소드 호출이 빠르다.
  • 신뢰성 : 컴파일 단계에서 프로그램 정확성을 판단한다. 실행할 때 프로그램 오류 발생할 확률이 적다.
  • 유지 보수성 : 객체가 어떤 타입인지 바로 알 수 있어서 이해가 쉽다.

(3) 함수형 프로그래밍

a. 함수형 프로그램이란?

  • 일급 시민인 함수 : 함수를 일반 값처럼 사용
    • 함수를 변수에 저장 가능
    • 함수를 인자로 다룰 수 있다. ( 다른 함수에 전달 가능하고, 함수에 새로운 함수를 만들어서 반환 가능하다.)
    //코틀린에서 1급 객체 함수란?
    
    fun main(){
        println(sum(1,2)) //3
        println(calculate(2,3,sum)) //5
        println(calculate(2,3,sum2)) //-1
        
        val compare = comparison()
        println(compare(5,3)) //true
        println(compare(5,10)) // false
    }
    
    //1. 함수를 변수에 할당 할 수 있다.
    val sum = { x: Int, y: Int -> x + y }
    val sum2 = { x: Int, y: Int -> x - y }
    
    //2. 함수를 인자로 전달 할 수 있다.
    fun calculate(x: Int, y: Int, operation: (Int,Int) -> Int): Int {
        return operation(x,y)
    }
    
    //3. 함수에서 다른 함수를 반활 할 수 있다. 
    fun comparison(): (Int,Int) -> Boolean {
        return { x, y -> x > y }
    }
    
  • 불변성 : 일단 만들어지고나면 내부 상태가 절대 바뀌지 않는 불변 객체를 사용해 프로그램을 작성한다.
    • 대입문이 아니다. 변수에 값이 할당되면 그 이후 절대 변하지 않는다.
  • side effect 없음 : 순수함수를 사용한다.
    • 순수함수 : side effect가 없고, 함수 외부나 다른 바깥 환경과 상호작용 하지 않는 함수.

b. 함수형 프로그래밍의 장점

  • 간결성
    • 함수를 값처럼 사용함.
  • 다중 스레드를 사용해도 안전함
    • 불변 데이터 구조를 사용하고, 순수 함수를 그 데이터 구조에 적용한다면 다중 스레드 환경에서 같은 데이터를 여러 스레드가 변경 할 수 없다. 따라서 복잡한 동기화를 적용하지 않아도 된다.
  • 테스트가 쉽다.

c. 코틀린이 지원하는 기능

  • 자바 8 이전에는 함수형 프로그래밍을 지원할 수 있는 기능이 거의 없다.
  • 코틀린은 처음부터 함수형 프로그래밍을 지원해왔다.
    • 함수 타입 지원
      • 어떤 함수가 다른 함수를 파라미터로 받거나, 함수가 새로운 함수를 반환 할 수 있다.
    • 람다식 지원
    • 데이터 클래스
      • 불변적인 값 객체를 간편하게 만들 수 있는 구문을 제공한다.
    • 코틀린 표준 라이브러리
      • 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API 제공

3. 코틀린의 철학

(1) 실용성

  • 연구하는 언어 X. 다른 프로그래밍 언어가 채택하고 검증한 기능에 의존한다.
    • 언어가 복잡하지 않고, 이미 알고 있는 기본 개념들이 많이 존재한다.
  • 코틀린은 어느 특정 프로그래밍 스타일이나 패러다임을 강요하지 않는다.
    • 자바를 이용해도 상관없다.
  • 도구를 강조한다.
    • 코틀린은 도구 사용을 항상 염두한다.
      • 자동 수정 안내 등 …

(2) 간결성

  • 의미 없는 부분, 언어가 요구하는 조건을 만족시키기 위해 별 뜻은 없지만 프로그램에 꼭 넣어햐는 부수적인 요소를 줄여준다.
    • getter, setter, 생성자 파라미터 등
  • 람다식 지원
  • 기호만으로 식별자를 작성 할 수 없다. 무조건 단어로 이뤄진 이름을 사용한다.
    • 읽기 쉽고 검색이 편하다.

(3) 안정성

  • 트레이드 오프
    • 오류를 방지하기 위해서는…
      • 우리는 컴파일러에게 프로그램이 어떻게 돌아갈지 정보를 더 자세하게 제공해야한다. → 컴파일러가 프로그램 코드와 작동 의도가 일치하는지 검증해야한다.
        • 💥 컴파일러에게 더 많은 정보를 제공해야하므로 생산성이 하락한다!
    • 안정성과 생산성 사이에는 트레이드오프 관계가 성립한다.
  • 코틀린은 더 높은 수준의 안정성 + 비용은 적게 들고 싶었다.
    • JVM에서 실행 가능하다.
    • 타입 안정성
      • 코틀린 컴파일러는 타입 추론 가능, 개발자가 실수 할 일이 없다.
    • NullPointerException 방지
      • 비용이 아주 적다! ?만 붙이면 된다.
    • ClassCastException 방지
      • 타입 검사와 캐스트가 한 연산자에 의해 이뤄진다.
      if (value is String) <- 타입을 검사한다.
       println(value.toUpperCase()) <- 해당 타입의 메서드를 사용한다.
      

(4) 자바와 상호운용성

  • 자바와 코틀린 소스 파일을 자유롭게 내비게이션 할 수 있다.
  • 자바 ↔ 코틀린 리팩토링 가능. 자동으로 코드를 변경해준다.

4. 코틀린 도구 사용

(1) 코틀린 코드 컴파일

  • 코틀린도 컴파일 언어이다.
    • 코드를 컴파일한 후 → 코틀린 코드를 실행한다.
    • 코틀린으로 컴파일한 애플리케이션은 런타임 라이브러리도 함께 배포해야한다.
    • 코틀린 런타임 라이브러리
      • 크기가 매우 작다.
      • 포함된 기능
        • 코틀린 자체 표준 라이브러리 클래스
        • 자바 API의 기능을 확장한 내용
    • 실제 프로젝트를 컴파일하기 위해서는, 빌드시스템이 필요하다. gradle, maven…
      • 빌드 시스템들은 애플리케이션을 패키지할 때 알아서 코틀린 런타임을 포함시켜준다.

(2) 기타

  • 인텔리J, 안드로이드스튜디오, 셸, 플레이그라운드 등
728x90
반응형