티스토리 뷰
문자열
- 문자열 템플릿
import java.util.Date
fun main() {
val name = readLine()
println("Hello, $name!\n, Today is ${Date()}")
}
${}의 중괄호 사이에 코틀린 식을 넣으면 문자열에 식을 넣을 수 있다.간단한 변수 참조인 경우 중괄호의 생략이 가능하다.
2. 로우 문자열
val message = """
Hello, &name!
Today is ${Date()}
""".trimIndent()
3. 문자열 비교
자바 | 코틀린 |
==와 != 연산자는 참조 동등성을 비교한다. 실제 문자열 내용을 비교하려면 equals() 메소드를 사용한다. |
==를 사용하면 직접 equals()를 호출한다. 참조 동등성을 위해서는 ===와 !== 연산자를 사용한다. |
4. 프로퍼티
- length: 문자열 길이
- lastIndex: 마지막 문자 인덱스
배열
- 배열 정의하기
val a = emptyArray<String>()
val b = arrayOf("hello", "world!")
val c = Array(5) { (it + 1) * (it + 1) }
- it: 인덱스를 표현하는, 자동으로 선언되는 변수
- Array<T>처럼 사용하는 배열은 모든 수를 박싱하기 때문에,
ByteArray, ShortArray, IntArray, FloatArray 등의 배열 타입을 사용하는 것이 효율적이다.
- 배열 원소를 명시적으로 초기화해야 한다.
- 자바와 동일하게 배열에는 실제 데이터에 대한 참조를 저장한다.
배열의 깊은 복사를 위해서는 copyOf() 함수를 사용한다.
2. 배열 추가
val a = intArrayOf(1, 2, 3) + 4 // 1, 2, 3, 4
val b = intArrayOf(1, 2, 3) + intArrayOf(5, 6) // 1, 2, 3, 5, 6
3. 배열 비교
문자열과 달리 배열에 대한 ==와 != 연산자는 참조를 비교한다.
배열 내용에 대한 비교는 contentEquals()를 사용한다.
4. 프로퍼티
- size: 배열의 길이
- lastIndex: 마지막 배열 인덱스
함수
- 함수 정의하기
fun circleArea(radius: Double): Double {
return PI * radius * radius
}
- fun 키워드: 함수를 정의한다고 컴파일러에게 알려준다.
- 파라미터: val, var 키워드를 사용할 수 없으며 불변 변수다.
- 값에 의한 호출을 기반으로 한다.
- 항상 파라미터와 반환 타입을 지정해야 한다.
2. 반환 타입을 생략할 수 있는 두 가지 경우
- Unit 타입을 반환하는 경우
fun prompt(name: String) {
println("Hello, $name")
}
fun prompt(name: String): Unit {
println("Hello, &name")
}
- 식이 본문인 함수인 경우
fun circleArea(radius: Double): Double = PI * radius * radius
fun circleArea(radius: Double) = PI * radius * radius
3. 위치 기반 인자, 이름 붙은 인자
fun rectangleArea(width: Double, height: Double): Double {
return width * height
}
fun main() {
println("Rectangle area: ${rectangleArea(10, 4)}"}
}
- 위치 기반 인자(positional argument)
위의 예시처럼 첫 번째 인자는 첫 번째 파라미터, 두 번째 인자는 두 번째 파라미터로 전달되는 방식
rectangleArea(width = 10, height = 4)
rectangleArea(height = 4, width = 10)
- 이름 붙은 인자(named argument)
위치가 아니라 파라미터의 이름을 명시함으로써 인자를 전달하는 방식
4. 디폴트 값
fun readInt(radix: Int = 10) = readLine()!!.toInt(radix)
fun main() {
val decimalInt = readInt()
val decimalInt2 = readInt(10)
val hexInt = readInt(16)
}
→ 오버로딩이 많아지는 경우를 피할 수 있다.
5. vararg
인자의 개수가 정해지지 않은 파라미터를 정의할 때 사용하는 키워드
fun printSorted(vararg items: Int) {
items.sort()
println(items.contentToString())
}
fun main() {
printSorted(6, 2, 10, 1) // 1
val numbers = intArrayOf(6, 2, 10, 1)
printSorted(*numbers) // 2
}
- vararg를 사용하는 함수 내에서는 Array 타입으로 사용된다.
- 예시 2번처럼 배열 나열을 위한 스프레드 연산자 *를 사용하면, 배열을 인자로 넘길 수 있다.
- 가변 인자 이후의 파라미터는 이름 붙은 인자로만 전달할 수 있다.
가변 인자 파라미터의 순서
- vararg 파라미터 앞에 파라미터가 있는 경우, 앞에 오는 파라미터의 개수를 제외한 나머지가 vararg 파라미터로 전달된다.
- 가변 인자 이후의 파라미터는 이름 붙은 인자로만 전달할 수 있다.
cf) vararg는 이름 붙은 인자로 전달할 수 없다.
스프레드 연산자로 배열을 전달하는 경우만 이름 붙은 인자를 사용할 수 있다.
(함수 내부에서 vararg 인자는 <T> 배열로 사용되기 때문에 원시 타입의 배열을 전달하려면 toTypedArray() 사용해서 일반 배열로 변환해야 함.)
6. 접근 제한자
- public: 프로젝트 어디서나 접근 가능
- private: 클래스 내부에서만 접근 가능
- protected: 클래스 내부와 자식 클래스에서만 접근 가능
- internal: 프로젝트 모듈 내에서 접근 가능
cf) module: 함께 컴파일 되는 파일의 집합. 프로젝트의 하위개념. 프로젝트 내에서 기능을 구분. (프로젝트-모듈-패키지-파일)
'kotlin' 카테고리의 다른 글
[kotlin/코틀린] 프로퍼티 (0) | 2023.06.22 |
---|---|
[kotlin/코틀린] 널 가능성 (0) | 2023.06.22 |
[kotlin/코틀린] 클래스 정의하기 (0) | 2023.06.22 |
[kotlin/코틀린] 기초 문법 (변수, 타입) (0) | 2023.06.22 |
[kotlin/코틀린] 기초 문법 (조건문, 루프, 예외 처리) (0) | 2023.06.22 |