Post

Atomic Kotlin (1)

아토믹 코틀린을 읽으면서 새로 알게 된 내용, 애매한 부분을 정리함

1부: 프로그래밍 기초

02. 왜 코틀린인가?

코틀린은 interpret 되지 않고 compile 된다. 해석되는 언어의 명령은 인터프리터라는 프로그램을 통해 실행되고, 컴파일 되는 언어의 소스 코드는 하드웨어 프로세서에서 직접 실행되거나 프로세서를 본 딴 가상 머신에서 실행될 수 있는 다른 표현으로 변환된다.

  • C, C++ 같은 언어는 CPU에서 machine code로 컴파일된다.
  • 자바, 코틀린 같은 언어는 byte code로 번역된다. 바이트 코드는 CPU에서 직접 실행되지 못하고 바이트코드 명령을 실행 가능한 프로그램인 가상 머신에서 실행될 수 있는 중간 수준의 형태다. 코틀린은 JVM에서 실행된다.

  • 이식성 (portability)는 가상 머신을 사용한 이점. 가상 머신만 설치돼 있으면 같은 바이트코드를 어느 기계에서 실행할 수 있다. 특정 하드웨어에 맞춰 최적화 가능함.
  • 컴파일 시점에 컴파일러는 코드를 검사해 컴파일 타임 에러를 발견.
  • 런타임 오류는 실행해야만 발견할 수 있는 오류. 코틀린 (정적 타입 지정 언어)는 컴파일 시점에 가능한 한 많은 오류를 찾아냄. 동적 언어는 실행 시점에 수행함.

코틀린의 NULL 표현 방식

  • C언어: 새로 할당한 저장소를 모두 0으로 채움. 할당되지 않은 값이 조용히 프로그램에 스며든다. 어떤 메모리 저장소가 포인터라면, 널 포인터는 메모리의 0번지를 가리킴.
  • 자바: 런타임 오류 NullPointerException 발생시킴
  • 코틀린: 컴파일 시점에 Null 타입 오류 발생 가능성이 있는 연산을 금지함.

04. var와 val

val은 불변값, var은 가변값.

프로그램이 복잡해질 수록 변화하지 않는 val 식별자를 통해 값을 표현해야 코드가 더 명확하고 안전하며 이해하기 쉬워진다.

10. 불리언 Boolean

&& || : 괄호가 없는 경우, &&가 우선순위에 있다.

&& , ||, >, <, = : 부등 연산자(<,>,=) 연산 이후 (&&, ||)을 평가한다.

12. 루프와 범위

showRange(scope) 함수: 피라미터로 IntProgression을 받아서 String으로 표현함.

IntProgressions

i in 1..3 : 1≤ i ≤ 3

i in 0 until 10 : 0≤ i < 10

i in 5 downTo 1 : 5≥ i ≥ 1

i in 0..9 step 2 : 0 2 4 6 8

  • until, downTostep과 함께 사용 가능

  • 문자 범위 가능 : c in ‘a’..’z’ : a b c d … z

repeat()

어떤 동작을 단순히 정해진 횟수만큼 반복하고 싶다면 for 대신 repeat(int) 사용하기

13. in 키워드

어떤 값이 주어진 범위 안에 들어있는지 검사하는 키워드

0≤x && x≤100 은 논리적으로 x in 0..100 과 같다.

어떤 문자가 문자열 안에 들어 있는지 검사할 때도 in을 쓴다.

!in : 대상이 범위 안에 들어가 있지 않으면 true 반환

14. 식과 문 (Statement, Expression)

  • 문: 효과를 발생. 결과 X
  • 식: 항상 결과를 만들어냄

for 루프: 아무런 결괏값도 만들어내지 않기 때문에 for 문을 다른 변수에 대입 불가능

  • 식은 값을 돌려주기 때문에 이 값을 변수에 대입하거나 다른 식의 일부분으로 쓸 수 있다.
  • 문은 다른 식의 일부분, 변수에 대입 불가능한 최상위 요소.

모든 함수 호출 코드는 식이다. Unit을 반환해도 결과를 변수에 대입 가능.

if 는 식을 만들 수 있음