프로그래머 대신 ㅍ로그램 구성 요소의 타입을 정해주는 긴능을 "타입추론" 이라고 한다.
식이 본문인 함수의 반환 타입만 생략 가능하고, 블록이 본문인 함수가 값을 반환한다면 반드시 반환 타입을 지정하고 retrun문을 사용해 반환 값을 명시해야 한다.
val
-변경 불간능한 참조를 저장하는 변수
-val로 선언된 변수는 일단 초기화하고 나면 재대입이 불가능(자바로 final)
var
-변경 가능한 참조
-변수의 값을 바뀔 수 있음(자바의 일반 변수)
⇒ 기본적으로는 모든 변수를 val 키워드를 사용해 불변 변수로 선언하고, 나중에 꼭 필요할 때에만 var로 변경하자. 변경 불가능한 참조와 변경 불가능한 객체를 부수 효과가 없는 함수와 조합해 사용하면 코드가 함수형 코드에 가까워 진다. (나중에 설명)
val 변수는 블록을 실행할 때 정확히 한 번만 초기화돼야 한다. 하지만 어떤 블록이 실행될 때 오직 한 초기화 문장만 실행됨을 컴파일러가 확인할 수 있다면 조건에 따라 val 값을 다른 여러 값으로 초기화 할 수 있다.
val message: String
if (testOperator()) message = "ok"
else message = "no"
val 참조 자체는 불변일지라도 그 참조가 가리키는 객체의 내부 값은 변경될 수 있다는 사실을 기억하자.
좀 더 자세한 내용은 6장에서 마저 한다.
클래스라는 개념의 목적은 데이터를 캡슐화 하고 캡슐화한 데이터를 다루는 코드를 한 주체 아래 가두는 것이다.
클래스는 자신을 사용하는 클라이언트가 그 데이터에 접근하는 통로로 쓸 수 있는 접근자 메소드를 제공한다.
보통은 필드를 읽기 위한 게터를 제공하고 필드를 변경하게 허용해야 할 경우 세터를 추가 제공한다. 자바에서는 필드와 접근자를 한데 묶어 "프로퍼티" 라고 부른다.
class Kotlin(
val user: String,
var age: Int
)
val로 선언한 프로퍼티는 "읽기전용"