분류 전체보기
-
Kotlin in Action: ch 8. 고차 함수: 파라미터 반환 값으로 람다 사용(2)Book/Kotlin in Action 2023. 1. 11. 08:43
8.2 인라인 함수: 람다의 부가 비용 없애기 inline 변경자를 어떤 함수에 붙이면 컴파일러는 그 함수를 호출하는 모든 문장을 함수 본문에 해당하는 바이트코드로 바꿔준다. 무의미한 객체 생성 예방 인라인 함수를 사용하면 람다식을 사용했을 때 무의미하게 객체가 생성되는 것을 막을 수 있다. fun nonInlined(block: () -> Unit) { block() } fun doSomething() { nonInlined { println("do something") } } nonInlined라는 함수는 고차 함수로 함수 타입을 인자로 받고 있다. 그리고 doSomething()은 noInlined 함수를 호출하는 함수이다. 이러한 코드를 자바로 표현한다면 아래와 같다. public void non..
-
Koltin in Action: ch 8. 고차 함수 : 파라미터와 반환 값으로 람다 사용 (1)Book/Kotlin in Action 2023. 1. 8. 23:59
8.1 고차 함수 정의 고차 함수란? 고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수이다. 코틀린에서는 람다나 함수 참조를 사용해 함수를 값으로 표현할 수 있다. 따라서 고차 함수는 람다나 함수 참조를 인자로 넘길 수 있거나 람다나 함수 참조를 반환하는 함수이다. 함수 타입 함수 타입을 정의하려면 함수 파라미터의 타입을 괄호 안에 넣고, 그 뒤에 화살표(->)를 추가한 다음, 함수의 반환 타입을 지정하면 된다. Unit 타입은 의미 있는 값을 반환하지 않는 함수 반환 타입에 쓰는 특별한 타입이다. 그냥 함수를 정의한다면 함수의 파라미터 목록 뒤에 오는 Unit 변환 타입 지정을 생략해도 되지만 함수 타입을 선언할 때는 반환 타입을 반드시 명시해야하므로 Unit을 빼먹어서는 안된다. 예를 들기..
-
[동적 계획법 : 다이나믹 프로그래밍] BOJ 9095 1,2,3 더하기Algorithm 2023. 1. 8. 23:10
다이나믹 프로그래밍 문제집에 속한 문제를 풀고있습니다 참고: https://www.acmicpc.net/workbook/view/7319 문제집: 0x10강 - 다이나믹 프로그래밍 (BaaaaaaaaaaarkingDog) www.acmicpc.net 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 시간제한: 1초 풀이 A(n) - A(n-1), 즉 n-1을 만드는 모든 경우 각각에 대해 그 뒤에 1을 더하는 것과 - A(n-2), 즉 n-2를 만드는 모든 경..
-
Kotlin in Action: 7.4-7.5 구조 분해 선언과 component 함수, 프로퍼티 접근자 로직 재활용: 위임 프로퍼티Book/Kotlin in Action 2023. 1. 6. 14:05
7.4 구조 분해 선언과 component 함수 구조 분해를 사용하면 복합적인 값을 분해해서 여러 다른 변수를 한꺼번에 초기화 할 수 있다. data class Point(val x: Int, val y: Int) fun main(args: Array) { val p = Point(10, 20) val (x, y) = p println(x) println(y) } 구조 분해 선언은 = 의 좌변에 여러 변수를 괄호로 묶어 사용한다. 내부에서 구조 분해 선언은 다시 관례를 사용한다. 각 변수를 초기화하기 위해 componentsN 이라는 함수를 호출한다. 여기서 N 은 구조 분해 선언에 있는 변수 위치에 따라 붙는 번호다. data 클래스의 주 생성자에 들어있는 프로퍼티에 대해서는 컴파일러가 자동으로 com..
-
Kotlin in Action: 7.2-7.3 비교 연산자 오버로딩, 컬랙션과 범위에 대해 쓸 수 있는 관례Book/Kotlin in Action 2023. 1. 6. 13:40
7. 2 비교 연산자 오버로딩 동등성 연산자 : equals 코틀린에서는 모든 객체에 대해 비교 연산을 수행하는 경우 equals나 compareTo를 호출해야하는 자바와 달리 "==" 비교 연산자를 직접 사용할 수 있어서 비교하는 코드가 더 간결하며 이해하기 쉽다. 코틀린은 "=="연산자 호출을 equals()로 컴파일하며, "!="역시 equals()를 사용하여 결과 값을 not 처리하는 식으로 동작한다. a==b라는 코드는 실제로 내부에서 인자의 null 체크를 하므로 다른 연산자와 달리 null이 될 수 있는 값(nullable)에도 적용할 수 있다. 동등성 검사 ==는 equals 호출과 null 체크로 컴파일된다. 실제 내부 코드는 아래와 같이 구현되어 있다. 이 경우 a가 null인지 판단해..
-
Kotlin in Action: 7.1 산술 연산자 오버로딩Book/Kotlin in Action 2023. 1. 6. 12:59
7. 1 산술 연산자 오버로딩 오버로딩 : 한 클래스내에 같은 이름의 메서드를 여러개 정의 하는 것 코틀린에서는 특정 연산자의 역할을 함수로 정의할 수 있다. 이를 Convention(관례)이라고 한다. 가장 기본적인 예로는 산술 연산자가 있다. 자바에서는 원시 타입(primitive)에 대해서만 산술 연산자를 사용할 수 있고, 추가로 String에 대해 "+" 연산자를 사용할 수 있다. 이항 산술 연산 오버로딩 코틀린에서는 +, - 같은 산술 연산자를 오버로딩해서 사용할 수 있다. 객체끼리 더하거나 뺄 때, 원하는 동작을 함수 안에 구현하면 연산자를 통해 이를 표현할 수 있다. data class Point(val x: Int, val y: Int) { operator fun plus(other: Po..
-
[Machine Learning] Decision Tree: Gini importance 구하는 함수 직접 구현하기AI/Machine Learning 2022. 11. 29. 23:34
구현에 들어가기 전에 Decision Tree와 Gini Importance를 다시 짚고 가보자. 1. Decision Tree 우리 말로 의사결정 나무라고 부르는 Decision Tree는 해석 가능한 모델이다. 즉, 예측 결과를 알 수 있을 뿐만 아니라 왜 그렇게 예측하는지에 대한 설명이 가능하다. 또한, 학습에 시간이 오래걸리는 대신 분류 시 계산이 쉽고 빨라 간단하고 정확하다는 장점이 있다. 2. Gini Importance 의사결정 나무의 분리가 잘 된 것을 판단하기 위해서는 불순도라는 개념을 먼저 알아야한다. (이미 불순도의 개념을 안다고 생각하고 넘어가겠다.) 변수 중요도란, 학습된 모형에 대하여 반응 변수와의 관련성 또는 예측 관점에서 각 변수들의 영향력을 수치화한 것이다. Class가 총..
-
Kotlin in Action: 6.3 컬렉션과 배열Book/Kotlin in Action 2022. 11. 25. 00:54
6.3 컬렉션과 배열 6.3.1 널 가능성과 컬렉션 컬렉션을 선언할 때 변수 타입 뒤에 ?를 붙이면 그 변수에 널을 저장할 수 있다는 뜻으로 사용할 수 있다. 널이 될 수 있는 객체를 만들 때 전체를 널이 될 수 있게 만드는지, 아니면 원소만 널이 될 수 있게 만드는지 조심해야 한다. fun addValidNumbers(numbers: List) { var sumOfValidNumbers = 0 var invalidNumbers = 0 for (number in numbers) { if (number != null) { sumOfValidNumbers += number } else { invalidNumbers++ } } println("Sum of valid numbers: $sumOfValidNumb..