백엔드 데브코스 TIL #1

은찬·2023년 9월 20일
3

Enum 활용

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 에 모여있어서 응집력이 올라간다 👍

Java 의 Exception

Checked Exception 과 Unchecked Exception 의 차이

면접에서 많이 나오는 질문이다 🧑‍💻
해당 질문에 대해서 잘못된 답변으로 아래와 같은 답변을 많이한다 🤚

Checked Exception 은 컴파일 할 때 발생하고, Unchecked Exception 은 런타임에 발생하는 예외다.

위 답변이 틀린 이유는 아래와 같다.
-> 컴파일 시점에 발생하는건 예외가 아니라 에러다. 예외 자체는 런타임에만 발생한다.


올바른 답변은 아래와 같다.

Checked Exception 은 컴파일 할 때 예외에 대한 처리를 강제하고, Unchecked Exception 은 예외에 대한 처리를 강제하지 않는다.


Checked Exception

  • Exception 클래스를 상속하면 Checked Exception 이 된다.
  • Checked Exception 은 try/catch 혹은 throws 로 예외를 처리해주지 않으면 Unhandled Exception(실행전) , Unreported Exception(실행후) 메세지와 함께 컴파일 에러가 나온다.

Unchecked Exception

  • runtimeException 클래스를 상속하면 Unchecked Exception 이 된다.
  • 예외처리의 강제성을 받지 않는다.

그러면 두 예외중 우리는 어떤 예외를 사용해야할까 🤔

  • 예외가 발생했으면 처리를 해야한다 라는 생각 때문에 Checked Exception 으로 처리해야한다고 생각할 수 있다. 하지만 실제로는 Unchecked Exception 을 사용해야한다.

  • 그 이유는 대부분의 예외가 로직에서 해결할 수 없기 때문이다.

    • 즉 로직에서 예외를 해결할 수 없기 때문에 다른 예외로 변환해서 throws 를 하거나 그대로 throws 해버리며 무의미한 throws 가 반복된다.
  • 또한 던지는 예외를 통해 예외가 발생하는 메소드의 캡슐화를 깨버리는 것이다. 외부에서 예외를 통해 내부에서 해당 예외가 던저지는 메소드를 사용하고 있다는 것이 노출되는 것이다.

  • 따라서 캡슐화를 위반하지 않으면서 필요할때만 예외를 처리할 수 있는 Unchecked Execption 을 사용하자!! 🤓

profile
서버 개발하는 사람입니다

1개의 댓글

comment-user-thumbnail
2023년 9월 22일

깰끔한 정리 잘 보고 갑니다~~

답글 달기