Back End/Kotlin 10

Kotlin - DSL

Kotlin 의 편의성 지원 Java Kotlin 특성 StringUtil.capitalize(s) s.capitalize() 확장 함수 1.to("one") 1 to "one" 중위 호출 set.add(2) set += 2 연산자 오버로딩 map.get("key") map["key"] get 메서드에 대한 관례 file.use({ f -> f.read() }) file.use { it.read() } 람다를 괄호 밖으로 빼내는 관례 sb.append("yes") sb.append("no") with (sb) { append("yes") append("no") } 수신 객체 지정 람다 DSL 외부 DSL : SQL SELECT Country.name, COUNT(Customer.id) FROM Count..

Back End/Kotlin 2023.06.24

Kotlin - annotation, reflection

애노테이션 사용 지점 대상 지정 대상 설명 property 프로퍼티 전체 field 프로퍼티에 생성되는 필드 get 프로퍼티 게터 set 프로퍼티 세터 receiver 확장 함수, 프로퍼티의 수신 객체 파라미터 param 생성자 파라미터 setparam 세터 파라미터 delegate 위임 프로퍼티의 위임 인스턴스를 담아둔 필드 file 파일 안에 선언된 최상위 함수와 프로퍼티를 담아두는 클래스 class HasTempFolder { @get:Rule val folder = TemporaryFolder() @Test fun testUsingTempFolder() { val createdFile = folder.newFile("myFile.txt") val createdFolder = folder.newFo..

Back End/Kotlin 2023.06.17

Kotlin - 고차 함수

고차 함수 : 다른 함수를 인자로 받거나 함수를 반환하는 함수 함수 타입 val sum: (Int, Int) -> Int = ( x, y -> x + y } val action: () -> Unit = { println(1) } 문법 : 파라미터 타입 -> 반환 타입 인자로 받은 함수 호출 fun twoAndThree(operation: (Int, Int) -> Int) { val result = operation(2, 3) println("result = $result") } >>> twoAndThree { a, b -> a + b } result = 5 >>> twoAndThree { a, b -> a * b } result = 6 자바에서 코틀린 함수 타입 사용 // Kotlin fun proces..

Back End/Kotlin 2023.06.03

Kotlin - 연산자 오버로딩

산술 연산자 오버로딩 이항 산술 연산 오버로딩 연산자 키워드 a * b times a / b div a % b mod a + b plus a - b minus data class Point(val x: Int, val y: Int) { operator fun plus(other: Point) : Point { return Point(x + other.x, y + other.y) } } >>> val p1 = Point(10, 20) >>> val p2 = Point(30, 40) >>> println(p1 + p2) Point(x=40, y=60) 피연산자 타입이 다른 경우 operator fun Point.times(scale: Double) : Point { return Point((x * scale..

Back End/Kotlin 2023.05.27

Kotlin - 타입 시스템

널 가능성 fun strLen(s: String) = s.length // null 전달 불가 fun strLen(s: String?) : Int = if (s != null) s.length else 0 // null 전달 가능 - 널이 될 수 있는 값을 널이 될 수 없는 타입의 변수에 대입 불가 - 널이 될 수 있는 타입의 값을 널이 될 수 없는 타입의 파라미터를 받는 함수에 전달 불가 안전한 호출 연산자 : ?. fun managerName(employee: Employee): String? = employee.manager?.name 엘비스 연산자 : ?: fun foo(s: String) { val t: String = s ?: "" } - null 대신 디폴트 값을 지정할 때 사용 안전한 캐스..

Back End/Kotlin 2023.05.06

Kotlin - 람다 프로그래밍

람다 기본 문법 val peoples = listOf(Person("alice", 29), Person("bob", 31)) println(peoples.maxBy { it.age }) // Persion(name=bob, age=31) peoples.maxBy(persion::age) val = sum { x: Int, y: Int -> x + y } sum(1, 2) run : 인자로 받은 람다를 실행해주는 라이브러리 함수 run { println(42) } peoples.maxBy({ p: Person -> p.age }) peoples.maxBy() { p: Person -> p.age }) 인자에 람다 넘기기 peoples.joinToString(seperator = " ", transform ..

Back End/Kotlin 2023.05.01

Kotlin - 기초

함수 fun sum(a: Int, b: int) : Int { return a + b } fun sum(a: Int, b: Int) = a + b 변수 val = value, 변경 불가 var = variable, 변경 가능 문자열 템플릿 fun main(args: Array) { println("${if (args.size > 0) args[0] else ""}") } 클래스 class Database(val name: String) 프로퍼티 class Database( val name: String, var isOpenSource: Boolean ) 커스텀 접근자 class Database( val name: String, var isOpenSource: Boolean ) { val isFree: B..

Back End/Kotlin 2023.04.15