728x90
JAVA에서 Kotlin 예외 다루기
JAVA 예외, JAVA에서 Kotlin예외 호출하기
public class JavaThrow {
public void throwIOException() throws IOException {
//호출 시, try-catch로 감싸거나 예외를 전파해야한다
throw new IOException("체크드 익셉션인 IOException 발생");
}
public static void main(String[] args) {
/*
JavaThrow javaThrow = new JavaThrow();
try {
javaThrow.throwIOException(); //checked exception이 발생했기 때문에 전파하거나 try-catch로 잡아야한다
} catch (IOException e) {
e.printStackTrace();
}
*/
//코틀린의 예외코드 호출
KotlinThrow kotlinThrow = new KotlinThrow();
//kotlinThrow.throwIOException(); //코틀린의 예외 코드를 실행하여도 try-catch를 강제하지 않아도 된다.
//만약 try-catch를 하게 된다면, 컴파일 오류가 발생한다.
//@Throws 어노테이션이 있다면 오류가 발생하지 않는다
try {
kotlinThrow.throwIOException();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Kotlin 예외, Kotlin에서 JAVA예외 호출하기
class KotlinThrow {
@Throws(IOException::class) //강제로 예외 전파를 하고 싶을 때 사용
fun throwIOException() {
throw IOException("체크드 익셉션인 IOException 발생")
}
}
fun main() {
//예외를 전파하거나, try-catch를 사용하지 않아도 된다(강제하지 않는다)
val javaThrow = JavaThrow()
javaThrow.throwIOException()
val kotlinThrow = KotlinThrow()
kotlinThrow.throwIOException()
}
- JAVA에서는 Checked Exception을 다룰 때, try-catch나 throws가 필수이다(예외를 잡거나, 전파해야 한다)
- Kotlin에서는 Checked Exception이 존재하지 않음으로, 예외처리가 강제되지 않는다.
- JAVA 코드에서 Kotlin의 예외를 호출할 때, try-catch로 감싸게 되면, 컴파일 오류가 발생하게 되는데, Kotlin에서 전달받은 예외를 잡거나, 전파하기를 강제하기 위해서는 @Throws 애노테이션을 사용해야 한다.
- JAVA에서는 throws IOException를 사용해서 발생 가능 예외에 대해 사용하는 측에 전달할 수도 있기 때문에 Kotlin에서 JAVA와의 상호 운용을 위한 @Throws 애노테이션을 제공한다.
- @Throws 애노테이션을 사용한 순간부터는 예외를 잡지 않거나, 전파하지 않을 경우 오류가 난다.
JAVA 예약어 접근
JAVA 코드(in, is는 JAVA에서 예약어가 아니다)
public class JavaKeyword {
private InputStream in; //해당 프로퍼티는 코틀린의 키워드라 문제가 있다.
private Boolean is;
public InputStream getIn() {
return in;
}
public void setIn(InputStream in) {
this.in = in;
}
public Boolean getIs() {
return is;
}
public void setIs(Boolean is) {
this.is = is;
}
}
enum CountryCodeJava {
kr, jp, us;//, do;//do라는 도미니카 공화국을 추가하기 어렵다
}
Kotlin에서 호출(in, is는 Kotlin에서 예약어이다)
enum class CountryCodeKotlin {
kr, jp, us, `do`; //코틀린에서는 백틱(`)을 사용하면 문제가 발생하지 않기 때문에 비지니스적으로 의미있는 이름을 쓸 수 있다
}
fun main() {
val javaKeyword = JavaKeyword()
javaKeyword.`in` //in은 코틀린에서 사용되는 예약어라 문제가 발생하지만, 백틱(`)을 사용하면 이를 해결 할 수있다
javaKeyword.`is`
}
- JavaKeyword의 in과 is 프로퍼티는 JAVA에서는 예약어가 아니지만, Kotlin에서는 예약어로 사용돼서 문제가 된다.
- 백틱(`)을 사용하면, 이러한 문제를 해결할 수 있다.
- 이러한 해결 방법은 비즈니스와 연결될 수 있다
- 도미니카 공화국의 국가코드 do 같은 경우 JAVA, Kotlin에서 모두 예약어로 사용되어 사용하기 힘들다.
- JAVA에서는 이를 해결하기 매우 힘들지만, Kotlin에서는 백틱(`)을 사용해서 해결할 수 있으며, 비즈니스적으로도 깔끔한 코드를 작성할 수 있다.
728x90
'실무 프로젝트로 배우는 Kotlin & Spring > JAVA 프로젝트에 코틀린 도입하기' 카테고리의 다른 글
| JAVA 기반 스프링 프로젝트에 코틀린 적용 (0) | 2022.11.05 |
|---|---|
| 코틀린과 롬복 (0) | 2022.11.05 |
| JAVA에서 확장함수 사용하기 (0) | 2022.11.04 |
| JvmStatic을 이용해 정적 함수 호출하기 (0) | 2022.10.23 |
| Getter, Setter 호출하기 (0) | 2022.10.23 |