본문 바로가기

프로그래밍/Kotlin

(11)
[Kotlin 요약 정리] 11. 고차 함수와 인라인 함수 11. 고차 함수와 인라인 함수 1) 고차함수 - 매개변수로 함수를 전달받거나 함수를 반환하는 함수 - 매개변수가 함수 1개일 경우 괄호() 를 생략하고 예약어 형태로 사용 가능 fun function1(func: (Int) -> Int, num: Int) = func(num) fun function2(func: (Int) -> Int) = func(10) fun pr(func: (Any) -> Any) = println(func(10)) fun main() { val a = function1({ it * 10 }, 10) val b = function2( { it * 10} ) val c = function2 { it * 10} println("a: $a / b: $b / c: $c") pr { 10 ..
[Kotlin 요약 정리] 10. 함수형 프로그래밍과 람다 10. 함수형 프로그래밍과 람다 1) 함수형 프로그래밍 - 함수를 일급 객체로 사용하는 프로그래밍 패러다임 - 객체지향 프로그래밍에서 클래스를 일급 객체로 사용한다고 하면 함수형 프로그래밍에서는 함수가 일급 객체로 사용된다. 따라서 매개변수와 반환 값을 함수로 이용할 수 있어야한다. - 순수 함수 사용 원칙 *순수함수: 함수 외부의 다른 값을 변경하지 않는 함수 - 데이터 불변성: 데이터는 변경되지 않으며 프로그램의 상태만 표현한다. - 장점: 코드가 간결해져서 개발 생산성과 유지 보수성이 증대되며 동시성 작업을 더욱 쉽고 안전하게 구현할 수 있다. 2) 변수에 함수 대입 - 함수를 변수에 대입하려면 람다 함수를 이용하거나 함수 참조를 이용한다. val say = { name: String, age: I..
[Kotlin 요약 정리] 9. 코틀린의 클래스 9. 코틀린의 클래스 1) 데이터 클래스 - data 키워드를 이용해서 함수 없이 데이터만 포함된 VO 클래스를 선언할 수 있다. - 제약 조건 하나 이상의 매개변수를 가진 주 생성자를 선언해야 한다. 모든 주 생성자의 매개변수는 var, val로 선언해야 한다. abstract, open, sealed, inner 등의 예약어를 사용할 수 없다. - 데이터와 관련된 함수를 제공한다. data class Member(val name: String, val age: Int, val address: String) fun main() { val member1 = Member("Kim", 20, "Seoul") val member2 = Member("Lee", 25, "Busan") val member3 = M..
[Kotlin 요약 정리] 8. 추상 클래스와 인터페이스 8. 추상 클래스와 인터페이스 1) 추상 클래스 - 추상 클래스: 추상 함수를 포함하는 클래스 - 추상 함수: 실행 영역이 없는 미완성 함수 - 추상 프로퍼티: 선언부만 있는 프로퍼티 abstract class AbstractEx{ abstract fun function() abstract val data: String } 2) 추상 클래스 활용 - 추상 클래스를 상속받아서 다른 클래스를 생성할 수 있다. - 추상 클래스 자체를 타입으로 활용할 수 있다. abstract class AbstractEx{ abstract fun function() abstract val data: String } class Class1: AbstractEx(){ override fun function() = println(..
[Kotlin 요약 정리] 7. 상속 7. 상속 1) Any 클래스 - 모든 클래스는 Any 클래스의 서브 클래스 - Any 클래스는 java.lang.Object 클래스와 달리 equals(), toString()을 제외한 다른 멤버들을 제공하지 않음 2) 상속을 통한 클래스 정의 - 클래스 정의시 다른 클래스를 상속받으면 정의된 멤버를 사용 가능 - open 예약어를 통해 상속이 허용된 클래스만 상속 가능 - 클래스 선언시 ':클래스명()' 의 형태로 상속 open class Parent constructor(val pr: String = "init"){ fun hello() = println("Hello $pr") } class Child constructor(name: String): Parent(name){ fun say() = p..
[Kotlin 요약 정리] 6. 프로퍼티 6. 프로퍼티 1) 프로퍼티 - 최상위 레벨 변수 혹은 클래스 변수에는 함수(Getter, Setter)가 내장되어 있기 때문에 프로퍼티라고 부름 (지역변수 제외) - get(), set() 함수 내부에서는 프로퍼티 값을 field로 접근 - val로 선언한 프로퍼티는 set() 함수 정의 불가, get()함수에서 초기화하면 초기값을 지정하지 않아도 됨 - var로 선언한 프로퍼티는 get() 함수를 정의하더라도 초기값을 반드시 명시해야 함 class Member constructor(name: String, age: Int){ var name: String = "" get() = field set(value) { field = "Mr. " + value } var age: Int = 0 get() = ..
[Kotlin 요약 정리] 5. 클래스 5. 클래스 1) 선언 및 생성 - 선언 형식: class 클래스명 {} class Class{ val property = 1 fun function() = println("function") } fun main() { val cls = Class() println(cls.property) cls.function() } // 결과 1 function 2) 주 생성자 - 생성자: 클래스를 통해 객체를 생성하기 위한 함수 - 코틀린에서는 주 생성자와 보조 생성자로 구분 - 주 생성자는 클래스 선언부에 작성하며 클래스당 하나의 주 생성자만 정의 가능하다. (필수 사항은 아님) class Class1 {} class Class2() {} class Class3 constructor() {} class Class..
[Kotlin 요약 정리] 4. 흐름 제어 구문과 연산자 4. 흐름 제어 구문과 연산자 1) if 표현식 - 조건식이 true일 경우 지정된 연산을 수행 - 코틀린에서는 구문이 아닌 표현식 - 값 대입시 else 생략 불가 - 형식 if(조건식1) 문장1 [if else(조건식2) 문장2] [else 문장3] fun checkOdd(count : Int): Boolean{ val result = if(count%2 == 0){ println("짝수") 0 } else { println("홀수") 1 } return result == 1 } fun main() { println(checkOdd(11)) println(checkOdd(32)) } 2) when 표현식 - switch 구문과 비슷하나 정수 이외의 다양한 타입을 대입 가능한 표현식 - 형식 when ..