Kotlin

  • JVM에서 실행되는 언어. 코틀린은 자바와 100% 호환성을 갖는다. 그러므로 기존의 자바 라이브러리들을 그대로 사용할 수 있다는 큰 장점이 있다. (자신의 코드를 한번에가 아닌 점진적으로 바꿀 수 있다.)

  • 코틀린은 OOP와 FP가 둘다 가능한 멀티 패러다임 랭귀지다.

  • 코틀린에서 FP이 가능해지므로서 FP의 장점인 Side Effect가 없다는 것이 코틀린의 장점이 된다. (Immutable)

    • Side Effect(부수효과)란 - 단지 결과를 돌려준다는 것 이외의 어떤일을 수행하는 함수를 가리킨다.

    • 변수수정, 예외를 던지거나 오류를 내면서 실행을 중단, 화면에 그리기, 콘솔 입출력, 파일 입출력...

    • 즉, 부수효과를 없애려면 Pure Function만을 사용하면 된다. -> 모든 함수는 똑같은 입력값에 대해서 항상 같은 출력값을 가져야하며, 그 이외 어떠한 것도 하지 않아야 한다.

  • 기존의 명령형 프로그래밍들이 상태를 만들고, 상태를 바꿔나가면서 하는 프로그래밍이었다라고 한다면, FP는 상태를 바꾸기보다는 변경불가능한 데이터와(Immutable), 순수함수를 이용한 프로그래밍이다.

//scala
class Cafe {
    def bufCoffee(cc: CreditCard): Coffee = {
        val cup = new Coffee()    //세미콜론이 없어도 된다
        cc.charge(cup.price)      //신용카드를 실제로 청구한다.
        cup                       //마지막 줄을 반환
    }
}

cc.charge(cup.price) 가 부수효과의 예이다.

신용카드 청구에는 외부 세계와의 일정한 상호작용이 관여한다. 신용카드 회사와 접촉해서 거래를 승인하고, 대금을 청구하고, 이후 참조를 위해 기록을 영구적으로 기록하는 등의 작업이 필요하지만 이 함수 자체는 하나의 Coffee객체를 돌려줄 뿐이다.

부수효과가 있기 때문에 이 코드는 검증하기 어렵고, 코드를 검사하기 위해 실제로 신용카드 회사와 연결해서 카드 이용대금을 청구 해야한다.

  • Main Function -> Funtions -> Bottom Level Function. Bottom Level Function만이 Primitives로 구성된다.

  • 함수형 프로그래밍은 우리가 프로그램을 작성하는 방식에 대한 제약이지, 표현가능한 프로그램의 종류에 대한 제약이 아니다. FP의 원리를 따라 프로그램을 작성하면 모듈성이 증가하기 때문에 매우 이롭다. -> test, 재사용, 병렬화, 일반화, 분석이 쉽다. 버그의 위험도 줄어든다.

  • 코틀린에서 모든것은 객체다. 함수 자체도 객체가 된다. -> Int 자바에 대한 wrapper를 제공.

  • 컴파일러가 타입추론을 지원한다.

  • 자바에서 처럼 세미콜론을 칠 필요가 없다. (필요가 있는경우도 있다.)

  • Spring5 에서도 코틀린을 지원한다고 한다.

Copyrights ⓒ pnurep@naver.com, 영리목적 사용불가.

Last updated