- Null Pointer Exception(NPE) 방지: nullable ? 사용
- 이론보다는 실리
getter/setter 사용하지 않고 default visibility가 public
- for loop 문법이 다름
for (int i = 0; i < 5; i++) 지원x
- fun 함수
- const 모두 대문자 및 _ 사용
- class: extends대신 ":" 사용
- 클래스 생성 default final 내 클래스를 상속받게 하려면 open을 추가해야함
- 상수: 최상위 클래스는 Any
- 재정의 가능 멤버에 open 명시적으로 붙여줘야 함
- 슈퍼 클래스는 open, 서브 클래스는 override 사용
- 슈퍼 클래스에서 open인 fun만 서브 클래스에서 override 가능
- kotlin에서 static 없음
- 한 클래스에 오직 한 개의 companion object가질 수 있음
companion object {
const val REQUEST_GUNDAM = 100
const val KEY_NAME ="name"
} //다른 클래스에서 접근 가능
- object: 새로운 class를 만들지 않고 상속받아서 재정의할 때 사용
자바의 anonymous inner class와 유사
functional interface는 lamda식 가능
- data class
- default visibility가 public
data class person (var name: String, var age: Int)
- 변수
1. val: read-only
2. var: 할당 가능
- 타입: 값을 초기화하는 경우에 값의 타입이 명확하다면 변수의 타입을 지정하지 않아도 됨
- 타입 뒤에 ?가 붙는 경우 nullable의 의미
- lateinit (late + init: 늦게 초기화하겠다!)
- constuctor()에서 초기화할 때는 안 써도 됨
- nullable일 때 못씀
- inInitialized 로 검사 가능
- Nullable이 아닌데 초기화 하지 않을 때 사용
- fun: Unit - 반환값 없음 (void와 유사) 생략 가능!
- default arguments 함수 호출시에 지정하지 않으면 default값 지정
- named arguments: 순서 바뀌어도 됨(순서 맞추기 권장)
- String Templates: printf()의 %d와 유사
- $ 사용, {} 사용 가능
- internal: 같은 모듈 안에서 internal멤버를 선언한 클래스를 볼 수 있다면 접근 가능 - 한 클래스 내부에 protected클래스가 있고 거기에 internal 멤버가 있다면 바깥의 다른 클래스에서 접근 불가
- Null 안정성: kotlin에서는 null pointer exception (NPE)발생 제거 노력
1. non-null: null 값을 가질 수 없는 변수
2. nullable: null 값을 가질 수 있는 변수
- nullable: 타입 오른쪽에 ?사용
- !!! : null이 아님이 확실하거나 또는 null일 경우 NPE를 발생시킬 때
- as? (safe cast 연산): 다른 타입으로 cast가 불가능하다면 null반환
- 개발자 공식 문서의 코드에서 실행시 에러 발생
getBitmap() return 타입 Bitmap을 nullable로 변경하면 해결됨
- lamda Expression: anonymous fun
- lamda식만 함수 인자로 전달한다면 괄호 생략 가능
- it: lamda식이 한 개의 parameter만 갖는다면 -> 생략하고 이름은 it사용
- SAM(Single Abstract Method) interface: 인터페이스의 경우 메소드 한 개인 경우 많음
button.setOnClickListener (
val btn = it as Button
textVies.text = btn.text
}
- 사용하지 않는 parameter에는 이름을 부여하지 않고 _를 붙여서 자리만 차지
- when (switch-case문 유사)
when(v?.id){
btn1.id -> intent.putExtra(KEY_NAME, "111")
btn2.id -> intent.putExtra(KEY_NAME. "222)
NULL -> RETURN
}
- for: 다른 언어의 전형적인 for loop 허용 안 함
for (i in 0..9)
for (i in 9 downTo 0)
for (i in 0 until mArray.size) //숫자가 정해지지 않은 경우
for (item in mArray) //컬렉션 처리
- == 값이 같은지 비교
- === 같은 객체를 가리키면 true
- !== ===의 반대