코틀린도 자바와 마찬가지로 enum 타입의 클래스를 제공한다. 자바와 동일하게 상수 클래스로써의 역할을 한다. 코드를 살펴보자 enum class PaymentStatus { UNPAID, PAID, FAILED, REFUNDED } 자바와는 다르게 enum 키워드 뒤에 class라는 키워드를 붙여주어야 한다. 이제 필드를 추가해보자. 해당 enum의 상수가 어떤 값인지를 나타내는 label 문자열 변수를 추가해보자. enum class PaymentStatus(val label: String) { UNPAID("미지급"), PAID("지급완료"), FAILED("지급실패"), REFUNDED("환불") } 해당 값을 출력해보자 fun main() { println(PaymentStatus.UNPAID...
코틀린의 class 타입은 기본적으로 final 입니다. final 키워드가 클래스에 붙게 되는 경우 해당 클래스는 상속을 이어갈 수 없는 클래스가 됩니다. 자바에서는 모든 클래스가 상속이 가능하며 final 키워드를 활용하여 추후 상속가능성을 닫는 구조였습니다. 하지만 kotlin은 class가 상속을 허용해주는 방향으로 발전해나갔으며 해당 키워드는 open 입니다. open class Dog { // 상속이 가능한 상태의 클래스 open var age: Int = 0 open fun bark() { println("멍멍") } } Dog 클래스의 필드, 함수들 또한 클래스와 마찬가지로 open 키워드를 통해 오버라이딩을 허용해주어야 합니다. 해당 Dog 클래스를 상속하는 ChildDog 클래스를 만들..
클래스 (Class) 일단 클래스를 알기 전에 코틀린 파일의 특징부터 알아야 합니다. 코틀린 파일은 xxx.kt 형태로 작성하며 안쪽 구조는 java와는 다소 큰 차이가 있습니다. 우선 메소드가 kt 파일 내에 클래스의 존재와 관련없이 존재할 수 있습니다. // 일반 클래스 class Test(val test: Int) { } // 클래스와 떨어진 함수. fun test() { println("test") } 위의 일반 클래스에서 (val test: Int) 표현은 생략된 생성자 표현입니다. 생성자는 constructor 키워드로 아래와 같이 표현할 수도 있습니다. 하지만 표현상 constructor를 제외한 표현이 더욱 간소화되기도 하고 가독성도 좋기 때문에 대체로 생략하는 편입니다. class Tes..
자바에서 Exception은 아래의 구조를 가진다. 코틀린도 이와 별반 다르지 않다. Error는 말그대로 프로그램을 더이상 운영할 수 없는 정도의 아주 크리티컬한 에러이고, Exception은 우리가 catch 해야할 Exception의 유형들이다. 그 중에서 CheckedException을 처리하는 방법이 Kotlin과 Java와의 차이가 있다. class Test { public static void main(String[] args) { Thread.sleep(1) } } Java에서 위 코드는 컴파일 에러를 뱉는다. 왜냐하면 sleep 메소드는 checkedException을 전파하는 메소드이고 메인 메소드가 이에 대해서 별도로 처리하지 않았기 때문이다. fun main() { Thread.sl..
Null 참조의 위험성 자바를 포함한 많은 프로그래밍 언어에서 가장 많이 발생하는 예외가 바로 NullPointerException일 것입니다. 줄여서 NPE라고도 합니다. Null을 발명한 토니호어는 1965년 null을 발명한 것이 자신의 1조원짜리 실수였다고 고백합니다. 왜냐하면 null로 인해서 발생한 오류와 피해가 수십년간 수십억 달러에 달하기 때문이라고 합니다. 자바에서는 이러한 Null로 인해 발생하는 NPE를 줄이기 위해 Optional 이라는 클래스 타입을 제공하기 시작했습니다. 하지만 자바에서 아무리 Optional을 사용한다고 하더라도 Optional은 타겟값을 감싸는 클래스이기 때문에 그에 대한 오버헤드가 발생하고 컴파일을 하는 단계에서는 문법적 요소만 통과한다면 Null 가능성에 ..
안녕하세요. 업무하는 도중에 JsonNode 인스턴스를 다루었는데 해당 json의 field name들을 List로 가져와야 하는 일이 있었습니다. 이 때, jsonNode.fieldNames() 해당 코드가 반환타입이 Iterator 이었고 이를 List 타입으로 변환이 필요하여 찾아보았고 업무를 종료하고 정리를 해두면 다른분들도 결정하실때 좋을 것 같아서 공유합니다. JsonNode jsonNode = ...; Iterator fieldNameIterator = jsonNode.fieldNames(); 해당 iterator 변수를 List 타입으로 바꾸어 보자! 반복문(for, while 등) List fieldNameList = new ArrayList(); while(fieldNameIterato..
if 문 가장 기본적인 형태의 if 문 val job = "Backend Developer" if (job == "Backend Developer") { println("백엔드 개발자") } else if (job == "Frontend Developer") { println("프론트엔드 개발자") } else { println("개발자 아님") } if문은 표현식이다. 따라서 Java에서와는 다르게 동작한다. 대입이 가능하다. val age : Int = 10 val str = if (age > 10) { "성인" } else { "아이" } 자바에서는 str = "성인", str = "아이" 처럼 if문 안에 대입문을 넣어주었어야 할텐데 코틀린에서는 표현식으로 동작하기 때문에 위와 같은 대입식이 가능..
코틀린은 자바보다 다양한 함수 사용 스타일을 보여준다. default Parameter나 named argument를 봤을 때는 자바를 사용하는 실무에서 마주칠법한 오류에 많은 도움이 될 것 같아보였다. 다른 내용들은 기본적인 내용이므로 코틀린을 많이 작성하다 보면 잘 익어갈만한 내용으로 보인다! 기본적인 함수 fun sum(num1 : Int, num2 : Int) : Int { return num1 + num2 } 표현식 스타일 함수 fun sum2(num1 : Int, num2 : Int) : Int = num1 + num2 표현식과 반환 타입을 생략 가능한 함수 fun sum3(num1 : Int, num2 : Int) = num1 + num2 (단계가 어째 자바 람다식 축약하는 것 같다...) ..