Programming Languages(47)
-
[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 -
[Kotlin] 5. 예외처리
Kotlin은 체크(컴파일) 예외와 언체크(런타임) 예외를 구분하지 않는다. Java는 체크 예외를 처리하도록 강제한다. 하지만 대부분의 프로그래머들은 체크 예외를 작성만 할뿐 의미없이 던지는 경우가 많다. 따라서 Kotlin에서는 이를 구분하지 않도록 했다. 예외를 던지면 예외를 잡을 때까지 호출된 함수를 거슬러 올라가며 예외를 다시 던진다. 1. try, catch, finally fun readNumber(br: BufferedReader): Int? { try { val line = br.readLine() return Integer.parseInt(line) } catch (e: NumberFormatException) { throw NumberFormatException("Invalid num..
2023.03.23 -
[Kotlin] 4. 대상을 이터레이션: while 과 for
1. while 문 whlie 문과 do while 문은 Java와 같다. while (조건) { /* ... */ } do { /* ... */ } while (조건) 2. 수에 대한 이터레이션: 범위와 수열 for 문은 Java의 for-each 문만 존재한다. 즉 for (int i = 0; i < n; i++)과 같이 사용할 수 없다. 대신 범위(range)를 사용한다. 범위는 기본적으로 두 값으로 이루어진 구간이다. 그 값은 보통 정수 등의 숫자 타입의 값이며 .. 연산자로 시작 값과 끝 값을 연결해서 범위를 만든단. val oneToTen = 1..10 코틀린의 범위는 기본적으로 닫힌 구간 또는 양 끝을 포함하는 구간이다. 즉 마지막 값이 항상 범위에 포함되어 있다. 일정한 값을 증가시키면서 ..
2023.03.23