Kotlin Primitive Type Casting (기본 타입의 형 변환)

Primitive Type Casting (기본 타입의 형 변환) Kotlin 에서는 기본 타입을 관리하는 객체의 타입을 변경하는 메서드를 제공한다. 참조 변수의 타입이 변경되는 것이 아닌 새로운 객체가 생성되어 반환된다. toByte(), toShort(), toInt(), toLong(), toFloat(), toDouble(), toChar() 소개 코틀린에서 데이터 타입은 기본 타입과 참조 타입으로 분류됩니다. 기본 타입에는 Byte, Short, Int, Long, Float, Double, Char 등이 포함되며, 참조 타입은 클래스와 인터페이스를 포함합니다. 기본 타입을 다룰 때는 서로 다른 타입 사이에서 변환하거나 형변환하는 방법을 이해하는 것이 중요합니다. 코틀린은 이러한 변환을 위한 다양한 메서드를 제공합니다. 기본 타입(Primitive Type)  Byte, Short, Int, Long, Float, Double, Char, Boolean 등 기본적인 데이터 타입으로, Java와 비슷하게 동작합니다. 기본 타입은 자바의 원시 타입과 유사하지만, 코틀린에서는 모든 것이 객체이므로 기본 타입도 내부적으로 객체로 취급됩니다. 참조 타입(Reference Type) 클래스, 인터페이스 등과 같이 사용자가 직접 정의한 타입으로, 기본 타입이 아닌 모든 타입을 참조 타입으로 간주합니다. 메모리 할당 기본 타입은 값(value) 자체를 저장하기 위해 스택(stack) 메모리에 직접 할당됩니다. 따라서 빠르고 메모리 사용이 효율적입니다. 참조 타입은 객체를 표현하는 참조(reference)를 스택 메모리에 할당하고, 실제 객체는 힙(heap) 메모리에 저장됩니다. 이로 인해 객체의 크기가 크거나 복잡한 구조를 가질 때 더 많은 메모리를 차지하고, 메모리 할당 및 해제에 일정한 오버헤드가 발생할 수 있습니다. 기본 타입 형변환 예제 fun main () { val intValue: Int = 42 val longValue: Long...

Kotlin Any Type

Any Type Kotlin은 모든 클래스가 직접 혹은 간접적으로 Any 클래스를 상속받는다. 따라서 모든 객체의 주소 값은 Any 타입 참조 변수에 담을 수 있다. Any 타입과 is 연산자를 활용하여 다양한 타입의 객체에 대응할 수 있는 코드를 만들 수 있다. Any 코틀린에서 any는 모든 타입의 상위 타입(슈퍼 타입)이며, 모든 클래스의 공통 조상입니다. 즉, 모든 코틀린 클래스의 인스턴스를 저장할 수 있는 공통의 타입을 말합니다. Any는 자바의 Object와 유사한 역할을 합니다. 코틀린의 클래스들은 기본적으로 Any 클래스를 상속받기 때문에, 모든 클래스의 인스턴스는 Any 타입으로 취급될 수 있습니다. fun main () { val obj1:SubClass1 = SubClass1() val obj2:SubClass2 = SubClass2() anyMethod (obj1) anyMethod (obj2) anyMethod ( 100 ) anyMethod ( " 문자열 " ) } open class SuperClass1 interface Inter1 class SubClass1: SuperClass1() { fun subMethod1 () { println ( "SubClass1 의 subMethod1 입니다 " ) } } class SubClass2: Inter1 { fun subMethod2 () { println ( "SubClass2 의 subMethod1 입니다 " ) } } fun anyMethod (obj : Any){ println (obj. javaClass ) if ( obj is SubClass1 ) { obj .subMethod1() } else if ( obj is SubClass2 ) { obj .subMethod...

Kotlin is 연산자

Kotlin is 연산자 형 변환이 가능하면 변환을 하고 true를 반환한다. if 문으로 구성하여 사용하며, if 문 내에서만 변환된 타입을 사용하고 if 문을 나가게 되면 변환되기전의 타입으로 다시 변경된다. fun main () { val obj1:SubClass1 = SubClass1() val chk1 = obj1 is SuperClass1 println ( "chk1 : $ chk1 " ) } open class SuperClass1 class SubClass1: SuperClass1() 결과값 > chk1 : true SubClass1 이 SuperClass1 을 상속받았으므로, SubClass1 으로 만들어진 obj1 은 SuperClass1 으로 형변환이 가능하다. 따라서 Boolean 타입 변수인 chk1 은 true 로 리턴이 된다. fun main () { val obj1:SubClass1 = SubClass1() val chk1 = obj1 is SuperClass1 val chk2 = obj1 is Int // 에러 발생 println ( "chk1 : $ chk1 " ) } open class SuperClass1 class SubClass1: SuperClass1() Kotlin: Incompatible types: Int and SubClass1  obj1 은 Int 타입으로 할당 할 수 없기 때문에 위와 같은 오류메시지가 발생한다. 오류 메시지는 일반적으로 Kotlin에서 SubClass1의 인스턴스를 Int 타입의 변수에 할당하려고 할 때 발생합니다. 이는 호환되지 않는 타입이기 때문에 허용되지 않습니다. fun main () { val obj1:SubClass1 = SubClass1() val super1:SuperClass1 = obj1 val chk1 = super1 is SubClass1 ...

Android Studio 에서 Signature APP 만들기

이미지
  Android Studio 에서 Signature APP 만들기 Android Studio , 에뮬레이터환경에서 Signature App을 만드는 방법에 대해서 기술한다. Android 권한과 관련하여 시스템적으로 중요 정보를 얻기 위해서는 Protection Level 이 Signature 이상이여야 한다. 즉, 시스템 권한이 필요한 경우 pre-built된 앱 혹은 동일한 플랫폼 사이닝키로 인증된 경우 사용 가능하다. 아래는 Android Studio 를 통해서 에뮬레이터 환경에서 플랫폼 사이닝키로 인증하는 방법에 대해서 알아보자. AOSP 퍼미션 정책 AOSP Permision Protection Level Protection Level 선언부 접근 권한 서드파티 앱 normal  "normal" 각 앱에서 <use-permission/> 선언 후, 사용자 동의 없이 사용 가능 사용 가능 dangerous  "dangerous" 각 앱에서 <use-permission/> 선언 후, 사용자 동의 하에 사용 가능 (유저 퍼미션 팝업 및 동의 필요) 사용 가능 signatureOrSystem  "signature|privileged " 아래 signature에 해당되거나, system/priv-app/ 경로에 프리빌트된 앱에서 사용 가능 사용 불가 (플랫폼 사이닝 키 필요) signature  "signature" <permission/> 선언한 앱과 <use-permission/> 선언한 앱이 동일한 인증서로 사인된 경우 사용 가능 사용 불가 (플랫폼 사이닝 키 필요) *signature → certificate: "platform" *system → privileged: true *privileged → allowlist → required: ["allowed_privapp_com.android.car.rotary...

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...