Char, Str (문자와 문자열)
Char는 문자를 표현하는 타입입니다. 코틀린 코드에서 Char 타입의 데이터는 문자를 작은따옴표 (‘ex) Char = ‘a’ ‘) 로 감싸서 표현합니다. 단 Number 타입으로는 표현할 수 없습니다.
* 문자 표현 val a: Char = 'a' if (a==1) { // 오류 발생 }
Str는 문자열을 표현하는 타입입니다. String 타입의 데이터는 문자열을 큰 따옴표(“ex) “a” “)나 삼중 따옴표 (“””) 로 감싸서 표현합니다. 큰따옴표로 표현한 문자열에서 Enter나 Tab에 의한 줄 바꿈이나 들여쓰기 등을 그대로 유지하려면 역슬래시로 시작하는 이스케이프 시퀀스를 입력해야 합니다. 그러나 삼중 따옴표로 표현할 때는 키보드로 입력한 줄 바꿈이나 들여쓰기 등이 데이터에 그대로 반영됩니다. 다음 코드와 실행 결과를 참고해보면 됩니다.
* 문자열 표현 fun main(){ val str1 = "Hi \n Hi" val str2 = """ Hi Hi """ println("str1 : $str1") println("str2 : $str2") } ---------------------------------[실행결과] str1 : Hi (\n 반영됨 줄바꿈) Hi Str2 : (""" 키보드로 입력한 줄내용 반영) Hi Hi
안드로이드 스튜디오에서 삼중 따옴표를 사용하면 닫는 따옴표 뒤에 .trimIndent() 함수가 자동으로 추가됩니다. 이 함수는 문자열 앞에 공백을 없애 줍니다.
Str 타입의 데이터에 변숫값이나 어떤 연산식의 결괏값을 포함해야 할 때는 $ 기호를 이용합니다. 이를 문자열 템플릿 이라고 합니다.
* 문자열 템플릿 fun main(){ fun sum(no: Int):Int{ var sum = 0 for (i in 1..no){ sum += i } return sum } val name: String = "KDIDI" println("name : $name, sum : ${sum(10)}, plus : ${10+20}") -----------------------------------------------------------[실행결과] name : KDIDI, sum : 55(1부터 10까지의 sum+=i에 넣은 값), plus : 30($10+20 결과)
Any – 모든 타입
Any는 코틀린에서 최상위 클래스입니다. 모든 코틀린의 클래스는 Any의 하위 클래스 입니다. 따라서 Any 타입으로 선언한 변수에는 모든 타입의 데이터를 할당할 수 있습니다.
(최상위 클래스)
모든 타입의 데이터를 할당할 수 있음
Any 타입 사용 예 val data1: Any = 10 -> int형 val data2: Any = "Hi" -> Str형 class User val data3: Any = User() -> Class형
Unit – 반환문 없는 함수
Unit은 다른 타입과 다르게 데이터의 형식이 아닌 특수한 상황을 표현하려는 목적으로 사용합니다.
Unit 타입으로 선언한 변수에는 Unit 객체만 대입할 수 있습니다. 따라서 Unit 타입으로 변수를 선언할 수는 있지만 의미가 없습니다. 이런 Unit 타입은 주로 함수의 변환 타입으로 사용합니다. 함수에서 반환문이 없음을 명시적으로 나타날 때 Unit 타입을 사용합니다.
* Unit 타입 사용 val data1: Unit = Unit
* Unit 타입 사용 (반환문이 없는 함수) fun some() : Unit{ println(10+20) }
함수를 선언할 때 반환 타입을 생략하면 자동으로 Unit이 적용됩니다. 즉, 오른쪽 소스는 위의 소스와 같습니다.
* 반환 타입을 생략한 예 fun some(){ println(10+20) } --자동으로 Unit 적용됨--
Nothing – null이나 예외를 반환하는 함수
Nothing도 Unit과 마찬가지로 의미 있는 데이터가 아니라 특수한 상황을 표현합니다. Nothing 으로 선언한 변수에는 null만 대입할 수 있습니다. 즉, Nothing 으로 선언한 변수는 데이터로서는 의미가 없습니다.
* Nothing 사용 val data1: Nothing? = null
Nothing은 주로 함수의 반환 타입에 사용합니다. 어떤 함수의 반환 타입이 Nothing이면 반환은 하지만 의미 있는 값은 아니라는 의미 입니다. 항상 null만 반환하는 함수라든가 예외를 던지는 함수의 반환 타입을 Nothing 으로 선언합니다. (의미있는 값은 아니다.)
null 반환 함수와 예외를 던지는 함수 fun some1(): Nothing?{ return null } fun some2(): Nothing{ throw Exception() }
널 허용과 불허용
코틀린의 모든 타입은 객체이므로 변수에 null을 대입할 수 있습니다. null은 값이 할당되지 않은 상황을 의미합니다. 코틀린에서는 변수를 선언할 때 null을 대입할 수 있는 변수인지, null을 대입할 수 없는 변수인지 명확하게 구분해서 선언해야 합니다.
(null 허용 nullable) (null 불허용 not null)
이러한 구분은 변수를 선언할 때 타입 뒤에 물음표(?)로 표시합니다. 타입 뒤에 물음표를 추가 하면 널 허용으로 선언하지만 반대로 물음표를 추가하지 않으면 불허용으로 선언합니다.
널 허용과 불허용 val data1: Int = 10 data1 = null // 오류! val data2: Int? = 10 data2 = null // 성공! ----------------------- ? 유무는 있을때는 널 허용으로 선언 없을때는 널 불허용으로 선언 따라서 data1은 오류를 출력하게 되고 data2는 null을 대입하여도 정상적으로 출력하게 된다.
함수 선언하기
코틀린에서 함수를 선언하는 방법은 fun 이라는 키워드를 이용합니다.
* 함수 선언 방식 fun 함수명(매개변수명: 타입): 반환 타입 {...}
함수에는 반환 타입을 선언할 수 있으며 생략하면 자동으로 Unit 타입이 적용됩니다.
* 반환 타입이 있는 함수 선언 fun some(data1: Int): Int { return data1 * 10 }
함수의 매개변수에는 var나 val 키워드를 사용할 수 없습니다. val이 자동으로 적용되며 함수 안에서 매개변숫값을 변경할 수 없습니다.
* 매개변숫값 변경 오류 fun some(data1: Int){ data1 = 20 // 오류 }