본문 바로가기

전체 글

(57)
코틀린(Kotlin) - 구조 분해 선언과 component 함수 데이터 클래스의 특성 중 convention 원리와 관련된 특성인 구조 분해 선언(destructuring declaration)에 대해 살펴보도록 하겠습니다. 데이터 클래스에 대한 기본적인 내용은 아래 포스팅을 참고하시면 됩니다. ^^ 2020.03.03 - [코틀린] - 코틀린(Kotlin) - 데이터 클래스와 클래스 위임(by) 코틀린(Kotlin) - 데이터 클래스와 클래스 위임(by) 자바와 마찬가지로 코틀린 클래스도 toString, equals, hashCode 등을 오버라이드 할 수 있고, 코틀린은 이런 메소드 구현을 자동으로 생성해줄 수 있습니다. 데이터 클래스 어떤 클래스에 대해 toString, 0391kjy.tistory.com 디스트럭쳐링(Destructuring) 구조 분해를 사..
코틀린(Kotlin) - 산술 연산자 오버로딩 코틀린에서는 특정 연산자의 역할을 함수로 정의할 수 있습니다. 이를 Convention(관례)이라고 합니다. 가장 기본적인 예로는 산술 연산자가 있습니다. 자바에서는 원시 타입(primitive)에 대해서만 산술 연산자를 사용할 수 있고, 추가로 String에 대해 "+" 연산자를 사용할 수 있습니다. 그러나 다른 클래스에서도 이러한 산술 연산자가 유용한 경우가 있기 마련입니다. 지금부터, 어떻게 클래스에 대한 일반 산술 연산자를 정의할 수 있는지에 대해 살펴보도록 하겠습니다. 이항 산술 연산 오버로딩 코틀린에서는 +, - 같은 산술 연산자를 오버로딩해서 사용할 수 있습니다. 객체끼리 더하거나 뺄 때, 원하는 동작을 함수 안에 구현하면 연산자를 통해 이를 표현할 수 있습니다. /* plus 연산자 구현하..
코틀린(Kotlin) - 컬렉션과 배열 코틀린 컬렉션은 자바 라이브러리를 바탕으로 만들어졌고 코틀린의 확장 함수를 통해서 다양한 기능이 제공되며, 추가할 수 있다는 사실을 알고 있습니다. 이 외에도 코틀린의 컬렉션 지원과 자바와 코틀린 컬렉션 간의 관계에 대해 더 상세히 살펴보도록 하겠습니다. null 가능성과 컬렉션 컬렉션 안에 null 값을 넣을 수 있는지 여부는 어떤 변수의 null 여부를 정하는 것만큼이나 마찬가지로 중요합니다. 컬렉션 타입 인자에도 ? 를 붙이면 null이 될 수 있는 값으로 이뤄진 컬렉션을 만들 수 있습니다. /* null이 될 수 있는 값으로 이뤄진 컬렉션 만들기 */ fun readNumbers(reader: BufferedReader) : List { val result = ArrayList() //null이 ..
코틀린(Kotlin) - 원시 타입(primitive type) 원시 타입(Primitive Type) : Int, Boolean 등... 코틀린은 원시 타입(primitive type)과 래퍼 타입(wrapper type)을 따로 구분하지 않습니다. 즉, 자바처럼 Integer와 int로 구분하지 않고 Int 하나만 존재하는 형태입니다. /* 정수 표현 예제 */ val i: Int = 1 val list: List = listOf(1, 2, 3) 위 예제와 같이 Integer 또는 int 구분 없이 Int 하나로 사용하면 됩니다. primitive와 wrapper 타입이 같다면 코틀린은 항상 객체로 표현하는 걸까요? 그렇다면 너무나 비효율적이지 않을까요? 라는 의문이 생기는데요, 다행히 코틀린은 그러지 않습니다. 코틀린의 타입은 컴파일 시 자바의 primitive..
Dagger Hilt로 안드로이드 의존성 주입하기 Dependency Injection 의존성 주입(Dependency Injection)은 여러 컴포넌트간의 의존성이 강한 안드로이드에서 클래스 간 의존성을 낮춰줍니다. 객체 생성 시 클래스 간 의존성이 생기게 되는데 이때, 객체의 생성을 클래스 내부에서 하는 게 아니라 클래스 외부에서 객체를 생성하여 주입시켜주는 디자인 패턴을 말합니다. 그렇다면 의존성 주입이라는 용어는 어떤 의미일까요? 의존성? 클래스 간의 의존 관계를 가지는 상황으로 A클래스 내부에서 B클래스가 생성, 사용되는 경우라고 볼 수 있습니다. class B { val id = "newtopia" } class A { val data = B() //의존관계 생성 } >>> println(A().data.id) //A클래스는 B클래스에 의존..
코틀린(Kotlin) - 타입 파라미터의 null 가능성 코틀린에서는 함수나 클래스의 모든 파라미터는 null이 될 수 있습니다. 따라서 타입 파라미터 T를 클래스나 함수 안에서 사용하면 변수명 끝에 물음표가 없더라도 T가 null이 될 수 있는 타입입니다. /* null이 될 수 있는 타입 파라미터 예제 */ fun printHashCode(t: T) { println(t?.hashCode()) //"t"가 null이 될 수 있으므로 안전한 호출을 사용 } >>> printHashCode(null) //"T"의 타입은 "Any?"로 추론된다. null 위의 예제 printHashCode 함수 호출에서 타입 파라미터 T에 대해 추론한 타입은 null이 될 수 있는 Any? 타입으로 추론이 되었습니다. t 파라미터의 타입 T에는 분명히 물음표가 붙어있지 않지만 ..
코틀린(Kotlin) - 타입 시스템 as?, !!, let, lateinit 안전한 캐스트 "as?" 기본적으로 "as" 연산자는 대상 값을 as로 지정한 타입으로 캐스트 하며, 해당 타입으로 바꿀 수 없으면 ClassCastException이 발생하게 됩니다. 이럴 경우 is 연산자를 통해 대상 값이 해당 타입으로 변환 가능한 타입인지 체크해야 하지만 코틀린에서는 훨씬 더 간결한 기능으로 "as?" 연산자를 제공합니다. "as?" 연산자는 어떤 값을 지정한 타입으로 캐스트를 하고, 만약 대상 타입으로 캐스트 할 수 없으면 null을 반환하게 됩니다. /* 안전한 캐스트를 사용해 equals 구현하는 예제 */ class User(val id: String) { override fun equals(o: Any?): Boolean { val otherUser = o as? User..
2021년 3월 23일, Android System WebView 충돌 이슈 해결 방법! 문제 발생 2021년 3월 23일 오전부터 일부 안드로이드 폰에서 앱이 실행되지 않는(앱 중단) 문제가 발생하였습니다. 금일 오전 삼성서비스 센터에도 아래와 같이 긴급 안내문이 공지되었습니다. 원인은 구글의 Android System WebView 최신 업데이트 버전에서 문제가 발생한 것으로 알려진 상황이며, 임시적인 해결 방법은 아래와 같습니다! 해결 방법 두가지! ▶ 구글 플레이 스토어에서 "Android system Webview" 검색 -> 제거 ▶ 앱 설정 -> 애플리케이션 -> Webview 검색 -> Android System Webview 선택 -> 오른쪽 상단 점 세개(메뉴버튼) -> 업데이트 삭제