이 문서는 Google Cloud Translation API를 사용해 자동 번역되었습니다.
어떤 문서는 원문을 읽는게 나을 수도 있습니다.
Kotlin은 다양한 작업에 사용할 수 있는 강력한 프로그래밍 언어입니다. 이 게시물에서는 Kotlin의 고급 기능 중 일부를 살펴보겠습니다. 유형 별칭, 봉인된 클래스 및 데이터 클래스와 같은 주제를 다룰 것입니다. 또한 확장 함수 및 람다와 같은 Kotlin 표준 라이브러리의 고급 기능 중 일부를 살펴보겠습니다.
유형 별칭
유형 별칭은 유형에 새 이름을 부여하는 방법입니다. 이는 코드를 더 읽기 쉽게 만들거나 긴 형식 이름을 반복하지 않으려는 경우에 유용할 수 있습니다. 유형 별칭을 만들려면 typealias 키워드, 유형의 새 이름, 별칭을 지정할 유형을 차례로 사용합니다.
typealias Name = String
위의 예에서 우리는 Name이라는 문자열 유형에 대한 유형 별칭을 만들었습니다. 이제 String 유형을 사용하는 모든 곳에서 Name 유형 별칭을 사용할 수 있습니다. 예를 들어:
fun main(args: Array<String>) {
val name: Name = "John"
println(name) // Prints "John"
}
봉인된 클래스
봉인된 클래스는 봉인된 클래스와 동일한 파일에 선언된 클래스에 의해서만 서브클래싱될 수 있는 클래스 유형입니다. 이는 클래스가 특정 범위 외부에서 서브클래싱되는 것을 방지하려는 제한된 클래스 계층 구조를 만드는 데 유용합니다. 봉인된 클래스를 만들려면 봉인된 키워드를 사용합니다.
sealed class Shape
class Circle(val radius: Double) : Shape()
class Rectangle(val width: Double, val height: Double) : Shape()
위의 예에서는 Shape라는 봉인된 클래스를 만들었습니다. 우리는 또한 Circle과 Rectangle이라는 Shape의 두 하위 클래스를 만들었습니다. Shape 클래스와 동일한 파일에서 이 두 하위 클래스를 모두 선언했습니다. 다른 파일에서 Shape의 하위 클래스를 선언하려고 하면 오류가 발생합니다.
데이터 클래스
데이터 클래스는 데이터를 보유하도록 설계된 클래스 유형입니다. 데이터 클래스는 일반적으로 프로그램의 다른 부분 간에 전달되는 정보를 저장하는 데 사용됩니다. 데이터 클래스는 Kotlin에서 매우 쉽게 생성할 수 있습니다. 데이터 클래스를 만들려면 키워드 data를 사용합니다.
data class User(val name: String, val age: Int)
위의 예에서는 User라는 데이터 클래스를 만들었습니다. 이 클래스에는 name과 age라는 두 가지 속성이 있습니다. 키워드 data와 속성 값을 사용하여 이 클래스의 인스턴스를 만들 수 있습니다.
val user = User("John", 30)
코틀린 표준 라이브러리
Kotlin 표준 라이브러리에는 프로그래머의 삶을 더 쉽게 만들어 줄 유용한 기능이 많이 포함되어 있습니다. 이 섹션에서는 Kotlin 표준 라이브러리의 고급 기능 중 일부를 살펴보겠습니다.
확장 기능
확장 기능은 기존 유형에 새 기능을 추가하는 방법입니다. 확장 함수는 확장하는 유형 외부에서 선언됩니다. 확장 함수를 선언하려면 fun 키워드, 확장하려는 유형의 이름, 점 연산자, 함수 이름을 차례로 사용합니다.
fun String.repeat(n: Int): String {
return this.repeat(n)
}
위의 예제에서는 repeat라는 확장 함수를 선언했습니다. 이 함수는 Int 매개변수를 사용하고 문자열을 반환합니다. repeat 함수는 String 유형의 확장으로 모든 String 인스턴스에서 호출할 수 있습니다. 예를 들어:
val s = "abc".repeat(3) // s is "abcabcabc"
람다스
람다는 익명 함수를 만드는 방법입니다. 람다는 종종 map, filter, reduce와 같은 고차 함수와 함께 사용됩니다. 람다를 만들려면 키워드 fun, 람다 매개변수, 화살표 연산자, 람다 본문 순으로 사용합니다.
fun(x: Int, y: Int) = x + y
위의 예에서 두 개의 Int 매개변수를 사용하고 해당 매개변수의 합계를 반환하는 람다를 만들었습니다. 다른 함수처럼 이 람다를 호출할 수 있습니다.
val sum = fun(x: Int, y: Int) = x + y
println(sum(1, 2)) // Prints 3
추가 정보
타입 별칭은 당신이 직접 만든 타입만을 위한 것이 아닙니다. Kotlin 표준 라이브러리 또는 사용 중인 타사 라이브러리에서 유형의 유형 별칭을 만들 수도 있습니다.
봉인된 클래스는 클래스의 계층 구조를 제한하기 위한 것이 아닙니다. 또한 개체의 계층 구조를 제한하는 데 사용할 수도 있습니다. 자세한 내용은 코틀린 문서를 참조하세요.
데이터 클래스는 데이터가 아닌 개체에도 사용할 수 있습니다. 예를 들어 사용자를 나타내는 데이터 클래스를 만든 다음 프로그램의 각 사용자에 대해 해당 클래스의 인스턴스를 만들 수 있습니다.
확장 함수는 매개변수를 사용하지 않는 함수만을 위한 것이 아닙니다. 매개변수를 사용하는 확장 함수를 만들 수도 있습니다.
람다는 값을 반환하는 함수만을 위한 것이 아닙니다. Unit을 반환하는 람다를 만들 수도 있습니다.
경고
유형 별칭은 코드를 더 읽기 쉽게 만들 수 있지만 더 혼란스럽게 만들 수도 있습니다. 유형 별칭을 과도하게 사용하면 코드를 이해하기 어려워질 수 있습니다.
봉인된 클래스는 코드를 더 제한적으로 만들고 하위 클래스로 분류해야 하는 유형을 하위 클래스로 분류하지 못하게 할 수 있습니다. 봉인된 클래스는 드물게 사용하고 계층 구조를 제한해야 한다고 확신하는 경우에만 사용하십시오.
데이터 클래스는 코드를 더 장황하게 만들고 프로그램에 많은 상용구를 추가할 수 있습니다. 데이터 클래스는 필요할 때만 사용하세요.
위험
유형 별칭은 이해하기 어려운 코드로 이어질 수 있습니다. 주의하지 않으면 코드가 한 유형에서 다른 유형으로의 명확한 경로가 없는 유형 별칭의 미로가 될 수 있습니다.
봉인된 클래스는 변경하기 어려운 코드로 이어질 수 있습니다. 봉인된 클래스에 새 하위 클래스를 추가해야 하는 경우 봉인된 클래스와 해당 하위 클래스를 모두 변경해야 합니다. 이는 많은 작업이 될 수 있으며 오류가 발생할 수 있습니다.
데이터 클래스는 유지 관리하기 어려운 코드로 이어질 수 있습니다. 데이터 클래스에 새 속성을 추가하는 경우 해당 데이터 클래스를 사용하는 모든 코드를 업데이트해야 합니다. 이는 많은 작업이 될 수 있으며 오류가 발생할 수 있습니다.