자료형 + ?로 선언함
null을 저장하기 않고 설계하려면 lateinit var로 대체 가능
fun main(){
var s = Student() // 클래스 객체 생성, 인스턴스화
// s.displayInfo() // name 프로퍼티가 초기화되지 않았기 때문에 실행하면 오류가 발생함
s.name = "참새" // name 프로퍼티에 값 할당(초기화)
s.address = "서울" //address 프로퍼티에 값 다시 할당
s.displayInfo() // 클래스 프로퍼티 조회 메서드 실행
}
//명시적 생성자를 사용하지 않고 클래스 정의
class Student { // Student라는 이름 가진 클래스
lateinit var name:String //lateinit 붙어서 나중에 초기화 되는 변수
var address:String? = null //null로 초기화할 수 있도록 String뒤에 ?를 붙임
fun displayInfo() {
println("이름은: ${name} 입니다")
println("주소는: ${address} 입니다")
}
}
이 변수(혹은 상수)는 절대로 null이 아니라고 하는 키워드
강제로 null이 아니라고 명시하는 거라서 사용 지양!!
fun main(){
// var data = readLine()!!.toInt() 아래 코드를 축약한 형태
var inputData = readLine()!! //입력받은 값이 null이 아니라고 지정함
var data = inputData.toInt() //입력받은 값을 Int형 정수로 바꿈(기존 입력값은 아마 Spring 타입일듯)
println("Null아닌 값: ${data}")
}
null인지 확인하고 null이 아닐 때만 참조한다. (호출한다)
안전 호출 연산자(safe-calls)라고 한다.
fun main(){
var s = Student() // 클래스 객체 생성, 인스턴스화
// s.displayInfo() // name 프로퍼티가 초기화되지 않았기 때문에 실행하면 오류가 발생함
s.name = "참새" // name 프로퍼티에 값 할당(초기화)
s.displayAddressLength() //클래스 프로퍼티 조회, 주소는 null로 초기화되어 있어서 length가 동작 안 함, 그냥 null 출력
s.address = "서울" // address 프로퍼티에 값 다시 할당
s.displayInfo() //클래스 프로퍼티 조회 메서드 실행
}
//명시적 생성자를 사용하지 않고 클래스 정의
class Student { // Student라는 이름 가진 클래스
lateinit var name:String //lateinit 붙어서 나중에 초기화 가능
var address:String? = null //null로 초기화할 수 있도록 String 뒤에 ?를 붙임
fun displayInfo() { //프로퍼티 정보 출력
println("이름은: ${name} 입니다")
println("주소는: ${address} 입니다")
}
fun displayAddressLength() { //주소 프로퍼티가 null이라면 null 출력, 아니라면 문자열 길이 출력
println("주소의 길이는: ${address?.length} 입니다")
}
}
fun main(){
var s = Student() // 클래스 객체 생성, 인스턴스화
// s.displayInfo() // name 프로퍼티가 초기화되지 않았기 때문에 실행하면 오류가 발생함
s.name = "참새" // name 프로퍼티에 값 할당(초기화)
s.displayAddressLength() //클래스 프로퍼티 조회, 주소는 null로 초기화되어 있어서 length가 동작 안 함, 초기화하세요가 출력됨
s.address = "서울" // address 프로퍼티에 값 다시 할당
s.displayInfo() //클래스 프로퍼티 조회 메서드 실행
}
//명시적 생성자를 사용하지 않고 클래스 정의
class Student { // Student라는 이름 가진 클래스
lateinit var name:String //lateinit 붙어서 나중에 초기화 가능
var address:String? = null //null로 초기화할 수 있도록 String 뒤에 ?를 붙임
fun displayInfo() { //프로퍼티 정보 출력
println("이름은: ${name} 입니다")
println("주소는: ${address} 입니다")
}
fun displayAddressLength() {
//주소 프로퍼티가 null이라면 "초기화하세요" 출력, 아니라면 문자열 길이 출력
println("주소의 길이는: ${address?.length ?: "초기화하세요"} 입니다")
}
}
https://kotlinlang.org/docs/null-safety.html#nullable-types-and-non-nullable-types