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, downTo
를step
과 함께 사용 가능문자 범위 가능 :
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 는 식을 만들 수 있음