kotlin
-
kotlin) 어노테이션과 리플렉션kotlin 2024. 7. 24. 23:10
코틀린의 어노테이션@Retention어노테이션이 저장되고 유지되는 방식을 제어SOURCE : 어노테이션이 컴파일 때만 존재한다.BINARY : 어노테이션이 런타임 때도 있지만, 리플렉션을 쓸 수 없다.RUNTIME : 어노테이션이 런타임 때 존재하고, 리플레션을 쓸 수 있다.(기본값)@Retention(AnnotationRetention.RUNTIME) //어노테이션이 저장되고 유지되는 방식을 제어annotation class Shapepublic class TestAnnotation {}@Tartget어노테이션이 어디에 붙일지 선택할 수 있다. 종류가 많다.@Target(AnnotationTarget.FIELD, AnnotationTarget.ANNOTATION_CLASS) annotatio..
-
kotlin) 제네릭kotlin 2024. 7. 21. 15:35
제네릭과 타입 파라미터SafeType Casting 과 Elvis Operator추상 클래스 상속과 타입변환의 문제점fun main() { val cage = Cage() cage.put(Carp("잉어"))// val carp: Carp = cage.getFirst() //cage 에 잉어만 있지만, getFirst() 메소드를 호출하면 Animal 이 나온다. val carp : Carp = cage.getFirst() as Crap //Carp 으로 단순 형변환을 하면 되지만 이러면 위험한 코드가 되어버린다. cage.put(GoldFish("금붕어")) val goldFish : Carp = cage.getFirst() as Carp //만약에 cage 안에 넣은게 Car..
-
kotlin) 복잡한 함수형 크로그래밍kotlin 2024. 7. 20. 02:50
고차 함수와 함수 리터럴고차함수하나 이상의 함수를 인자로 받거나, 함수를 반환하는 함수고차 함수는 함수형 프로그래밍의 핵심 개념 중 하나로, Kotlin은 이를 언어 차원에서 지원고차 함수를 통해 코드를 더 유연하고 재사용 가능하게 만들 수 있음//고차함수 Xfun add(num1: Int, num2: Int): Int{ return num1 + num2}//op: (Int,Int) -> Int 를 통해 함수를 인자로 받음 , 고차함수 Ofun compute(num1: Int, num2: Int, op: (Int,Int) -> Int): Int{ return op(num1, num2)} 반환 타입에도 함수가 들어갈 수 있다.//Int,Int 를 받아 Int 함수를 반환하는 함수fun opGen..
-
kotlin) Kotlin 의 지연과 위임kotlin 2024. 7. 18. 23:10
lateinit과 lazy인스턴스화 시점과 프로퍼티 초기화 시점class Person( val name: String,) { val isKim: Boolean get() = this.name.startsWith("JS") //JS -> J* val maskingName: String get() = name[0] + (1 until name.length).joinToString("") { "*" }}fun main() { val person = Person("JS") //클래스 인스턴스화가 이루어지며, name 에 "JS"가 들어간다.}클래스 인스턴스화 시점:val person = Person("JS")에서 Person("JS")를 호출하는 시..
-
kotlin) 추가적으로 알아두어야 할 코틀린 특성kotlin 2024. 7. 13. 17:04
코틀린의 이모 저모1. Type Alias 와 as import개념 : 긴 이름의 클래스 혹은 함수 타입이 있을때 축약하거나 더 좋은 이름을 쓰고 싶을때 사용 Type Alias//기존 함수fun filterFruits(fruits: List, filter: (Fruit) -> Boolean): List {}//typealias 를 통해 미리 type 을 정해서 적용typealias FruitFilter = (Fruit) -> Booleanfun filterFruits(fruits: List, filter: FruitFilter): List {}data class UltraUperGuardianTribe( val name : String)//이름이 긴 클래스를 컬렉션에 사용할 때도 간단하게 줄일 수..
-
kotlin) 코틀린에서의 FPkotlin 2024. 7. 9. 23:04
코틀린에서 배열과 컬렉션을 다루는 방법1. 배열//Java int[] array= {100, 200};for(int i = 0; i 2. 코틀린에서의 Collection - List, Set, Map컬렉션을 만들어줄 때 불변인지, 가변인지를 설정해야 한다.가변 컬렉션 : 컬렉션에 element 를 추가 삭제할 수 있다.불변 컬렉션 : 컬렉션에 element 를 추가 삭제할 수 없다.* element : 콜렉션 내부에 저장되는 각각의 개별 항목코틀린에서 람다를 다루는 방법1. Java에서 람다를 다루기 위한 노력기존 Java 의 문제점'익명 클래스' 를 사용하는것은 복잡하다.다양한 Filter 가 필요할 수 있다.-> JDK8 부터 람다 (이름이 없는 함수) 등장 람다변수 -> 변수를 이용한 함수(변수1,..
-
kotlin) 코틀린에서의 OOPkotlin 2024. 7. 6. 15:04
코틀린에서 클래스를 다루는 방법클래스와 프로퍼티, 생성자와 init, 커스텀 getter, setter, backing field- Java 생성자 코드public class JavaPerson { private final String name; private int age; public JavaPerson(String name) { this(name, 1); } public String getName() { return name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isAdult() { return this.ag..
-
kotlin) 코틀린에서 변수와 타입, 연산자를 다루는 방법kotlin 2024. 7. 4. 21:03
코틀린에서 변수를 다루는 방법1. 변수 선언 키워드var : 변경 가능한 변수//javalong number1 = 10L;//kotlinvar number1 = 10Lval : 변경 불가능한 변수//javafinal long number1 = 10L;//kotlinval number1 = 10L변수 추론java 에서는 String,Long 같은 Type 을 지정해줘야하지만 kotlin 에서는 지정할 필요가 없다그것을 가능하게 만드는것이 “변수 추론”var number1 = 10L //이미 "10L" 이라는 값을 통해서 number1 이 "Long" Type 인것을 알 수 있다.var number1: Long //값이 없을 경우 : 를 통해 number1 의 Type 을 지정해 줄 수 있다.코틀린의..