본문 바로가기

IT/kotlin언어

[kotlin] 제너릭 변성(variance) 정리 안녕하세요 남갯입니다 오늘은 제너릭 타입에대해 정리해보려고합니다 SubType 이란? subType이란 어떤 class가 다른클래스를 상속받은것을 의미한다. 즉 타입 A가 필요한 곳에 타입 B 값을 넣어도 문제가 없다면 B는 A의 하위타입인 것이다. 예를들어 open class A() { val x = 0 val y = 1 } class B : A(){ val z = 2 } 와 같이 B는 A를 상속받았으므로 A의 subType이다. var a = A() var b = B() a = b는 가능하지만 var a = A() var b = B() b = a는 mismatch가 난다. 즉 A타입이 필요한곳에 B를 넣었는데 문제가 없으므로 B 는 A의 SubType인것이다. 무공변성(invariance) 제너릭타입..
[코틀린] Higher order function 정리 안녕하세요 남갯입니다 오늘은 코틀린의 higher order function에 대해 포스팅해보려고합니다. - higher order function 이란? higher order function은 간단하게 두개를 만족하는 함수를 일컫습니다. 1. 함수에 파라미터로 전달하는 함수2. 함수를 반환(리턴)하는 함수 higher order function이 되기위해선 일급객체(first class citizen)가 되어야합니다. - 일급객체(firstclass citiezen) 이란? 일급객체란 아래의 조건을 만족하는것을 말합니다. 1. 변수나 데이터 할당 할 수 있어야한다. val test1: () -> Unit = { println("firstCitizen") } // firstCitizen 2. 객체의 인..
[fold 함수] fold 함수 알아보기 안녕하세요 남갯입니다 오늘은 fold 함수에 대해 간단히 포스팅 해보려고합니다. fold 함수는 inline fun Array.fold( initial: R, operation: (acc: R, T) -> R ): R ........ Accumulates value starting with initial value and applying operation from left to right to current accumulator value and each element. -출처 https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/fold.html 초기값을 설정해주고 왼쪽부터 오른쪽까지 현재의 계산값에 각각을 적용하는 함수입니다. val sum..
[Kotlin] 코틀린 스트림 함수 (map, flatMap, groupBy, filter, take, drop, first, distinct, zip, joinToString, count, any, none, max, min, average) 안녕하세요 YTS 입니다. 오늘은 코틀린의 스트림 함수에 대해 적어보려합니다. 스트림 함수 map() : 변환 map()은 컬랙션 내 인자를 변환하여 반환할 때 사용됩니다. class Map { val animals = listOf("사자", "호랑이", "코끼리") fun map() { animals.map { animal -> "동물의 이름은 ? = " + animal }.forEach { println(it) } } } mapIndexed() : 변환 mapIndexed()는 컬랙션에 포함된 인자의 인덱스 값을 변환하여 사용할 수 있습니다. class MapIndexed { val numbers = 0..10 fun mapIndexed() { numbers.mapIndexed { index, num..
[Kotlin] 코틀린 클래스 (Data Class)와 한정 클래스 (Sealed Class), Getter / Setter 안녕하세요 YTS 입니다. 오늘은 코틀린의 클래스에 대해 적어보려합니다. 클래스 데이터 클래스 코틀린에서는 데이터 클래스라를 제공합니다. 여기선 프로퍼티들만 선언하면 hashCode(), equals(), toString() 함수를 자동으로 생성해줍니다. 각 예제들은 String template를 이용하여 출력 해보도록 하겠습니다. *String template = $필드명/변수명 or ${표현식} 형태로 우리가 원하는 값이 대입된 문자열을 얻을 수 있습니다. data class Animal(val name: String, val age: String) { fun print() { val elephant = Animal("Elephant", "10") val elephant2 = Animal("Eleph..
[Kotlin] 코틀린 흐름제어 (if-else, .., for, while, do-while when) 안녕하세요 YTS 입니다. 흐름제어 if-else 문 코틀린에서 if-else 문은 자바의 if-else문과 비슷하게 쓰입니다. 다른점이 있다면 if-else 문을 이용하여 삼항 연산자를 만들 수 있는데요. 예제를 살펴볼까요? class Ifelse { val height: Int = 184 var heightRange: String = "" fun whatHeightRange() { if (height >= 170 && height = 180 && height = 190 && height < 200) { heightRange = ..
[Kotlin] 코틀린 자료/ 자료형의 확인 및 변환 (==, ===, is, as, 스마트 캐스트) 안녕하세요 YTS 입니다. 자료 또는 자료형의 확인 및 변환 자료의 동일성확인 ==,=== 연산자 자바에서는 자료의 동일성을 확인할때에 == 연산자를 사용하기도 합니다.하지만 일반객체에서는 값뿐 만 아니라 객체 자체가 동일한지 여부도 따지기 때문에 equals() 메서드를 사용하여 객체의 값을 확인합니다. 코틀린에서는 비교 대상이 객체, 객체 값의 동일성을 확인 하기 위해 구분할 필요 없이 모두 == 연산자를 사용하면 됩니다. 또한 ==연산자는 Null 여부도 함께 확인하기 때문에 자바처럼 널 포인트 오류를 방지 하실 필요가 없습니다. class Equlas { val a: String = "equlas" val b = a val c: String = "equlas" val aEqualsB: Boolea..
[코틀린] mvvm패턴 속 application context 가져오기 안녕하세요 남갯입니다 오늘은 MVVM패턴속에 context를 인자로 넘겨주지 않기때문에 application 에서 context를 가져오는 방법에 대해 알려드리려고합니다 드로우어블 리소스나 스트링 리소스를 가져올때 자바의 경우 아래와 같이 작성하면 됩니다 public class Application extends android.app.Application { private static Application instance; public static Application getInstance(){ return instance; } @Override public void onCreate() { super.onCreate(); instance = this; } public Context applicaitonC..