이번 글에서는 수, 문자, 불, 값 등을 표현하는 코틀린 타입을 소개할 것이다.
책을 읽어본 결과 정수타입과 bit타입은 내가 사용하는 C++과 크게 다르지 않았지만, 문자에 관해서는 확실히 코틀린이 편리한 기능이 많았다.
📕문자타입 char
새 줄 문자와 같은 특수 문자를 위해 코틀린은 이스케이프를 제공한다.
- \t : tab
- \b : 백스페이스
- \n : 새줄
- \r : 캐리지 리턴
- \' : 작은따옴표, \" : 큰 따옴표
- \\는 역 슬래쉬
- \$ : 달러 표시
내부에서 char 값은 그냥 문자 코드일 뿐이지만, 코틀린은 char 자체를 수 타입으로 취급하지는 않는다. 하지만 유니코드 문자 집합 내에서의 몇 가지 산술 연산을 허용한다. 다음은 char로 할 수 있는 연산이다.
- +/- 연산자를 사용해 문자에 수를 더하거나 뺄 수 있다. 더하거나 뺀 수만큼 코드 포인트가 이동한 새 문자를 반환한다.
- println(a+5) ==> a보다 뒤에 있는 다섯 번째 글자인 f를 출력함.
- println(f-5) ==> f보다 앞에 있는 다섯 번째 글자인 a를 출력함.
- 두 문자로 뺄셈을 하면 두 문자의 코드 포인트 간 거리를 얻을 수 있다.
- println(h-a) ==> 'a'와 'h' 사이의 거리를 출력함.
- 문자를 ++ 또는 --로 증가시키거나 감소시킬 수 있다(의미는 +나 -로 1을 더하거나 뺄 때와 동일)
- println(--h) ==> 'h' 바로 앞 글자
- println(++a) ==> 'a' 바로 뒤 글자
자바에서는 문자(char)에 대한 산술 연산 결과가 임시적으로 정수로 변환되지만 코틀린에서는 (두 문자의 차이 계산을 제외한) 모든 계산은 char를 결과로 돌려준다.
📕문자열
문자열 리터럴을 정의하는 가장 간단한 방법은 앞에서 본 것처럼 자바와 마찬가지로 큰 따옴표로 문자열을 감싸는 것이다.
val hello = "Hello, world!"
import java.util.*
fun main() {
val name=readLine()
println("hello, $name+!\n Today is ${Date()}")
}
기본적으로 ${}의 중괄호 사이에 넣기만 하면, 어떤 올바른 코틀린 식이든 문자열에 넣을 수 있다.
name과 같은 경우는 간단한 변수 참조라 중괄호를 생각한다.
이러한 기능을 문자열 템플릿이라고 한다.
또 다른 문자열 유형으로는 로우 문자열(raw string)이 있다.
로우 문자열을 사용하면 이스케이프 시퀀스를 사용하지 않고도 문자열을 작성할 수 있다.
이러한 리터럴은 큰 따옴표 세 개로 둘러 사여 있고, 새 줄 문자를 포함한 임의의 문자를 포함할 수 있다.
import java.util.*
fun main() {
val name = readLine()
val message = """
hello, $name!
Today is ${Date()}"""
println(message)
}
위 코드의 실행결과이다. 출력 형식이 들여 쓰기 때문에 많이 지저분한 것을 볼 수 있다.
이러한 불필요한 들여 쓰기를 없애는 기능이 바로 trimIndent()
이다.
💡수정 코드
import java.util.*
fun main() {
val name = readLine()
val message = """
hello, $name!
Today is ${Date()}""".trimIndent()
println(message)
}
trimIndent()
를 사용하니 출력 형식이 깔끔하게 된 것을 볼 수 있다.
📗기본 문자열 연산
모든 String 인스턴스는 length
(문자열에 든 문자 수)와 lastIndex
(문자열의 마지막 문자 인덱스) 프로 미터를 제공한다.
"Hello!".length // 6
"Hello!".lastIndex //5 (첫번째 인덱스는 0부터 시작)
인덱스를 각 괄호([])안에 넣는 연산자를 사용해 개별 문자에 접근할 수 있음.(인덱스는 0부터 시작)
val s= "Hello"
println(s[0]) //H
println(s[1]) //e
println(s[10]) //잘못된 인덱스 오류 발생
문자열은 ==와!=를 사용해 동등성을 비교할 수 있다. (문자열의 내용을 비교함)
따라서 문자들의 순서와 길이가 같다면 같은 문자열로 간주함.
s1과 s는 같기 때문에 true를 반환함.
✔자바와 다른 점
자바에서는 equals() 메서드를 사용해야 하지만 코틀린은 호출할 필요가 없다.
문자열에 대소 비교는 사전식 순서로 비교한다.
println("abc">"cba")//true
println("123" >"34") // false
📜문자열이 제공하는 함수.
1.isEmpty() , isNotEmpty()
:문자열이 비어있는지 검사함.
2.subString
:부분 문자열을 추출함.
substring(a, b)는 a에서 b까지를 추출한다. (만약 b가 주어지지 않는다면 a~lastIndex까지 추출함)
3.endsWith, startsWith
:접두사나 접미사인지 검사한다.
문자열의 대소문자까지 구분한다.
4.indexOf
:인자로 받은 문자나 문자열이 수신 객체인 문자열에 나타나는 첫 번째 인덱스를 반환한다.
해당 문자열을 찾을 수 없다면 -1을 반환함.
'Skils > Kotlin' 카테고리의 다른 글
[Kotlin] 함수란? (0) | 2022.08.07 |
---|---|
[Kotlin] array(배열) (0) | 2022.08.07 |
[Kotlin] 기본 문법 (1) | 2022.07.26 |
[Kotlin] 코틀린 생태계 (0) | 2022.07.21 |
[kotlin] 코틀린이란 무엇일까? (0) | 2022.07.21 |