코틀린 공부
-
[Kotlin] in out 키워드코틀린 공부/코틀린 기초 2024. 5. 27. 14:24
요즘 다른 사람들이 만든 라이브러리를 공부하면서 제너릭과 같이 사용하는 out, in 키워드를 발견했다. 제너릭을 잘 활용하기 위해서 out, in 개념이 무엇인지 알 필요성이 있을것 같아서 공부를 하기로 했다. 먼저, in, out 키워드를 공부하면서 3가지 개념이 나온다. Invariance - 불변성Convariance - 공변성Contravariance - 반공변성1. 불변성이란?타입 불변성이란 제너틱 타입을 사용하는 클래스나 인터페이스에서 일치하는 타입만 사용할 수 있다. 즉, 해당 타입의 부모, 자식의 타입은 사용이 불가능하다. in & out 키워드가 없는 일반적인 제너릭이 이런 타입 불변성을 가진다. open class ParentVarianceclass ChildVariance1 : P..
-
[Kotlin] object코틀린 공부/코틀린 기초 2024. 5. 23. 15:30
object는 코틀린에서 클래스를 정의함과 동시에 객체를 생성하는 것이다. object는 Singleton Pattern을 언어 차원에서 지원한다고 생각하면 이해가 더 쉬울 것 같다. object로 생성된 객체의 특징class 키워드 대신 object 키워드를 사용해서 클래스를 정의함과 동시에 객체를 생성한다. 일반 클래스처럼 프로퍼티, 메소드, 초기와 블록을 가질수 있지만, 생성자는 가질 수 없다.클래스를 상속 받을 수 있고, 여러개의 인터페이스를 갖을 수 있다. 그래서 object는 kotlin에서 크게 3가지 방식으로 사용이 가능하다 1. 객체 선언(Object Declaration)객체 선언은 Singleton pattern을 쉽게 구현할 수 있게 해준다. object로 선언된 객체는 최초..
-
[Kotlin] 스코프 함수 (Scope Function)코틀린 공부/코틀린 기초 2024. 5. 23. 10:30
코틀린은 스코프 함수 라는 것을 제공한다. 스코프 함수는 특정 객체의 특정 동작 (프로퍼티 초기화, 활용 등)을 실행하기 위한 목적만을 가진 함수다. 스코프 함수를 람다 함수로 사용하게 되면 임시로 Scope를 형성하는데, 이 Scope 내에데 객체의 이름을 일일이 참조할 필요 없이 객체를 접근하고 핸들링할 수 있다는 편리하다는 장점이 있다. 코틀린에서 제공하는 스코프 함수는 5가지다.apply, run, with, also, let1. applyapply 함수는 인스턴스를 새로 생성하고 특정 변수에 할당하기 전에 초기화 작업을 해줄수 있는 스코프를 만들어줌apply 함수 내에 모든 명령이 수행되고 나면 명령들이 적용되어 새로 생성된 인스턴스를 반환한다는 특징을 갖는다. data class ScopeF..
-
[Kotlin] 고차함수와 람다함수코틀린 공부/코틀린 기초 2024. 5. 22. 11:22
1. 람다 함수란?람다 함수는 일반 함수와 다르게 fun 키워드도 사용하지 않으며 함수 이름도 없이 변수에 대입해서 사용한다. (익명 함수)// 일반적인 함수 선언 방식fun plus(a: Int, b: Int) : Int { return a + b}// 람다 함수 선언 방식val sum = {a:Int, b:Int -> a+b} 위의 plus함수는 일반적인 함수의 선언 방식이고아래 sum에 할당된 것이 람다 함수이다. 1-1 람다 함수 규칙{ ... } 로 표현한다.{ ... } 안에 -> 가 있으면 왼쪽은 parameter, 오른쪽은 함수의 본문이다. 함수의 return 값은 함수 본문의 마지막 표현식이다. 즉 위에서 sum 에는 a+b의 값이 할당된다. 1-2 선언 방법val sum = {a..
-
[Kotlin] 추상 클래스와 인터페이스코틀린 공부/코틀린 기초 2024. 5. 21. 14:29
자바에서도 추상 클래스 (abstract class)와 인터페이스 (interface)의 개념이 있다. 하지만 코틀린 기초 설명 영상을 보니 자바와는 조금 다른 개념이 포함되어 있는 것 같아 공부해보기로 했다. 1. 추상 클래스란? 코틀린에서 추상 클래스는 일반적으로 설계의 청사진을 제공하며, 공통 기능을 구현해 놓은 클래스다. 이 클래스는 구체적인 내용을 모두 포함하지 않으며, 이를 상속받는 하위 클래스에서 더 구체적인 구현을 해야 합니다. 따라서, 하위 클래스는 추상 클래스의 일부 기능을 상속받고, 추가적인 구체적인 기능을 제공하여 추상 클래스의 설계를 완성하게 됩니다. abstract class가 활용될 상황을 생각해보자면, 공통 기능의 구현과 확장을 통해 여러 클래스 간에 공통된 기능을 공유하..
-
[Kotlin] 코틀린 class (open, data , sealed, internal class)코틀린 공부/코틀린 기초 2024. 5. 17. 15:04
자바에는 없는 코틀린 class에서 다른 키워드들을 학습해보려고 한다. (open, data, internal class) 1. open class기존에 자바에서는 일반 class를 상속하는 것이 가능했다. class Parent{}class Child extends Parent{} 코틀린에서는 class를 상속하기 위해서는 open이라는 키워드를 같이 사용해야 한다. 왜냐하면 코틀린에서는 기본적으로 클래스와 메스드가 다 final 이기 때문이다. open class Parent {}class Child:Parent() {} 메서드를 상속하고 싶다면 open을 붙여줘야 한다. open class Animal(var name:String, var age: Int) { open fun introduce..
-
[Kotlin] 코틀린 생성자(Constructor)코틀린 공부/코틀린 기초 2024. 5. 17. 11:31
코틀린의 생성자를 알기는 했지만 너무 간략하게만 알고 있어서 좀더 명확하게 공부할 필요성을 느껴 공부할 필요성이 있었다. 코틀린의 생성자(Constructor) 코틀린에서는 하나의 주생성자와 여러개의 부 생성자를 나눠서 사용할 수 있다. 1. 주생성자a) constructor 키워드 사용class Test1(private val name: String, val age: Int, val money: Int) b) constructor 키워드 사용class Test1 constructor(private val name: String, val age: Int, val money: Int) c) init()주생성자 같은 경우 생성자를 만들면서 수행하고 싶은 기능을 수행할 수 없다. 그래서 있는게 초기화 ..
-
[코틀린 완벽 가이드] 5.1 코틀린을 활용한 함수형 프로그래밍코틀린 공부/코틀린 2024. 1. 3. 08:14
차례 : 5.1.1 고차함수 5.1.2 함수 타입 5.1.3 람다와 익명 함수 함수형 프로그래밍은 프로그램 코드를 불변 값을 반환하는 함수의 합성으로 구성할 수 있다는 아이디어를 바탕으로 한다. 함수형 언어는 함수를 일급 시민(first class) 값으로 취급한다. 이 말은 함수를 다른 일반적인 타입의 값과 똑같이 취급한다는 뜻이다. 특히 일급 시민이라는 말에는 변수에 값을 대입하거나 변수에서 값을 읽을 수 있고 함수에 값을 전달하거나 함수가 값을 반환할 수 있다는 뜻이 들어있다. 이런 성질은 함수인 값을 데이터와 마찬가지로 조작할 수 있는 고차 함수라는 함수를 정의할 수 있게 해주며, 코드 추상화와 합성(Composition)이 더 쉽게 가능한 유연성을 제공해준다. 5.1.1 고차함수 앞에서 이미 람..
-
[코틀린 완벽 가이드] 4장 클래스와 객체 다루기 (4.4 객체)코틀린 공부/코틀린 2023. 12. 30. 22:27
4.4 객체 코틀린에서 객체 선언은 클래스와 상수를 합한 것이며 객체 선언을 통해 싱글턴, 즉 인스턴스가 단 하나만 존재하는 클래스를 만들 수 있다. 그리고 자바 익명 클래스와 비슷한 역할을 하는 객체 식도 살펴본다. 4.4.1 객체 선언 코틀린은 어떤 클래스에 인스턴스가 오직 하나만 존재하게 보장하는 싱글턴 패턴을 내장하고 있다. 코틀린에서는 클래스와 비슷한 방법으로 싱글턴을 선언한다. 다만 class 대신 object라는 키워드를 사용한다. object Application { val name = "My Application" override fun toString() = name fun exit() {} } 이런 객체 선언은 클래스를 정의하는 동시에 클래스의 인스턴스를 정의하는 것이기도 하다. fu..
-
[코틀린 완벽 가이드] 4장 클래스와 객체 다루기 (4.3 단순한 변수 이상 인 프로퍼티)코틀린 공부/코틀린 2023. 12. 30. 13:13
4.3 단순한 변수 이상 인 프로퍼티 4.3.1 최상위 프로퍼티 클래스나 함수와 마찬가지로 최상위 수준의 프로퍼티를 정의할 수 도 있다. 이런 경우 프로퍼티는 전역 변수나 상수와 비슷한 역할을 한다. val prefix = "Hello, " // 최상위 불변 프로퍼티 fun main(){ val name = readLine() ?: return println("$prefix$name") } 이런 프로퍼티에 최상위 가시성(public / internal / private)을 지정할 수 있다. 4.3.2 늦은 초기화 클래스를 인스턴스화할 때 프로퍼티를 초기화해야 한다는 요구 사항이 불필요하게 엄격할 때가 있었다. 그러나 어떤 프로퍼티는 클래스 인스턴스가 생성된 뒤에, 그리고 사용되는 시점보다 이전에 초기화되..