자바와 코틀린의 차이점

1.자바에는 있지만 코틀린에는 없는 기능

체크드 익셉션(Checked Exception)

  • 자바의 익셉션 계층

① Throwable: 예외 계층의 최상위 클래스


② Error: 시스템에 비정상적인 상황이 발생.예측이 어렵다.


③ Exception: 시스템에서 포착 가능하며(try-catch) 복구 가능.예외 처리 강제

Ex)FileNotFoundException, IOException

(자바에서 Exception은 Compile Error가 발생하기에 무조건 try~catch로 감싸거나, throws로 예외 전파 해야한다.)

try {
  Thread.sleep(1);
} catch (InterruptedException e) {
  // 예외 처리
}
  • 자바에서 Checked Exception을 처리할때, 의미 없는 처리를 반복하는 경우가 있다.
  • Checked Exception이 발생할 경우 catch안에서 에러를 해결하는 일은 생각보다 흔하지 않고,

오히려 생산성을 감소 시킨다.

try{
  log.append(message)
} catch(IOException e) {
  // Do nothing 흔하게 볼 수 있는 코드
}

try {
  File file = FileUtils.get(filename);
  //...
}catch (FileNotFoundException e) {
  //파일이 없는데 어떤 처리를 하지?
}

try {
  return objectMapper.readValue(json, clazz);
} catch (IOException e) {
  //단순 에러 로그 출력
  logger.error(e.getMessage(), e);
}

④ RuntimeException: 런타임시에 발생하는 예외.예외 처리를 강제하지 않음.

ex) NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException

(CODE를 작성하는 시점에는 파악 하기 어려움,Unchecked Exception)

런타임은 프로그램의 수명 주기 중 실제로 코드가 실행 되면서, 메모리가 할당되고, 사용자와 상호 작용하며, 다양한 작업을 수행하는 시간이다. 런타임 오류는 이러한 실행 과정에서 발생하는 오류로, 일반적으로 프로그램의 논리적 오류, 잘못된 데이터 처리, 또는 예상하지 못한 상황에 대한 처리의 부재와 같은 문제로 인해 발생한다.


Kotlin은 Checked Exception을 강제하지 않는다.

Thread.sleep(1);

원하는 경우 try-catch를 쓸 수 있다.

try {
  Thread.sleep(1)
} catch (e: Exception) {
  //예외 처리
}

기본 자료형

  • 자바는 Primitive data Type을 지원하며, 객체로된 Reference type도 지원한다.
int i = 0;
Integer ii = 0;
String str = ii.toString();
  • 코틀린은 레퍼런스 타입만 지원한다.

val i: Int = 0;

val str: String = i.toString()


정적 멤버

  • 자바는 static 키워드로 정적 멤버를 선언한다.
public class JavaClass {
  
  static int i = 0;
  
  public static void staticMethod() {
    // ... 
  }
}
  • 코틀린은 companion object로 대체 한다.
class KotlinClass {
   
  companion object {
    val i: Int = 0
      
      fun function() {
      //...
    }
  }
}

삼항 연산자

  • 자바는 삼항 연산자가 존재한다.

String animalSound = "호랑이".equals(animal) ? "어흥" : "야옹";

  • 코틀린은 if-else로 대신한다.

val animalSound: string = if ("호랑이" == animal) "어흥" else "야옹"


세미콜론(;)

  • 자바에서 라인의 끝은 무조건 세미콜론으로 끝나야한다.

Boolean isAdmin = userService.isAdmin(userId);

  • 코틀린은 세미콜론이 필수가 아니다.

val isAdmin: Boolean = userService.isAdmin(userId)


2.Kotlin에는 있지만 자바에는 없는 기능

확장

  • 개발자가 임의로 객체의 함수나 프로퍼티를 확장해서 사용할 수 있다.
MyStringExtensions.kt

fun String.first(): Char {
 return this[0]
}

fun String.addFirst(char: Char): String {
    return char + this.substring(0)
}

fun main() {
   println("ABCD".first()) // 출력 : A
   
   println("ABCD".addFirst('Z')) // 출력 : ZABCD
}

출처 : FastCampus

'Kotlin' 카테고리의 다른 글

Kotlin 09.인터페이스  (0) 2023.04.02
Kotlin 08. 상속  (0) 2023.04.02
Kotlin.06 클래스와 프로퍼티  (0) 2023.04.02
Kotlin 05.예외처리  (0) 2023.04.02
Kotlin 04. 널 참조  (0) 2023.04.02

+ Recent posts