위책을 보고 공부한 내용을 작성함. 기본적으로 Java, SpringBoot와 다른 언어들을 배운 상태에서 작성하기 때문에 몰랐던 내용들을 중점적으로 작성할 예정
설치 부분.
책에서는 무료버전을 다운로드 했지만 나는 유료버전을 사용함.
이후 버전의 문제인지 유료버전의 문제인지 kotlin 프로젝트를 만들때부터 화면이 다르다.
1. Generators부분에 kotlin이 없었다. 그래서 아무 Generators도 선택하지 않고 Language부분에서만 Kotlin으로 선택했다.
2. 책에서는 Build System을 따로 설정하지 않았다. 그래서 기본으로 되어있던 Intellij를 선택해서 진행했다.
이것도 책에서와 다르게 src안에 main과 test로 폴더가 나누어져있었다.
main<kotlin<Main.kt파일이 자동으로 만들어져있었다. 이부분은 생성할때 example코드를 넣어서 나온지도 모르겠다.
그래서 실습에 있어서 패키지를 만들라고 할때 kotlin안에서 패키지를 만들 수밖에없었고 그렇게 진행했다.
Kotlin은 Java와 다르게 전부 참조형 변수
를 사용한다. 일단 참조형 변수를 사용하고 컴파일러에서 참조형변수를 기본형 변수로 바꿔주는 작업을 자동으로 해주어서 따로 관리할 필요가없다.
ctrl + shift + p
를 통해서 추론되는 자료형을 알아볼 수 있다.
정수 자료형
Long: 8바이트(64비트)
Int: 4바이트(32비트) =>기본
Short: 2바이트(16비트)
Byte: 1바이트(8비트)
부호없는 자료형(코틀린 1.3버전에서 실험적 적용)
ULong
UInt
UShort
UByte
실수 자료형
Double: 8바이트(64비트) => 기본
Float: 4바이트(32비트)
논리 자료형
Boolean : 1비트
문자 자료형
Char: 2바이트(16비트)
숫자를 사용하여 Char를 선언할 수는 없다. 대신 toChar()를 사용하여 Int를 바꿔줄수는 있다.
val code: Int = 65 val chFromCode: Char = code.toChar() println(chFromCode) // 결과는 A
문자열 자료형
StringPool에서 변수들을 저장해둔다. 같은 문자열이 있다면 여러번 만들지 않고 한곳에만 만든 다음 str1, str3가 같은 곳을 참조하게 한다.
문자열 안에 변수의 값을 사용할때 $를 이용한다. 만약 변수가 아니라 표현식을 문자열에 포함시키려면 중괄호를 사용한면 된다.
고차 함수와 람다식에서도 typealias를 많이 사용한다.
typealias Username = String // String을 Username이라는 별명으로 대체
val user: Username = "Kildong" // 이제부터 Username은 String과 같은 표현
null을 자료에 넣을때 검사하고 쓰는방법.
자료형 옆에 ?를 사용하면 변수에 null을 넣을 수가 있다.
String과 String?는 다른 자료형이다
엘비스 연산자(?:)
코틀린은 자료형이 다른 변수에 재할당하면 자동형변환이 되지 않는다. 연산할때는 자동형변환 된다.
null을 허용한 변수는 참조형으로 저장되고 아닌것은 컴파일러에 의해 기본형으로 바꿔서 저장된다.
주의! 만약 저장되는 값이 -128~+127보다 작으면 스택에 저장되는것이 아니라 캐시에 저장되므로 a,b,c,d전부 ===로 비교하면 같은 값이 나온다.
컴파일러가 자동으로 형 변환을 하는것
is
키워드
Any를 사용하여 자료형을 결정하지 않은 채로 변수를 선언할 수도 있다. Any형은 코틀린의 최상위 기본 클래스로 어떤 자료형이라도 될 수 있는 특수한 자료형이다.
val x: Any x = "Hello" if (x is String) { print(x.length) // x는 자동적으로 String으로 스마트 캐스트 }
as에 의한 스마트 캐스트
as는 형 변환이 가능하지 않으면 예외를 발생시킨다.val x: String = y as String // y가 null인것을 고려하여 하려면 val x: String? = y as? String
비트 연산자
4.shl(bits) : 4를 표현하는 비트를 bits만큼 왼쪽으로 이동(부호 있음)
4.shr(bits) : 4를 표현하는 비트를 bits만큼 오른쪽으로 이동(부호 있음)
3.ushr(bits) : 3를 표현하는 비트를 bits만큼 오른쪽으로 이동(부호 없음)
4.and(bits) : 4를 표현하는 비트와 bits를 표ㅕ현하는 비트로 논리곱 연산
4.or(bits) : 4를 표현하는 비트와 bits를 표현하는 비트로 논리합 연산
24.xor(bits) : 24를 표현하는 비트와 bits를 표현하는 비트의 배타적 연산
78.inv() : 78을 표현하는 비트를 모두 뒤집음