코틀린 언어 정리 1-1

기본 - 언어의 특징, 기본 형(Type)

언어의 특징

변수, 함수 선언 등을 보면 동일한 의미를 가지는 표현이 다양하게 존재합니다. 표현 방법이 다양한 이유는 주로 코딩량을 줄이거나, 간결하게 표현하여 가독성을 높이기 위함으로 보입니다. 처음에는 매우 혼란스럽습니다. 그래도 다음의 기준을 중심으로 코드를 자주 보면 조금은 도움이 될 것 같습니다.


"문법대로 코딩 했을 때 명백하게 표현이 중복 되거나, 또는 문맥 상 추론이 가능하여 중복이라고 판단 되는 문법 요소들은 대부분 중복이 제거된 다른 표현법이 존재한다."


코틀린에서는 기본 타입을 포함하여 모든 것이 객체입니다. 단 ?가 추가되지 않은( nullable이 아닌 ) 기본 타입은 코틀린 코드가 Java로 변환될 때 기본 타입에 대한 Java의 객체가 만들어지는 것이 아니라, 이와 대응하는 Java의 기본 타입으로 변환됩니다. 예를 들면 코틀린의 "Byte"는 Java의 "byte"로 변환됩니다. 코틀린의 "Byte?"는 Java의 "java.lang.Byte" 로 변환됩니다.


기본 형(Type)

숫자형

Double, Float, Long, Int, Short, Byte

특징

Int, Long형만 bit 연산이 가능합니다.

숫자에 밑줄 표현을 사용할 수 있습니다.


예제

var nNum:Int = 1_000_000

회계 등에서 숫자 자릿수를 구분하기 위해 사용하는 콤마(',') 대신에 '_'을 사용하여 숫자 자리수를 구분할 수 있습니다.


문자형

String

예제

"문자열"

"""다중 라인 문자열"""


Char

예제

'A', 'B'


String Interpolation(보간법)/String Template

"(따옴표, 인용 부호)를 이용하여 문자열을 정의할 때 코드(보통 출력하고자 하는 변수를 자주 사용함)를 문자열 내부에 포함시킬 수 있는 방법


특징

String Template/Interpolation 을 지원하며 여러줄 문자열을 """( 따옴표 3개 )을 이용해 특별한 구분 기호 없이 선언할 수 있는 방법을 제공 합니다.


예제

var str1 = "템플릿 테스트1"

var str2 = "템플릿 테스트2"

var str3 = """테스트 1L

테스트 2L $str1, $str2 

테스트 3L ${str1 + str2} """


자동 형 변환

기본 타입의 자동 변환은 지원하지 않습니다. C/C++ 같은 언어의 경우 int, long 등의 서로 호환되는 숫자 기본 타입(형)간 형 변환은 할당 연산자( = )만 사용해도 자동으로 되지만 코틀린에서는 각 객체( Int, Long 등 )에서 제공하는 변환 함수( toInt(), toLong() ... )를 이용해야 합니다.


기타

Boolean

true, false 두 가지 값을 가지며 C/C++ 처럼 0 == false, 1 == true 등의 비교를 수행하는 코드는 허용되지 않습니다. 즉 true/false 는 숫자와 호환되지 않습니다.


Unit

void 처럼 사용 합니다.

함수의 return type을 명시하지 않을 경우 Unit 타입으로 처리됩니다.. return 문도 생략 가능합니다.

Unit 타입의 변수에는 Unit만 대입 가능합니다.


예제

var value:Unit = Unit


Nothing

객체를 생성할 수 없는 타입(클래스)이며, 존재하지 않는 값을 나타냅니다. 리턴 값이 존재하지 않는 경우 즉 리턴을 하지 않는 경우에 사용할 수 있습니다.

어떤 타입의 변수에도 대입 불가능하며 어떤 타입의 값도 설정할 수 없습니다.


어떤 경우에 사용되나?

  • throw 표현식의 type

  • return을 하지 않는 경우 사용

    • 무한루프로 구현되어 의도적으로 리턴하지 않도록 처리된 함수

    • throw 만 있어 리턴하지 않는 함수

    • null만 리턴하는 경우

  • type을 명시하지 않은 어떤 변수 등에 null을 할당 했는데 컴파일러가 이 변수의 type을 추론할 수 없는 경우 Nothing? 로 처리됨


Any

모든 타입의 최상위 클래스이며 어떤 타입도 대입 가능합니다.


null 허용 타입

변수 선언 시 데이터 타입 뒤에 ?를 붙이면 null 허용 타입이 됩니다.


예제

var num:Int? = null


null 허용 타입과 일반 타입의 대입 관계

예제

var numNullable:Any? = 3

var numNoNull:Any = 5

numNoNull = numNullable  //  error

numNullable = numNoNull

Any? 타입의 변수에 Any타입의 변수를 대입하는 것은 가능하지만 그 반대는 불가능합니다.

Any? ⇐ Any    ok

Any ⇐ Any?    not ok


+ Recent posts