Language/Kotlin

    Kotlin 자료형 검사하고 변환하기(?. !! ?:)

    1. null 허용 변수 검사하기 코틀린은 변수를 사용할 때 반드시 값이 할당되어 있어야 한다는 원칙이 있다. 단, ? 기호를 사용하면 null 허용 변수를 만들 수 있다. ? (널 허용 변수) 를 사용하기 위해서는 null을 검사하고 처리하는 방법을 고려해야 한다. null 변수를 읽으면(참조하면) NPE 에러가 발생하기 때문이다. ?. (세이프콜) 변수를 검사하고 null이 아니면 접근하여 값을 읽고(왼쪽식을 그대로 실행), null이면 해당변수를 참조(NPE발생)하지 않고 null을 안전하게 호출 !! (non-null 단정기호) 변수에 할당된 값이 무조건 null이 아님을 단정하고 컴파일러가 null검사 없이 무시함 컴파일은 잘 수행되지만 나중에 실행시 NPE 발생 ?: (엘비스 연산자) 변수를 ..

    [Kotlin 객체지향 (4)] 프로퍼티(지연초기화, 위임)와 정적변수(Companion 객체, 최상위함수, object 객체)

    Companion 클래스를 정의할 때 변수나 메서드를 정적 멤버로 정의하면 객체를 생성하지 않고 사용할 수 있다. Java에서는 static을 사용하는데 Kotlin은 companion 객체를 사용한다. Companion 멤버는 객체 생성 없이 클래스의 이름으로 접근해서 사용한다. Kotlin에서 Java의 static 멤버 사용은 다른 점이 없다. 만약 Kotlin에서 정의한 Companion 멤버 중 Java에서 사용할 수 있도록 하기 위해서는 @JavaStatic 으로 정의해야 한다. 리플렉션 프로그램 실행 중에 프로그램의 구조(객체, 함수, 프로퍼티)를 분석하는 기법 객체의 클래스 타입, 클래스 정보, 생성자 정보, 프로퍼티 정보 등을 실행 중에 파악할 수 있다.

    [Kotlin 객체지향 (3)] Data/ Sealed/ Enum /Inner /중첩 Class

    Data Class DataClass는 매개체의 데이터를 관리하는 용도로 사용하는 클래스이다. abstract, open, sealed, inner 클래스로 정의할 수 없다 반드시 주 생성자를 가지고 있어야 한다. Data Class 함수 Data Class 는 개발자의 개발 편리성을 위해 몇 가지 메서드가 자동으로 구현된다. equals : 객체가 가지고 있는 변수를 모두 비교하는 메서드 hashCode : 객체를 구분하기 위한 고유한 정수값 copy : 객체를 복제하는 메서드 toString : 객체가 가지고 있는 변수의 값을 출력 componentN : 객체 분해 data class TestClass2(var a1:Int, var a2:Int){ var a3:Int = 0 init { println..

    [Kotlin 객체지향 (2)] 추상클래스(Abstract Class)와 인터페이스(Interface)

    추상클래스 vs 인터페이스 공통점 설계 명세와 공통의 기능을 구현 차이점 추상클래스 → (상속) → 하위클래스 일반적인 객체를 생성하는 방법으로 인스터스화 하는 대신 상속받아 사용 (상속을 위해 open키워드를 사용할 필요 없음) 하위클래스는 상속을 하나만 허용 일반 프로퍼티/메서드에는 초기값 저장할 수 있고, abstract 키워드 붙은 추상 프로퍼티/메서드는 하위 클래스에서 재정의해서 사용해야함) 상위클래스가 정의한 내용이 불완전하면 상속받은 하위클래스도 그대로 영향을 받음 인터페이스 → (구현) → 구현클래스 인터페이스는 클래스가 아니라 상속받아 사용하는것 아니고 구현함 상속은 하나면 허용했으나, 인터페이스는 원하는 만큼 구현클래스에 붙여서 필요한 메서드를 구현해내면 됨 프로퍼티에 상태정보를 저장할..

    Kotlin 파일 입출력 (io/nio)

    표준 입출력의 기본 개념 가장 기본적인 표준 입출력 API readLine() val input = readLine()!! Scanner() val input1 = Scanner(System.'in').readr.nextInt() // 정수형으로 입력 받음 val input2 = Scanner(System.'in').readr.nextLong() // Long타입으로 입력 받음 val input3 = Scanner(System.'in').readr.nextFloat() // Float타입으로 입력 받음 val input4 = Scanner(System.'in').readr.nextDouble() // Double타입으로 입력 받음 val input5 = Scanner(System.'in').readr.n..

    Kotlin 컬렉션(List/Set/Map)과 확장함수/시퀀스

    컬렉션 컬렉션의 확장함수 시퀀스 1. 요소 값 생성하기 2. 요소 값 가져오기 확장함수 기존 클래스에 새로운 함수를 추가하는 개념이다. Kotlin 코드에서는 기존 클래스에 메서드를 추가해 사용 하는 것처럼 보이지만 사실 객체의 주소 값을 받은 함수가 만들어지고 그 함수를 호출하는 방식으로 동작한다. fun main() { val str1 = "abcd" println(str1.getUpperString()) } fun String.getUpperString() : String { return this.toUpperCase() }