본문 바로가기

반응형

프로그래밍/kotlin

(30)
[코틀린 프로그래밍] Chapter.05 콜렉션 사용하기 콜렉션의 특징 Java에서는 리스트, 셋, 맵 등의 여러 종류의 콜렉션들을 사용합니다. 코틀린에서은 모두 지원하고 있고 이를 뮤터블( 변경가능 )과 이뮤터블( 변경불가능 ) 2가지로 나뉘어서 사용할 수 있습니다. 배열 만드는 방법 val alphabet = arrayOf("a", "b", "c", "d") println("${alphabet[0]} and ${alphabet[1]}") smart하지 못한 방법 아래 코드는 Integer 클래스 타입으로 생성됨. 오버헤드가 크게 발생합니다. val notSmartNumbers = arrayOf(1, 2, 3, 4, 5) smart한 방법 int인 primity type으로 생성하자. val smartNumbers = intArrayOf(1, 2, 3, 4,..
[코틀린 프로그래밍] Chapter.04 외부 반복과 아규먼트 매칭 소스 코드에서 많은 비중을 차지하고 있는 for문을 코틀린에서 우아하게 다루는 방법을 정리해보겠습니다. 범위와 반복 코틀린에서 제공하는 레인지를 설정할 수 있습니다. val oneToFive: IntRange = 1..5 val aToE: CharRange = 'a'..'e' 반복 자바에서 일반적인 for문과 비교해보겠습니다. // Java for (int i = 0; i < 5; i++) { // logic.. } Kotlin // 정방향 for ( i in 1..5) { // logic.. } // 후방향 for ( i in 5.downTo(1)) { // logic... } until : 마지막값을 포함 시키지 않는 for (i in 1 until 5) { print("$i, ") } // 1,2,..
[코틀린 프로그래밍] Chapter.03 함수를 사용하자 함수생성 간단한 함수 코틀린은 KISS ( Keep It Simple Stupid ) 원칙을 준수한다. 단순하게 작성이 가능하다. fun greet() = "hello" // 가장 심플한 메소드 정적타입의 변수와 마찬가지로 메소드의 리턴타입 또한 타입 추론이 가능하다. 위 코드를 보면 코틀린은 리턴타입이 String 타입이라는 것을 추론할 수 있다. fun greet() : String = "hello" // 위 코드와 동일 코틀린은 표현식이 많고 명령문은 적다. 아래의 메소드가 표현식이다. fun sayHello() = println("hello") 코틀린 메소드에서 return 타입은 필수입니다. 위와 같이 리턴타입이 없는 println을 사용할 경우는 Unit 을 리턴합니다. Unit은 아무런 값도..
[코틀린 프로그래밍] Chapter.02 Java의 개발자를 위한 코틀린 필수 사항 목표 숫자와 문자열 변수 정의하기 상수 만들기 타입 명시하기 계산 결과를 이용해 문자열 표현식 만들기 멀티라인 문자열 만들기 이번 챕터에서는 자바 개발자들은 코틀린이 가진 뉘앙스를 배우는 동안에는 자바에서 사용하던 버릇을 잊어야합니다. 코드량 Java >> Kotlin 세미클론 Kotlin은 자바에 비해 많은 것들이 선택적입니다. 대표적인 예로 모든 표현식이나 명령문 마지막에 세미클론(;)을 생략되었습니다. // Java int a = 3 * 6; // Kotlin val a = 3 * 6 변수타입 코틀린은 정적 타입 언어입니다. 모든 변수를 선언할 때 타입을 지정해야하는 것은 아니지만 일반적으로는 지정을 해야합니다. 타입이 지정된 변수는 컴파일 시점에 검증됩니다. fun main() { val gree..
[코틀린 프로그래밍] Chapter.01 시작하기 코틀린 코틀린을 접한 개발자들은 좋아한다는 표현이 부족하다고 합니다. 사랑... 저 또한 가볍게 맛보는 중인데도 왜 이제서야 알았을까.. 후회하며 사용하고 있습니다. 그 만큼 사랑(?) 받을 만한 언어입니다. 코틀린은 Java와 형태는 다르지만, 의미로는 유사한 문법을 가지고 있습니다. 그래서 저 같은 Java 개발자들이 빠르게 습득할 수 있습니다. 클래스로부터의 상속 없이 클래스에 도메인 특화 편의 메소드를 추가할 수 있습니다. 확장 함수라고 불리며, 오니지날 클래스의 메소드처럼 사용됩니다. 델리게이션은 코드를 재사용할때 상속보다 더 좋은 디자인을 할 수 있습니다. 코틀린은 if-else문을 중첩하는 대신에 간결하고 우아한 아규먼트 매칭 문법을 사용합니다. 이미 존재하는 함수를 확장하는 것이 코틀린에서..
코틀린 - 오브젝트 표현식 및 선언 때로는 새로운 클래스를 명시 적으로 선언하지 않고 클래스를 약간 수정 한 객체를 만들어야합니다. 자바는 익명의 내부 클래스 로 처리합니다 . 코틀린은 객체 표현 과 객체 선언 으로이 개념을 약간 일반화합니다 . 오브젝트 식 어떤 타입 (또는 타입)으로부터 상속받은 익명의 클래스의 객체를 생성하기 위해 다음과 같이 작성합니다 : window.addMouseListener(object : MouseAdapter() { override fun mouseClicked(e: MouseEvent) { // ... } override fun mouseEntered(e: MouseEvent) { // ... } }) 상위타입이 생성자를 가지면 알맞은 생성자 파라미터를 전달되어야합니다. 많은 수퍼 유형은 콜론 뒤에 쉼표..
코틀린 - Enum 클래스 enum 클래스의 가장 기본적인 사용법은 type-safe enum을 구현하는 것입니다 : enum class Direction { NORTH, SOUTH, WEST, EAST } 각 열거 형 상수는 하나의 객체입니다. Enum 상수는 쉼표로 구분됩니다. 초기화 각 열거 형은 enum 클래스의 인스턴스이기 때문에 다음과 같이 초기화 할 수 있습니다. enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF) } 익명 클래스 열거 형 상수는 또한 자신의 익명 클래스를 선언 할 수 있습니다. enum class ProtocolState { WAITING { override fun signal() = TALKING }, TAL..
코틀린 - 중첩 클래스 및 내부 클래스 클래스는 다른 클래스에 중첩 될 수 있습니다. class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 } } val demo = Outer.Nested().foo() // == 2 내부 클래스 클래스는 외부 클래스의 멤버에 액세스 할 수 있도록 내부 클래스로 표시 될 수 있습니다 . 내부 클래스는 외부 클래스의 객체에 대한 참조를 전달합니다. class Outer { private val bar: Int = 1 inner class Inner { fun foo() = bar } } val demo = Outer().Inner().foo() // == 1 내부 클래스에서 this사용 시 모호함에 대한 내용은 한정된 this식을 참고합니다. ..
코틀린 - 위임 클래스 위임 위임 패턴을 구현 상속에 좋은 대안이 될 입증하고 있으며, 코 틀린은 기본적으로 제로 상용구 코드를 필요로 지원합니다. 클래스 Derived 는 인터페이스에서 상속 받고 Base 모든 public 메서드를 지정된 객체에 위임 할 수 있습니다 . interface Base { fun print() } class BaseImpl(val x: Int) : Base { override fun print() { print(x) } } class Derived(b: Base) : Base by b fun main(args: Array) { val b = BaseImpl(10) Derived(b).print() // 10 출력 } 이 하여 수퍼 타입 목록에 대한 -clause는 Derived 그것이 나타..
코틀린 - 위임 프로퍼티 우리가 필요로 할 때마다 수동으로 구현할 수 있지만 일반적으로 한 번 구현하고 라이브러리에 넣는 것이 매우 좋을 수있는 일반적인 종류의 속성이 있습니다. 예 : lazy 프로퍼티 : 값은 첫 번째 액세스시에만 계산됩니다. observable 프로퍼티 : 리스너는이 속성에 대한 변경 사항에 대한 알림을받습니다. 각 속성에 대한 별도의 필드 대신지도에 속성을 저장합니다. 이러한 (및 기타) 사례를 다루기 위해 코틀린은 위임 된 속성을 지원 합니다 . class Example { var p: String by Delegate() } 구문은 다음과 같습니다 val/var : by . by 다음의 표현식 은 delegate입니다 . 왜냐하면 속성에 해당하는 get() (및 set() )이 해당 getValue()..

반응형