Kotlin(12)
-
[Kotlin] 11. object 키워드: 클래스 선언과 인스턴스 생성
Kotlin에서 object 키워드는 다양한 상황에서 사용하지만 모든 경우 클래스를 정의하면서 동시에 인스턴스를 생성한다는 공통점이 있다. object를 사용하는 여러 상황을 살펴보자. 객체 선언(object declaration) 싱글턴 객체를 정의하는 방법 중 하나이다. 동반 객체(companion object) 인스턴스 메서드는 아니지만 어떤 클래스와 관련 있는 메서드와 팩토리 메서드를 담을 때 쓰인다. 동반 객체 메서드에 접근할 때는 동반 객체가 포함된 클래스의 이름을 사용할 수 있다. Java의 정적 메서드 및 정적 필드를 대신한다. 객체 식 Java의 익명 내부 클래스 대신 쓰인다. 1. 객체 선언: 싱글턴을 쉽게 만들기 Java에서 싱글턴을 만들 때는 보통 모든 생성자를 private으로 만..
2023.03.28 -
[Kotlin] 10. 컴파일러가 생성한 메서드: 데이터 클래스와 클래스 위임
Java에서는 클래스가 equals, hashcode, toString 등의 메서드를 구현한다. 그리고 보통 이런 메서드들은 기계적으로 구현된다. 일반적으로 IDE에서 이런 기능을 지원해줘서 직접 구현하는 일은 많이 없지만 코드가 지저분해지는 것은 어쩔 수 없다. Kotlin에서는 이러한 메서드들을 컴파일러가 내부적으로 구현해주기 때문에 소스코드를 깔끔하게 유지할 수 있다. 1. 모든 클래스가 정의해야 하는 메소드 1. toString() Java와 마찬가지로 Kotlin에서도 객체의 기본 toString()은 클래스이름@숫자 와 같은 형식을 띤다. 이는 별로 좋은 방식은 아니므로 객체의 필수 정보를 포함하여 toString()을 오버라이드해야 한다. 2. equals() Java에서는 두 값에 대한 비..
2023.03.28 -
[Kotlin] 9. 뻔하지 않은 생성자와 프로퍼티를 갖는 클래스 선언
Java에서는 하나 이상의 생성자를 선언할 수 있다. Kotlin은 약간 다른 점이 있다. Kotlin은 주(primary) 생성자와 부(secondary) 생성자를 구분한다. 또한 초기화 블록을 통해 초기화 로직을 추가할 수 있다. 주 생성자는 보통 클래스를 초기화할 때 주로 사용하는 간략한 생성자로 클래스 본문 밖에서 정의한다. 부 생성자는 클래스 본문 안에서 정의한다. 주 생성자부터 살펴보자. 1. 클래스 초기화: 주 생성자와 초기화 블록 Java에서 클래스를 선언하면 다음과 같을 것이다. class User { private final String nickname; public User(String nickname) { this.nickname = nickname; } } 하지만 위 코드를 Kot..
2023.03.26 -
[Kotlin] 8. 클래스 계층 정의
1. 인터페이스 interface Clickable { // 추상 메소드. Clickable을 구현하는 클래스는 이를 구현해야 함 fun click() // 디폴트 메소드. Java와 달리 구현만 하면 디폴트 메소드로 선언된다. fun showOff = println("I'm clickable!") } interface Focusable { fun setFocus(b: Boolean) = println("I ${if (b) "get" else "lost"} focus.") fun showOff() = println("I'm focusable!") } 두 개의 인터페이스에 같은 메서드 시그니처를 가진 디폴트 메소드가 존재할 경우 이를 구현하는 클래스에서는 해당 디폴트 메서드를 명시적으로 구현해야 한다. 그..
2023.03.26 -
[Kotlin] 7. 메소드를 다른 클래스에 추가: 확장 함수와 확장 프로퍼티
확장 함수 어떤 클래스의 멤버 메소드인 것처럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수이다. package strings fun String.lastChar(): Char = this.get(this.length - 1) 확장 함수를 만들려면 추가하려는 함수 앞에 그 함수가 확장할 클래스의 이름을 덧붙이면 된다. 이때, 클래스 이름을 수신 객체 타입(receiver type), 확장 함수가 호출되는 대상이 수신 객체(receiver object)라고 부른다. 위의 경우 String이 수신 객체 타입, this가 수신 객체가 된다. 위 함수를 사용하는 코드를 보자. println("Kotlin".lastChar()) // n 이때 수신 객체 타입은 String이고 수신 객체는 Kotlin이라는 문자..
2023.03.26 -
[Kotlin] 6. 함수 정의와 호출
1. Kotlin에서 Collection 만들기 // java.util.HashSet val set = hashSetOf(1, 8, 53) // java.util.ArrayList val list = arrayListOf(1, 7, 53) // java.util.HashMap val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three") 💡Kotlin은 Java와의 호환을 위해 자체 컬렉션을 제공하지 않고 Java의 컬렉션을 차용함으로써 Java Collection과 Kotlin Collection을 변환할 필요가 없게 설계되었다. 2. 함수를 호출하기 쉽게 만들기 예제 함수 fun joinToString ( collection: Collectio..
2023.03.24