Link Search Menu Expand Document

1장 코틀린이란 무엇이며, 왜 필요한가?

  • 코틀린이란? 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어
  • 간결, 실용적, 자바코드와의 상호운용성(interoperability) 중시
  • 서버개발 / 안드로이드 앱 개발 가능

1.1 코틀린 맛보기

  • data class Person(val name:String, val age:Int? = null)
      
    val persons = listOf(Person("영희"), Person("철수", age=29))
    val oldest = persons.maxBy{ it.age ?:0 }
      
    println("나이가 가장 많은 사람 : $oldest")
    
  • 데이터 클래스
  • 이름 붙은 파라미터
  • 람다식과 엘비스 연산자
  • 문자열 템플릿
  • toString 자동생성

1.2 코틀린의 주요 특성

1.2.1 대상 플랫폼: 서버, 안드로이드 등 자바가 실행되는 모든 곳

  • 서버 (백엔드)
  • 안드로이드 앱
  • IOS : 인텔 멀티 OS엔진 사용 시 코틀린을 IOS디바이스에서 실행 가능
  • 데스크탑 어플리케이션: 코틀린+토네이도FX,자바FX
  • 자바뿐 아니라 자바스크립트로도 코틀린 컴파일 가능, 즉 코틀린 코드를 브라우저나 노드에서 실행 가능
  • 코틀린을 통해 모든 소프트웨어 개발을 할 수 있게 하는 목표가 있음
  • 하지만 해당 책은 자바 관련된 부분만 집중적으로 다룸

1.2.2 정적 타입 지정 언어

  • 자바와 달리 모든 변수의 타입을 프로그래머가 직접 명시 할 필요 X
  • 컴파일러가 문맥을 고려해 변수 타입을 결정하는 타입 추론이 존재

1.2.3 함수형 프로그래밍과 객체지향 프로그래밍

  • 함수형 프로그래밍
    • 일급 시민인 함수(First-class)
      • 함수를 일반 값처럼 다룰 수 있다.
      • 함수를 변수에 저장 가능하고 인자로 전달 가능
      • 함수에서 새로운 함수를 반환 가능
    • 불변성(Immutability)
      • 만들어지고 나서 내부 상태가 바뀌지 않음
    • 부수 효과 없음(Side effect)
      • 입력이 같은면 항상 같은 출력
      • 다른 객체의 상태 변경 x
      • 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수 사용
    • 이로 인한 장점
      • 간결성
      • thread safe
      • 테스트 쉬움

1.2.4 무료 오픈소스

1.3 코틀린 응용

  • 자바 코드와 매끄럽게 상호운용 가능
  • 자바 -> 코틀린 변경 이슈 없음
  • 시스템을 좀 더 간결하고 신뢰성을 높일수 있고 유지보수도 쉬워질 것으로 기대
    • 코틀린 빌더 패턴, HTML태그 변환도 지원하여 별도 템플릿언어 필요X

1.4 코틀린의 철학

1.4.1 실용성

  • 실제 문제를 해결하기 위한 실용적인 언어
    • 코틀린은 연구를 위한 언어 아님
  • 코틀린을 처음 배우는 사람은 자바스타일로하다가, 코틀린의 강력한 특성을 익히고 나면 좀 더 간결하게 활용 가능
  • IDE지원 많음 (JetBrains에서 시작)

1.4.2 간결성

  • 자바에서 이슈가 됬던 부분들, 불편했던 부분들을 언어자체어서 간결한 코딩이 가능케 설계
  • 코드 읽는 시간 > 코드 작성 시간
    • 수정해야하는 부분을 찾고, 어떻게 고쳐야할지 파악하기 위해선 읽어야 한다
    • 코드가 더 간단하고 간결하면 내용 파악이 더 쉽다
    • 코틀린은 코드에서 의미 없는 부분을 줄이고, 준비코드를 묵시적으로 제공
    • 다만 코틀린 설계 목표에는 소스코드를 가능한 짧게 만든다는건 없다

1.4.3 안전성

  • 안전성과 생산성 사이에는 트레이드 오프가 존재
  • 코틀린을 만들면서 자바보다 더 높은 수준의 안전성을 달성하되 전체 비용은 더 적게 하고자 함
  • JVM을 사용하여 메모리 안정성 보장, 버퍼 오버플로 바지, 동적 메모리할당 이슈 예방 가능 (자바 동일)
  • 정적 타입 지정 언어 (자바 동일)
  • 코틀린 컴파일러가 타입을 자동 추론
  • 코틀린은 컴파일 시점에서 잡아주는 에러가 많음
    • NullPointerException
    • ClassCastException

1.4.4 상호운용성

  • 자바 클래스 상속, 자바 인터페이스 구현, 자바 애노테이션 -> 모두 가능
  • 자바 -> 코틀린호출도 이슈 없음
  • 섞어 쓰는것도 가능
    • (kang)비즈니스 코드레벨에선 안섞는게 좋아보이긴 함
    • (kang)자바 개발자들이 대다수인 상황이었기에 필요했던 목표이지 않았을까

1.5 코틀린 도구 사용

1.5.1 코틀린 코드 컴파일

  • 코틀린 소스코드를 저장시에는 .kr확장자 사용
  • 코틀린 컴파일러도 컴파일 후 .class파일 생성
  • 빌드 과정
    • 스크린샷 2021-06-16 오전 8 37 13
    • maven, gradle 애플리케이션 패키지시에 코틀린 런타임을 포함 시켜줌