반응형

코틀린 11

코틀린 setter, getter

java에서는 캡슐화(encapsulate)를 위해서 getter, setter를 사용합니다. 1. 기본 Getter, Setter public class Test { public static void main(String[] args) { Test2 test2 = new Test2(); test2.test1 = 2; // setter int ab = test2.test1 + 1; // getter System.out.println(ab); } } class Test2 { int test1 = 1; } java는 위 소스와 같이 Test2라는 클래스의 test1 변수의 직접적인 접근을 제어하고자, setter, getter를 정의하여 사용합니다. 아래와 같이 정의하여 사용합니다. public class ..

코틀린 2021.02.20

Kotlin Unit Test 하는법

1. 의존성 설정 먼저, 코틀린 테스트를 위해서 아래와 같이, dependency를 설정해 주어야 합니다. dependencies { // kotlin unit test testImplementation 'io.kotlintest:kotlintest-runner-junit5:3.3.0' } 2. kotlin Unit Test KotlinTest는 Spec이라는 여러 종류의 테스트 스타일을 지원 합니다. StringSpec, FunSpec, ShouldSpec, WordSpec, BehaivorSpec, AnnotationSpec 등이 있습니다. 이 클래스들을 상속하여 사용하면 됩니다. 이 Spec들은 테스트를 설명하는 description만 다를 뿐 입니다. 3. Unit Test - String Spe..

코틀린 2020.12.10

코틀린 apply, with, let, also, run

코틀린의 apply, with, let, also, run과 같은 함수들을 '범위 지정 함수'라고 합니다. 각각의 쓰임새에 대해서 알아 보겠습니다. 1. 정의 먼저, apply, with, let, also, run의 정의를 확인 하겠습니다. // with() 정의 inline fun with(receiver: T, block: T.() -> R): R { return receiver.block() } // also() 정의 inline fun T.also(block: (T) -> Unit): T { block(this) return this } // apply() 정의 inline fun T.apply(block: T.() -> Unit): T { block() return this } // let()..

코틀린 2020.12.08

Kotlin 코루틴(Coroutine)

1. Kotlin 코루틴(Coroutine) 코루틴(Coroutine)은 비동기적으로 실행되는 코드를 간소화 하기 위해 만들어진 API 입니다. 코루틴은 Kotlin 버전 1.3에 추가되었으며 다른 언어에서 확립된 개념을 기반으로 합니다. 코루틴(Coroutine)을 사용하는 전문 개발자 중 50% 이상이 생산성이 향상되었다고 보고했습니다. 2. 특징 - 경량 : 코루틴을 실행 중인 스레드를 차단하지 않는 Suspending을 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있습니다. Suspending 많은 동시 작업을 지원하면서도 차단 보다 메모리를 절약 합니다. - 메모리 누수 감소 : scope과 같은 개념(구조화된 동시 실행)을 사용하여 범위 내에서 작업을 실행 하여 메모리 누수를 방지 합니..

코틀린 2020.12.07

코틀린 SAM 변환이 왜 되지 않을까?

fun main() { setInterface(object : SamInterface { override fun callback() { println("callback!!") } }) } fun setInterface(interface1 : SamInterface) { } interface SamInterface { fun callback() } 위와 같은 코드가 있을때, setInterface() 함수는 SamInterface() 라는 인터페이스를 파라미터를 갖고 있습니다. 이럴 경우 main() 함수 쪽에서 '익명 객체'를 사용하여, 위와 같이 구현하여 사용 할수 있습니다. 위에서 'object : SamInterface' 와 'override fun callback()' 과 같이 보일러 플레이트 코..

코틀린 2020.11.25

코틀린 6편 (lateinit)

1. lateinit lateinit 키워드는 '늦은 초기화' 라고도 부르며, 초기화를 나중에 할수 있게 해주는 키워드 입니다. var name : String = "taein" fun main(args: Array) { println("초기화 됨, name : $name") } 출력 결과 var name : String // 컴파일 에러 뜸 fun main(args: Array) { println("초기화 됨, name : $name") } 컴파일 에러 위와 같이, 초기화를 해주지 않았으므로, 컴파일 에러가 발생 합니다. lateinit var name : String // 컴파일 됨 fun main(args: Array) { println("초기화 됨, name : $name") } 출력 결과 위 코..

코틀린 2020.11.13

코틀린 5편 (data class, object, companion object)

1. data class data class Device(val kind : String, val price : Int) class Device2(val kind : String, val price : Int) fun main() { val device = Device("Android", 200) val device2 = Device2("IOS", 300) println("device : ${device}") println("device2 : ${device2}") } 출력 결과 코틀린에서는 java의 POJO 클래스와 같은 data class를 가지고 있습니다. 이 data class는 toString(), hashCode(), equals() 메서드를 오버라이딩 하고 있습니다. 따라서, println..

코틀린 2020.11.11

코틀린 4편 (람다 Lamda)

1. 람다(Lamda) fun main() { println(square(2)) println(square2(2)) println(printNameAndAge("taein", 30)) } val square : (Int) -> (Int) = { number -> number * number} val square2 = { number : Int -> number * number} val printNameAndAge = { name : String, age : Int -> "name : ${name}, age : ${age}" } 출력 결과 square 변수는 (Int) -> (Int) 라는 변수 타입과 반환값 타입을 정의해 주었습니다. square2는 블럭 안에서 변수에 대한 타입만 정의해 주었습니다. p..

코틀린 2020.11.11

코틀린 3편 (클래스 생성자와 상속)

1. 클래스 파일명 코틀린은 자바와 다르게 파일명과 클래스 이름이 달라도 컴파일이 됩니다. 2. 클래스 생성과 멤버 변수, 메서드 fun main() { val person = Person() println("name is ${person.name}") val person2 = Person2() person2.eatNoddle() } // 멤버 변수 class Person { val name = "taein" } // 메서드 class Person2 { fun eatNoddle() { println("Yummy~~") } } 출력 결과 코틀린은 자바와 다르게, 객체 생성을 위해서 'new' 키워드를 사용하지 않습니다. 멤버 변수, 메서드는 위와 같이 사용 합니다. 2. 클래스의 생성자 class Pers..

코틀린 2020.11.10

코틀린 2편

1. Array fun arrayExp() { val array : Array = arrayOf(1, 2, 3) val array2 : Array = arrayOf(1, "d", 3.4f) array[0] = 3 } Array는 사이즈가 고정되어 있습니다. 따라서 메모리가 이미 할당이 되면서 초기화가 이루어 집니다. 원소값이 모두 Int 형이기 때문에, 제네릭 타입이 Int 입니다. array2는 원소 타입이 다양하므로 제네릭 타입으로 Any가 쓰였습니다. 2. List fun listExp() { val list : List = listOf(1, 2, 3) val list2 : List = listOf(1, "d", 11L) var result : Int = list.get(0) val arrayLis..

코틀린 2020.11.10
반응형