목록전체 글 (162)
Coding Memo
Java에는 없는 좀 특이한 클래스를 제공한다. 데이터만을 가지고 있는 클래스를 data class로 만들 수 있다. 아래 링크는 공식문서이다. https://kotlinlang.org/docs/reference/data-classes.html Data Classes - Kotlin Programming Language kotlinlang.org Data Class 데이터클래스는 다음과 같은 조건을 충족해야 한다. 기본 생성자는 적어도 하나의 파라미터를 가져야 한다. 모든 기본 생성자의 파라미터는 val이나 var으로만 선언되어야 한다. abstract, open, sealed or inner가 될 수 없다. 데이터 클래스를 5가지 기능으로 나누어본다면 다음과 같다. equals() hashcode() ..
Java에도 열거형이 있듯이 Kotlin에도 있다. 서로 연관이 있는 상수값들을 모아놓은 집합이라고 생각해도 될 것 같다. (물론 이 집합을 타입처럼 사용한다.) 상수 값을 열거할 때 이용하며, 상수 값이므로 보통 대문자로 나타낸다. enum class 상수값은 물론, 함수도 가지고 있을 수 있다. 인자가 없는 간단한 예시이다. fun main() { var c: UserColor = UserColor.RED println(c) if (c.isRed()) { println("c is Red") } } enum class UserColor { RED, GREEN, BLUE; fun isRed(): Boolean = this == UserColor.RED } 인자를 포함하여 생성할 수 있다. fun main..
코틀린은 Java와 100% 호환되는 언어이므로 클래스 안에 클래스가 있는 형태가 가능하다. 마찬가지로 중첩 클래스와 내부 클래스가 있다. 중첩 클래스 (Nested Class) 중첩 클래스는 그 클래스를 포함하고 있는 외부 클래스의 변수나 함수를 공유할 수 없다. 즉, 외부 클래스 안에 있는 중첩 클래스지만 실제적으로는 다른 클래스로 봐도 될 것 같다. 다만 사용은 (외부 클래스 명).(중첩 클래스 명)으로 외부 클래스를 참조하여 사용한다. 형식은 단순히 클래스 안에 다시 클래스를 선언하는 형식이다. fun main() { OuterClass().printOuter() println(OuterClass().a) OuterClass.NestedClass().printNested() println(Oute..
Kotlin 함수 파라미터에 관련한(?) 특징들이다. Overloading 코틀린도 오버 로딩 기능이 있다! 인자의 개수나 타입이 다르면 가능하다. 간단하게 예시만 보자. fun main() { printNumber(1) printNumber(3, 2) } fun printNumber(n: Number) { println(n) } fun printNumber(n: Number, loop: Int) { var i: Int = 0 while(loop > i) { println(n) i++ } } Default Arguments 함수를 호출 할 때 해당 값을 인자로 주지 않아도 default arguments로 돼 있으면 그 값으로 함수를 실행한다. (파이썬을 잠깐 볼 때 파이썬에도 이런 기능이 있었다.) f..
Kotlin은 null safe 한 언어이다. (null 값이 있으면 컴파일이 되지 않는다.) null값을 이용해야 할 때도 있다. 앞서서 변수타입에 '?'를 붙여서 null 값을 줄 수 있다는 것을 알았다. var a: String? = null var b: Int? = null 이를 이용할 경우 null 값인지 확인해야 한다. null값을 그대로 참조하려고 할 경우 컴파일이 되지 않는다. 그 방법에는 3가지가 있다. (온점(.)에 유의하도록 하자. 온점은 참조 연산자이다!) ?. Null safe operator 참조연산자(.) 실행 전에 해당 값이 null 이면, 참조연산자 후의 구문(함수)를 실행하지 않는다. ?: Elvis operator 해당 값이 null이 아니라면 뒤의 함수를 실행하고, n..
Generic (제네릭) 코틀린은 Java와 동일하게 Generic 기능을 제공한다. 사용 방법은 단순하게 안에 알파벳을 넣으면 되는데, 보통은 'T'를 사용한다. 물론 T 외에도 U, V, ... 를 추가적으로 사용해도 된다. 제네릭에서도 타입추론을 하기 때문에 자료형을 명시할 때 중복해서 굳이 쓸 필요가 없다. 특정한 슈퍼 클래스를 상속받은 클래스 타입으로만 제한하고 싶을 때는 을 사용한다. fun doPrintClass(type: T) { type.printClass() } fun main() { //위의 함수 이용 doPrintClass(A()) doPrintClass(B()) //맨 아래 class 이용 GenericTest(A()).doPrintClass2() GenericTest(B()).d..
클래스 간 캐스팅은 Kotlin의 클래스의 다형성과 관련이 있다. A 클래스가 B 클래스를 상속받을 경우, A 클래스는 B 클래스의 객체 공간이 있고 자신만의 A 클래스 객체 공간이 따로 있다. 다음의 예시를 보자. fun main() { var c: A = A() var d: A = B() var e: B = B() c.printName() d.printName() e.printName() e.printName2() } open class A() { open var name: String = "ClassA" open fun printName() { println("$name") } } class B : A() { override var name: String = "ClassB" override fun ..
Kotlin은 Java와 동일하게 문자열을 String 클래스로 사용한다. 마찬가지로 문자열에 대한 다양한 기본 함수들을 제공한다. 아래 링크는 String 클래스에 대한 공식 문서로, 속성과 함수들이 나와 있다. https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/ String - Kotlin Programming Language kotlinlang.org 참고: String 클래스의 Init() 내용이 없다. 문자열을 만들 때는 단순히 "" 안에 값을 넣으면 문자열이 된다. Kotlin에서 문자열 만들 때 특이한 점은 html처럼 """ (큰 따옴표 3개)를 이용해서 안의 내용 그대로 문자열로 사용이 가능하다. 연산자 '+'를 이용하여 Java처..