Kotlin as 연산자

이미지
Kotlin as 연산자 객체를 지정된 클래스 타입으로 변환하는 연산자이다. 참조 변수 as 클래스 타입 만약 객체가 지정된 클래스타입과 관계가 없을 경우 오류가 발생한다. 형 변환이 발생한 참조 변수는 변환된 타입을 유지한다. as 연산자 여기서 변수는 형변환을 수행하려는 변수이고, 타입은 변수를 변환하려는 타입입니다. as 연산자를 사용하여 변수를 다른 타입으로 변환하면, 변수는 해당 타입으로 강제로 변환됩니다. 명시적 형변환 Kotlin에서 as 연산자는 명시적으로 변수의 타입을 변환하기 위해 사용됩니다. as 연산자를 사용하여 변수를 다른 타입으로 변환할 수 있습니다. 이는 명시적 형변환이라고도 합니다. fun main () { val obj1:SubClass1 = SubClass1() val super1:SuperClass1 = obj1 // SubClass1 으로 명시적 형변환을 하지 않으면 subMethod1 을 사용할 수 없다 . // super1 as SubClass1 // 주석을 해제 하면 Error가 해결된다. super1.subMethod1() // Error } open class SuperClass1 interface Inter1 class SubClass1 : SuperClass1() { fun subMethod1 () { println ( "subMethod1" ) } } class SubClass2 : Inter1 Kotlin: Unresolved reference: subMethod1 fun main () { val obj1:SubClass1 = SubClass1() val super1:SuperClass1 = obj1 super1 as Inter1 // Runtime Error } open class SuperClass1 interface Inter1 class SubClass1 : SuperClass1() { fu

Kotlin 형변환

Kotlin 형변환 변수에 담긴 값이나 객체를 다른 형태로 변환하는 것을 의미한다. Kotlin 은 모든 값을 객체로 관리하기 떄문에, Kotlin 에서의 형변환은 다른 클래스 타입의 객체로 변환하는것을 의미한다. 스마트 캐스팅 Java에서 자동형변환이라고 부르는 개념이다. 특정 조건을 만족하면 자동으로 형변환이 발생하는 개념이다. 스마트 캐스팅 기능 덕분에 형변환에 대해 개발자가 크게 신경을 쓰지 않아도 된다. 형 변환은 객체의 클래스 타입이 아닌 객체의 주소 값을 가지고 있는 참조 변수의 타입이 변경되는 것이다. 객체 타입 변환 객체의 타입변환은 상속관계나 구현한 인터페이스 타입에 해당한다. 부모클래스의 타입으로 형변환 fun main () { val obj1:SubClass1 = SubClass1() val obj2:SubClass2 = SubClass2() // 부모클래스 타입 참조 변수에 담는다 . val super1:SuperClass1 = obj1 } open class SuperClass1 interface Inter1 class SubClass1 : SuperClass1() class SubClass2 : Inter1\ 구현한 인터페이스 타입으로 형변환 fun main () { val obj1:SubClass1 = SubClass1() val obj2:SubClass2 = SubClass2() // 부모클래스 타입 참조 변수에 담는다 . val inter1:Inter1 = obj2 } open class SuperClass1 interface Inter1 class SubClass1 : SuperClass1() class SubClass2 : Inter1 구현한 인터페이스 타입으로 형변환 fun main () { val obj1:SubClass1 = SubClass1() val obj2:SubClass2 = SubClass2() val super1:Su

Kotlin - JetPack Compose Desktop Application 개발 기초

Kotlin - JetPack  Compose Desktop Application 개발 기초 Kotlin Jetpack Compose Desktop는 Kotlin 언어로 작성된 데스크톱 애플리케이션을 개발하기 위한 프레임워크입니다. 이를 사용하면 선언적 UI 프로그래밍 방식을 통해 사용자 인터페이스를 구축할 수 있습니다. Jetpack Compose Desktop은 Android용 Jetpack Compose의 데스크톱 버전으로, Android 앱이 아닌 일반적인 데스크톱 플랫폼에서 작동하는 애플리케이션을 만들 수 있습니다. 아래는 Kotlin Jetpack Compose Desktop 애플리케이션을 개발하기 위한 기초 단계입니다. 개발 환경 설정  1. IntelliJ IDEA - 2022.3.3  2. Kotlin -   3. JetPack Compose - 1.0.0  4. JDK - Amazon Correctoo 18.0.2 프로젝트 생성  1. File - New - Project  2. Compose Multiplatform  - name , location, configuration : Signal Platform.  - JDK 18 버젼 선택 및 다운로드  - Compose , gradle 빌드 시 , JDK 18 버젼이 필요하다.  

Kotlin Null 처리

null 처리 NullPointerException Java 언어로 소프트웨어를 개발하다 보면 NullPointerException 에러를 자주 만나게된다. 이는 객체의 주소값이 담겨져 있지 않는(null 값이 들어있는) 참조 변수를 통해 객체 접근을 시도하면 발생되는 오류이다. null safe  Kotlin 은 개발자가 null 이 담겨 있는 참조변수를 통해 객체 접근을 시도할때 오류가 발생되는 것을 방지하고자 다양한 방법을 제공하고 있다.  이를 통해 null 값에 대한 안정성을 확보 (null safe) 할 수 있다. ?: 연산자 ?: 연산자는 참조변수에 null 이 들어있으면 지정된 기본값을 반환한다. ?: 연산자는 nullable 타입 변수가 null인 경우 대체(default) 값을 지정하는 데 사용됩니다. 이 연산자를 사용하여 null인 경우 대체 값을 제공할 수 있습니다. fun main () { testFun1 ( " 문자열 " ) testFun1 ( null ) } fun testFun1 (str:String?) { val value1:String = str ?: " 기본문자열 " println (value1) } // 결과 문자열 기본문자열 ?. 연산자  참조 변수를 통해 메서드를 호출하거나 멤버 변수를 사용할 떄 참조 변수에 객체의 주소값이 들어있다면 객체에 접근해서 메서드나 변수를 사용한다. 만약 참조 변수에 null 이 들어 있다면 오류가 발생하지 않고 null 을 반환한다. ?. 연산자는 nullable 타입 변수 또는 객체에 접근할 때 사용됩니다. 해당 변수가 null이 아닌 경우에만 프로퍼티나 메소드에 접근하며, null인 경우에는 접근 대상을 null로 반환합니다. fun main () { testFun1 ( " 문자열 " ) testFun1 ( null ) } fun testFun1 (str:String?) { printl

Kotlin 중첩 클래스

Kotlin 중첩 클래스 중첩 클래스 클래스안에 만드는 클래스를 중첩클래스라고 부른다. 중첩 클래스에서는 각 클래스의 정의한 멤버를 사용할 수 있는가를 숙지 해야 한다. Inner 클래스는 OuterClass의 멤버변수를 사용하기가 쉬워진다. class Outer1 { inner class Inner { } } Inner Class , Outer Class 내부클래스는 외부 클래스로 부터 생성된 객체를 통해서만 객체 생성이 가능하다. 외부클래스는 내부클래스의 멤버를 자유롭게 사용할 수 없지만, 내부 클래스는 외부 클래스의 멤버를 자유롭게 사용할 수 있다. fun main () { var obj2 = Inner1() // Error } class Outer1 { inner class Inner1 { } } Kotlin: Unresolved reference: Inner1 내부클래스를 직접적으로 객체를 생성할 수 없기때문에, 에러가 발생한다. fun main () { var obj1 = Outer1() var obj2 = obj1.Inner1() } class Outer1 { inner class Inner1 { } } 외부클래스의 객체를 먼저 생성한뒤, 내부 클래스의 객체를 생성 할 수 있다. fun main () { var obj1 = Outer1() var obj2 = obj1.Inner1() } class Outer1 { val outerMember1 = 100 fun outerMethod1 () { println ( "Outer Method" ) println(innerMember1) // Error innerMethod1() // Error } inner class Inner1 { val innerMember1 = 100 fun inner