클래스는 틀을 만드는 것을 명심!!
= 클래스는 객체를 만드는 설계도이기에 처음 기획할때부터 꼼꼼히 해둘것
- 프로그램에서 필요한 기능들 = 클래스 명칭및 역활
- 해당 클래스가 받고 가져야할 프로퍼티(속성)
- 해당 클래스가 가져야할 기능(메소드)
- main 함수에서 init() => 프로그램이 돌기전 필요한 초기화할 사항들을 모아둠
> 업데이트 유무 확인 및 변경사항 적용, 초기값 셋팅 등- .intOrNull(), .doubleToNull ... [변수.데이터타입OfNull]
> 해당 변수가 지정된 데이터 타입이 아니면 Null을 보냄- 컬렉션으로 모아둔 글자 최대 길이로 padding 거는 법
NullSafety
Safe Call Operator (?.)
- null 가능성이 있는 객체의 메소드나 속성에 안전하게 접근할 수 있다.
객체가 null이 아니면 메소드나 속성에 접근하고, null이면 연산 전체가 null을 리턴한다var nullable: String? = null val length: Int? = nullable?.length // nullable이 null이면 length는 nullElvis Operator (?:)
왼쪽 피연산자가 null이 아니면 그 값을, null이면 오른쪽 값을 리턴한다.
이를 통해 null 처리를 간결하게 할 수 있다.var nullable: String? = null // nullable이 null이면 safeLength는 0 val safeLength: Int = if(nullable != null) nullable.length else 0 // if-else val safeLength: Int = nullable?.length ?: 0 // ElvisNot-null Assertion Operator (!!)
개발자 판단 아래 null이 아님을 확신하는 것.
만약 변수가 null이면, 이 연산자를 사용했을 때 Null Pointer Exception이 발생한다.(런타임)- 정말 필요한 경우가 아니라면 잘 쓰지 않는 것이 좋을 것 같다.
var nullable: String? = null
val unsafeLength: Int = nullable!!.length // nullable이 null이면 예외 발생
Safe Casts (as?)
타입 캐스팅을 시도하되, 캐스팅이 불가능하면 null을 리턴한다.
타입 캐스팅 시 예외 발생을 방지할 수 있다.
*캐스팅 = 데이터 타입 형 변환
//String타입인 "nullable"을 Int 타인인 "aNumber"로 변경 하려는 코드
var nullable: String? = null
val aNumber: Int? = nullable as? Int // 캐스팅 실패 시 aNumber는 null- 시간 함수
- now() = 현재시간
- timer() =
- 생략