Enum 과 Funtional Interface 👋
Enum 은 단순히 타입을 지정하고 상수 매핑하는 것 말고도 활용도가 높다.
그 예시를 코드로 간단하게 들어보겠다.
예시는 간단히 A면 "A"를 이어 붙이고 B면 "B"를 이어 붙이는 로직을 보여보겠다.
//command enum
@RequiredArgumentConstructor
public enum HelloType {
A(str -> str.concat("A")),
B(str -> str.concat("B")),
C(str -> str.concat("C"))
;
private final Funtion<String, String> command;
public char getChar(String str){
return this.command(str);
}
}
//before
if (type.equals(HelloType.A)){
return str.concat("A");
} else if (type.equals(HelloType.B)) {
return str.concat("B");
} else if (type.equals(HelloType.C)) {
return str.concat("C");
}
//after
return type.getChar();
위 command enum 코드를 사용하면 before -> after 로 if/else 문을 제거하며 간략히 만들 수 있다.
장점을 정리하자면
1. if/else 문의 분기문이 없어진다. 코드도 간결해지고 가독성이 좋아진다 👍
2. 클라이언트가 해당 핵심 로직에 대해서 구체적으로 몰라도 된다. 즉 해당 enum 타입만 알면된다(추상화를 적용하며 다형성을 얻어갈 수 있다) 👍
3. 핵심 로직이 enum 에 모여있어서 응집력이 올라간다 👍
면접에서 많이 나오는 질문이다 🧑💻
해당 질문에 대해서 잘못된 답변으로 아래와 같은 답변을 많이한다 🤚
Checked Exception 은 컴파일 할 때 발생하고, Unchecked Exception 은 런타임에 발생하는 예외다.
위 답변이 틀린 이유는 아래와 같다.
-> 컴파일 시점에 발생하는건 예외가 아니라 에러다. 예외 자체는 런타임에만 발생한다.
올바른 답변은 아래와 같다.
Checked Exception 은 컴파일 할 때 예외에 대한 처리를 강제하고, Unchecked Exception 은 예외에 대한 처리를 강제하지 않는다.
Exception
클래스를 상속하면 Checked Exception 이 된다.Unhandled Exception
(실행전) , Unreported Exception
(실행후) 메세지와 함께 컴파일 에러가 나온다.예외가 발생했으면 처리를 해야한다 라는 생각 때문에 Checked Exception
으로 처리해야한다고 생각할 수 있다. 하지만 실제로는 Unchecked Exception
을 사용해야한다.
그 이유는 대부분의 예외가 로직에서 해결할 수 없기 때문이다.
throws
를 하거나 그대로 throws
해버리며 무의미한 throws
가 반복된다.또한 던지는 예외를 통해 예외가 발생하는 메소드의 캡슐화를 깨버리는 것이다. 외부에서 예외를 통해 내부에서 해당 예외가 던저지는 메소드를 사용하고 있다는 것이 노출되는 것이다.
따라서 캡슐화를 위반하지 않으면서 필요할때만 예외를 처리할 수 있는 Unchecked Execption
을 사용하자!! 🤓
깰끔한 정리 잘 보고 갑니다~~