Language/kotlin

Language/kotlin

다양한 함수 다루기

확장함수 기존 자바 코드위에 자연스럽게 코틀린 코드를 추가한다는 개념에서 출발 자바로 만들어진 라이브러리를 유지보수 및 확장할 때, 코틀린 코드를 덧붙인다. 따라서 어떤 클래스안에 있는 메서드처럼 호출할 수 있지만, 함수는 밖에 만들 수 있게 한다. 확장함수는 클래스에 있는 private 또는 protected 멤버를 가지고 올 수 없다. 멤버함수와 확장함수의 시그니처가 같으면, 멤버함수가 우선적으로 호출된다. 즉, 확장함수를 만들었지만, 다른 기능을 하는 똑같은 시그니처의 멤버함수가 생기면 오류가 발생할 수 있다. fun String.lastChar(): Char { return this[this.length - 1] } fun: 이건 함수라는 의미 String. : String 클래스를 확장한다는 의..

Language/kotlin

배열과 컬렉션 다루기

배열 array.indices는 0부터 마지막 index까지의 range이다. withIndex()를 사용하면, 인덱스와 값을 한번에 가져올 수 있다. array.plus()를 이용하면, 값을 쉽게 넣을 수도 있다. val arr = arrayOf(100, 200) arr.plus(300) // 배열에 새로운 element 추가 // 방법 1 for (i in arr.indices) { println("$i ${arr[i]}") } // 방법 2 for ((idx, value) in arr.withIndex()) { println("$idx $value") } Collection - List, Set, Map 컬렉션을 만들어줄 때, 불변인지 혹은 가변인지를 설정해야 한다. 가변(Mutable) 컬렉션: ..

Language/kotlin

Enum, Sealed Class - 공통점, 차이점 정리

Enum 열거형. 클래스 내에 상태를 구분하기 위한 객체들을 이름을 붙여 여러개 생성하고 그 중 하나의 상태를 선택해 나타내는 방식이다. 특징 enum class 안에는 상수를 나타내는 대문자로 나타낸다. enum 객체들은 고유한 속성을 가질 수 있다. 일반 클래스처럼 함수 선언도 가능하다. enum class Color (val red: Int, val green: Int, val blue: Int) { RED(255, 0, 0), GREEN(0, 255, 0), BLUE(0, 0, 255);

Language/kotlin

다양한 클래스 다루기

Data Class DTO 클래스 데이터(필드) 생성자와 getter equals, hashCode toString data 키워드를 붙여주면 아래 메서드 해결 equals, hashCode toString 여기에 named argument 까지 활용하면 builder pattern을 쓰는 것 같은 효과도 있다. 자바에서도 JDK16부터 record class를 도입하긴 했다. data class Person( private val name: String, private val age: Int ) Enum Class 특징 추가적인 클래스를 상속받을 수 없다. 인터페이스는 구현할 수 있으며, 각 코드가 싱글톤이다. enum class Country( val code: String ) { KOREA("KR"..

Language/kotlin

중첩 클래스 다루기

중첩 클래스의 종류 내부 클래스 외부 클래스를 참조하고 있다. 내부 클래스는 숨겨진 외부 클래스 정보를 가지고있어서 참조를 해지하지 못하는 경우가 발생할 수 있다. 따라서 메모리 누수가 생길 수 있고, 이를 debugging 하기 어렵다. 내부 클래스의 직렬화 형태가 명확하게 정의되지 않아 직렬화에 있어 제한이 있다. public class JavaHouse { private String address; private LivingRoom livingRoom; public JavaHouse(String address) { this.address = address; this.livingRoom = new LivingRoom(10); } public LivingRoom getLivingRoom() { retu..

Language/kotlin

object 키워드 다루기

static 함수와 변수 static: 클래스가 인스턴화 될 때, 새로운 값이 복제되는게 아니라 정적으로 인스턴스끼리의 값을 공유 companion object: 클래스와 동행하는 유일한 오브젝트 class Person private constructor( private val name: String, private val age: Int ){ companion object{ private val MIN_AGE = 1; // 런타임 시에 변수 할당 private const val MIN_AGE = 1; // 컴파일 시에 변수 할당 fun newBaby(name: String): Person { return Person(name, MIN_AGE) } } } 런타임 시에 변수가 할당됨 컴파일 시에 변수가 할..

Language/kotlin

접근 제어 다루기

자바와 코틀린의 가시성 제어 코틀린에서는 패키지를 namespace를 관리하기 위한 용도로만 사용하고, 가시성 제어에는 사용되지 않는다. 모듈: 한 번에 컴파일되는 코틀린 코드 자바의 기본 접근 제시어는 default이고, 코틀린의 기본 접근 제시어는 public이다. public: 모든 곳에서 접근 가능 protected: 선언된 클래스 또는 하위 클래스에서만 접근 가능 internal: 같은 모듈에서만 접근 가능 private: 선언된 클래스 내에서만 접근 가능 코틀린 파일의 접근 제어 코틀린은 .kt 파일에 변수, 함수, 클래스 여러개를 바로 만들 수 있다. public: 기본값 protected: 파일(최상단)에는 사용 불가능 -> 클래스 접근 internal: 같은 모듈에서만 접근 가능 priv..

Language/kotlin

상속 다루기

추상 클래스 Animal이라는 추상클래스를 구현한 Cat, Penguin 클래스 extends 키워드를 사용하지 않고, : 을 사용한다. 상위 클래스의 생성자를 바로 호출한다. override를 필수적으로 붙여 주어야 한다. abstract class Animal ( protected val species: String, protected val legCount: Int ){ abstract fun move() } class Cat ( species: String ) : Animal(species, 4) { override fun move() { println("고양이가 사뿐 사뿐 걸어가~") } } 추상 프로퍼티가 아니라면 상속할 때 open을 꼭 붙여야 한다. protected open val leg..

Language/kotlin

클래스 다루기

클래스와 프로퍼티 class KotlinPerson constructor(name: String, age: Int){ val name = name val age = age } 코틀린에서는 필드만 만들면 getter와 setter를 자동으로 만들어준다. property = field + getter + setter constructor는 생략할 수 있다. class KotlinPerson( name: String, age: Int ){ val name = name val age = age } 클래스의 필드 선언과 생성자를 동시에 선언할 수 있다. 생성자: constructor(name: String, age: Int) 필드 val name = name val age = age .필드 를 통해서 getter..

Language/kotlin

함수 다루기

함수 선언 문법 함수 구조 [접근 지시어] [함수를 의미하는 키워드] [함수 이름] [함수의 매개변수] [함수의 반환 타입] 접근 지시어: public은 생략 가능 함수를 의미하는 키워드: fun 함수의 매개변수: [매개변수명: 타입] 함수가 하나의 결과값이면 block 대신 = 사용이 가능하다. 이를 한줄로 변경이 가능하다. = 을 사용하는 경우에는 반환 타입 생략이 가능하다. block { } 을 사용하는 경우에는 반환 타입이 Unit이 아니면, 명시적으로 작성해줘야 한다. // 1. 함수 선언 문법 - 두 정수를 받아서 더 큰 정수를 반환 fun max(a: Int, b: Int) = if (a > b) a else b 함수의 위치 클래스 안 파일 최상단 한 파일 안에 여러 함수들이 있을 수 있음 ..

kimjingyu
'Language/kotlin' 카테고리의 글 목록