2020. 11. 9. 19:52ㆍ개발&TIL/kotlin
코틀린에서 컬렉션 만들기
- .javaClass는 자바의 getClass()에 해당하는 코틀린 코드
- 코틀린은 자체 컬렉션을 제공하지 않고 자바 컬렉션을 활용한다.
- last(): 리스트의 마지막 원소 조회, max() 최댓값
val strings = listOf("first", "second", "fourteenth")
println(strings.last())
val numbers = setOf(1, 14, 2)
println(numbers.max())
이름 붙인 인자
코틀린으로 작성한 함수를 호출할 때는 함수에 전달하는 인자 중 일부 또는 전부의
이름을 명시할 수 있다.자바로 작성한 코를 호출할 때는 이름 붙인 인자를 사용 할 수 없다.
joinToString(collection, separator = " ", prefix = " ", postfix = ".")
디폴트 파라미터 값
코틀린에서는 함수 선언에서 파라미터의 디폴트 값을 지정할 수 있으므로 오버로드 중 상당수를 피할 수 있다.
- 디폴트 값이 지정된 파라미터
fun <T> joinToString(
collection: Collection<T>,
separator: String = ", ",
prefix: String = "",
postfix: String = ""
): String
자바쪽에서 코틀린 함수를 편하게 호출하고 싶다면 @JvmOverloads 를 붙이면
오버로딩 함수를 만들어 준다.
클래스의 이름을 바꾸고 싶다면 파일에 @JvmName 애노테이션을 추가하라.
파일의 맨 앞, 패키지 이름 선언 이전에 위치해야 한다.
클래스 이름 지정 애노테이선 선
@file:JvmName("StringFunctions")
최상위 프로퍼티
const 변경자를 추가하면 프로퍼티를 public static final 필드로 컴파일 할 수 있다.
- const 사용
const val UNIX_LINE_SEPARATOR = "\n"
- const 동일 자바 코드
public static final String UNIX_LINE_SEPARATOR = "\n";
확장 함수와 확장 프로퍼티
확장 함수는 어떤 클래스의 맴버 메서드인 것처럼 호출할 수 있지만 그 클랫의 밖에 선언된 함수다.
확장 함수를 만들려면 추가하려는 함수 이름 앞에 그 함수가 확장할 클래스의 이름을
덧붙이기만 하면 된다.
- 확장 함수 예
package strings
fun String.lastChar(): Char = this.get(this.length - 1)
확장 함수는 오버라이드할 수 없다.
확장 프로퍼티
확장 프로퍼티를 사용하면 기존 클래스 객체에 대한 프로퍼티 형식의 구문으로 사용할 수 있는 API를
추가할 수 있다.
컬렉션 처리: 가변 길이 인자, 중위 함수 호출, 라이브러리 지원
- vararg
- 키워드를 사용하면 호출 시 인자 개수가 달라질 수 있는 함수를 정의할 수 있다.
- java varargs ... 를 붙이는 대신 파라미터 앞에 vararg 변경자를 붙인다.
- 스프레드 연자 '*'를 배열 앞에 붙이면 배열을 명시적으로 풀어서 전달된다.
fun main(args: Array<String>) {
val list = listOf("args:", *args)
println(list)
}
- 중위 함수 호출
- 구문을 사용하면 인자가 하나뿐인 메소드를 간편하게 호출할 수 있다.
- 인자가 하나뿐인 일반 메소드나 인자가 하나뿐인 확장 함수에 중위 호출을 사용할 수 있다.
1.to("one") //to 메서드를 일반적인 방식으로 호출
1.to "one" // to 메서드를 중위 호출 방식으로 호출
- 구조 분해 선언
- 사용하면 복합적인 값을 분해해서 여러 변수에 나뉘 담을 수 있다.
- Pair는 코틀린 표준 라이브러리 클래스로 두 원소로 이뤄진 순서쌍을 표현
문자열과 졍규식
- '.', '-' 으로 문자열을 분리하는 예 (명시적 선언)
println("12.345-6.A".split("\\.|-").toRegex())
- '.', '-' 으로 문자열을 분리하는 예 (인자 하나상 이)
println("12.345-6.A".split(",", "-"))
스트링 확장 함수를 사용에 경로 파싱에 쉬워진다.
"".substringBeforeLast("/") -> 파일명 이전까지의 path
"".subStringafterLast("/") -> path 이후의 파일명
3중 따옴표
3중 따옴표 문자열에서는 역슬래시를 포함한 어떤 문자도 이스케이프할 필요가 없다.
3중 따옴표를 쓰면 줄 바꿈이 들어있는 프로그램 텍스트를 쉽게 문자열로
만들 수 있다.
- 줄바꿈 예
val str1 = """123 .456 .789""" println(str1.trimMargin("."))
로컬 함수
함수내에 로컬함수를 선언해서 사용하면 중복을 없애는 동시에 코드 구조를 깔끔하게 유지할 수 있다.
로컬 함수는 자신이 속한 바깥 함수의 모든 파라미터와 변수를 사용할 수 있다.
- 로컬함수에서 바깥 함수의 파라미터 접근하기 예
fun saveUser(user: User) {
fun validate(value: String, fieldName: String) {
if (value.isEmpty()) {
throw IllegalArgumentException("error: ${user.id}") //바깥 함수의 파라미터 접근
}
}
validate(user.name, "Name")
validate(user.address, "Address")
}
'개발&TIL > kotlin' 카테고리의 다른 글
코틀린학습 - #6 오버로딩 (0) | 2020.11.17 |
---|---|
코틀린학습 - #5 타입 시스템 (0) | 2020.11.17 |
코틀린학습 - #4 람다 (0) | 2020.11.16 |
코틀린학습 - #3 클래스 (0) | 2020.11.11 |
코틀린학습 - #1 기초 (0) | 2020.11.09 |