2.1 기본 문법
변수 정의하기
- 세미콜론 생략 가능(안쓰는걸 권장)
- 타입 추론 기능으로, 변수 타입을 지정하지 않아도 됨
- 타입
- val : 변경 불가
- var: 변경 가능
val x = 5
val n: Int = 100
val text: String //단, 사용하기 전에 초기화 필요
print(n+1) //error
var sum = 1
print(a++) // 1 출력
print(++a) // 3 출력
식별자
- 일반적인 변수명
- 역따옴표로 감싼 식별자 -> 어떤 문자열이든 설정 가능, 하지만 가독성을 위해 지양
val `name with spaces` = 2
식과 연산자
- 후위 > 전위 > 곱셈 > 덧셈 > 중위 > 비교 > 동등 > 논리곱 > 논리합 > 대입
2.2 기본 타입
하위 타입 개념이 있음 val n: Any = 1
- 정수
- 부동소수점수
- 부동 소수점 수의 타입은 Double로 고정이다
- 산술 연산
- 자바와 동일
- 타입 혼용 가능: Double > Float > Long > Int > Short > Byte
- 비트 연산
- Int, Long은 비트 연산을 지원
- Char 타입
- 유니코드 한 글자를 표현. '' 사이에 넣어서 표현할 수 있음
- 수 변환
- 대상 타입이 더 큰 범위를 담는 타입인 경우 손실 없이 수행됨
- Boolean
- bool -> int 등으로의 변환 불가, 반대로만 수행할 수 있음
- 비교 연산
- 서로 다른 타입 간의 대입은 불가하지만, 비교는 가능
- 단 booleand는 동등성 비교만 가능
//1. 정수
val a = 12345
val b = 23_512_567 (가독성을 높이기 위해 _ 사용 가능)
val c = 100L
val d = 0xF9 // 249
//2. 부동소수점 수
val a = 3.14
val b = .25
val c = 1E3
val pi: Double = 3.14f // error
//3. 산술 연산
print(7.floorDiv(4)) // 1
print(7.mod(4)) // 3
//5. Char
val z = 'a'
print(a+5) // f
//6. 수 변환
val n = 100
val l: Long: n // error
//7. boolean
a || b and c or d && e -> a || ((b and c) or d) && e)
2.3 문자열
val hello = "Hello, world!"
val name = wjdtn
print("Hello, ${name}) // Hello, wjdtn
print("Hello, " + name)
유용한 함수들
- .length, .lastIndex
- .isEmpty(), .substring(1), .startWith("h"), .indexOf('b')
2.4 배열
- 배열을 생성하고 나면 길이는 바꿀 수 없지만, + 연산을 사용해 추가된 새로운 배열을 만들 수 있다
val a = emptyArray<String>()
val b = arrayOf("hello", "world")
val c = arrayOf(1, 2, 3)
val d = Array(size) { (it + 1)*(it + 1) }
val e = intArrayOf(10)
val x = arrayOf(1, 4, 9)
x.size
x[2] = 100 // 원소 변경 가능
val y = x.copyOf()