Skip to content

Instantly share code, notes, and snippets.

@ihoneymon
Last active July 9, 2021 16:59
Show Gist options
  • Save ihoneymon/dfc5200892740f4677701c5d4312e82f to your computer and use it in GitHub Desktop.
Save ihoneymon/dfc5200892740f4677701c5d4312e82f to your computer and use it in GitHub Desktop.
깃헙은 은근히 여기저기 얼굴을 많이 비춘다. 아직도 목마른가?

20190408 Kotlin Knight 서울

자바 개발자 관점의 '왜 코틀린인가?' (by 강현식)

  • Java 8 이상 쓰는 곳이 거의 없다.

  • 자바코드는 장황하다?

    • 롬복(Lombok)

      • 롬복이 지원안될 수 있다.

      • Annotation Processor 와 충돌 가능성

    • Kotlin Object().apply { } 으로 빌더 흉내가능

  • import 가 없는데 이건 코틀린 지원

  • Kotlin 은 Java 와 Full 호환됨

    • Java 에서 Kotlin 호환도 된다.

  • var/val 은 getter/setter 와 한몸

  • 스칼라를 하려다가…​

    1. 상대적으로 느린 컴파일 속도

    2. 자바와 혼용이 어려운 부분 존재

    3. 문법 어려움

    4. 하위 버전 바이너리 호환성을 버린 경우가 있었음

    5. Null safety 지원 상대적으로 부족

    6. 스칼라 사용당시 이해도 부족

    7. 깃헙 코틀린 릴리즈 속도 빠름

    8. IDE 지원이 코틀린에 비해 부족

  • Jetbrains IDE 지원

  • 멀티 플랫폼 지원

  • 안드로이드 공식 언어 2017년

  • 컴파일러 레벨에서 NPE 차단

  • !!는 가급적 사용금지

  • ?: 엘비스 명령자: Null 인 경우 처리

  • Java 에서 작성한 코드는 원천적으로 Null 차단 불가

  • 확장함수: IntelliJ 에서 노란색으료 표시되는 경우는 확장함수

    • 자바에서 코틀린 확장함수는 static 메서드로 보인다.

    • Java 8을 위한 유틸리티 지원

    • 유사? asSequence == Stream().stream()

    • 코틀린 확장함수를 이용해서 보일럿 코리를 처리가능

  • if 는 구문이 아닌 식으로 표현가능

  • 함수가 일급시민 이라면 어디에서든 담을 수 있다.

  • 점진적 지원

이펙티브 자바와 코틀린(by 정경주)

  • 왜 Effective java 인가

    • 효율적이고 잘 설계된 자바 프로그램을 구현하기 위한 지침 소개

  • Effective Java 의 내용을 코틀린에 적용해가는 과정에 대한 이야기

    • 나쁘지 않은 접근방법이라고 생각이 되는군.

object Elvis {
  fun name() {}
}
  • 클래스 인스턴스를 막고자 하는 경우: private construct()

  • 상속보다는 컴포지션을 사용하라

  • by s 인터페이스에서만 사용가능한 모든 구현을 넘기겠다.

  • 상속을 고려하여 설계하라. 그렇지 않다면 상속을 막아라.

  • 코틀린에서는 오버라이드할 때 반드시 override 선언을 해야한다.

  • Kotlin List vs Java List

    • Kotlin List는 변경함수가 정의되어 있지 않음

    • 실제 객체는 Mutable 이어도 클라이언테에게 List 타입으로 노출한다면 변경되지 않는다.

  • 박싱된 기본 타입보다는 기본 타입을 사용하라.

    • 기본타입 vs 박싱된 기본 타입

      • 두 인스턴스는 값이 달라도 주소가 달라 서로 다르다고 식별할 수 있다.

      • 박싱된 기본타입은 null 을 가질 수 있다.

      • 박싱된 기본타입보다 쎼다.

    • 코틀린은 박싱된 기본타입이 없다.

    • Nullable 여부에 따라서 박싱된 기본 타입 유형이 된다.

  • HashCode를 구현하는 방법

    • data class 를 구현하면 쉽게 사용

  • toString 을 항상 재정의하라.

    • 클래스 정보를 유용하게…​

  • checked Exception

    • 단점

      • 복구가 불가능한 상황에서도 처리해야함

      • 클라이언트에게 너무 자세한 오류 정보를 제공

    • 수많은 개발자들이 처리하지 않고 무시

    • 지연 초기화는 delegated operator(by lazy)를 이용해서 가능

  • 한정적 와일들카드를 사용해 API 유연성을 높여라.

코틀린을 이용한 우아한 코드 만들기(by 이수호)

  • 우아한…​?

  • Unit == Void

  • infix, 확장함수(Extension function)

  • Interface Consume

  • Interface Function

  • until

  • function literal with receiver: this?

  • 공통된 기능에대해서는 확장함수를 사용하는게 좋은게냐?

  • T.()

  • Curring 을 이용한 작성방법

  • Function interface 를 잘 사용하는 게 중요한듯

    infix fun <T> list<T>.valid(index: Int): (() -> T)? -> Supplier
  • 코틀린이 자바를 사용할 때 중요한 것은 커뮤니케이션이다. 함수형 프로그래밍을 할 때 겪게되는 것과 유사한 경험.

  • Kotlin infix & Extension function 을 이용해서 함수를 만드는 것이 좋다.

  • 함수형 프로그래밍을 통해서 간결한 코드를 만드는 것인가?

  • inline fun <reified T> 자바에서 T 타입 클래스를 접근할 수 있다.

Note

코틀린은 언어가 젊다는 생각이 든다.

Kotlin + AWS Lambda 와 API Gateway(by 허재위)

  • Kotlin Korea

  • Gradle Kotlin DSL

  • CLI → /greeting → function → CLI

  • IntelliJ Template 을 이용해서 생성하는 방법 나쁘지 않은데?? _) 호우호우

  • 람다 실행을 위해서 박스툴(Boxtool)이 필요한겐가??

  • Function 등의 함수 인터페이스를 RxJava 를 이용하는구나. 그래서 조금 더 많이 자주 사용했던건가?

정리

  • 코틀린은 장황한 자바 코드를 간결하게 대체가능한 프로그래밍 언어다.

  • 인텔리제이 IDE 지원을 통해 자바 개발자도 코틀린 개발을 손쉽게 할 수 있다.

  • 자바의 불편함을 코틀린으로 간결하게 대체할 수 있다.

  • 코틀린은 함수형 프로그래밍 언어다. 함수형 표현식을 익히게되면 보다 다양한 활용이 가능하다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment