Enum
- 생성자의 접근 제한자 기본 값이 private이다.
- Enum은 서로 연관된 고정된 상수의 집합이기 때문에 외부객체의 생성을 막기 위해서이다.
- 생성자를 통해 값을 초기화하거나 동적으로 변환하지 못하게 하기 위함이다. - IDE의 적극지원을 받는다. (자동완성, 오타검증, 텍스트 리팩토링, ...)
- Type Safety하다.
- 타입 안정성을 보장한다. - 가독성을 높여준다.
- 관리가 용이하다.
- 값의 추가와 변동을 위해서 한 곳만 수정하면 되기 때문이다. - 싱글톤을 보장해준다.
- 싱글톤이란? 객체의 인스턴스가 오직 1개만 생성되는 디자인 패턴이다.
public enum OperatorType {
PLUS("+"),
MINUS("-"),
MUL("*"),
DIV("/"),
REM("%");
private String operator;
// 싱글톤 패턴
OperatorType(String operator) {
this.operator = operator;
}
// 해당 연산자를 찾아주는 것이다.
public static OperatorType findOperator(String operator) {
for (OperatorType op : OperatorType.values()) {
if (op.getOperator().equals(operator)) {
return op;
}
}
throw new RuntimeException();
}
public String getOperator() {
return operator;
}
}
switch (operatorType) {
case PLUS: result = operator[0].operate(num1, num2); break;
case MINUS: result = operator[1].operate(num1, num2); break;
case MUL: result = operator[2].operate(num1, num2); break;
case DIV: result = operator[3].operate(num1, num2); break;
case REM: result = operator[3].operate(num1, num2); break;
default: throw new OperatorException("잘못된 연산자입니다.");
}
Generics
나오게 된 배경
ArrayList list = new ArrayList();
list.add(10);
list.add(20);
list.add("30");
Integer i = (Integer)list.get(2); // err 발생
- 위 코드는 컴파일 에러가 아닌 런타임 에러가 발생한다. 즉, 프로그램이 실행되면 죽는다.
- list.get(2)에서 Object 타입을 반환하고 Integer 타입으로 변환하는 것이라 오류가 없다한다.
- 하지만 실제로는 String 타입이기에 오류가 발생한다. - 이렇게 런타임 에러까지 가지 않고 컴파일 에러를 발생시킴으로써 예방시켜주기 위해서 Generics가 나왔다.
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10);
list.add(20);
list.add("30"); // err
Integer i = list.get(1); // 형변환을 해주지 않아도 된다.
- 처음 생성할 때 타입을 명시해 줌으로써 다른 타입이 들어왔을 경우 컴파일 에러를 발생시켜준다.
- 또한, 타입이 정해져있으므로 형변환도 필요가 없다.
- 코드를 조금 더 간결하게 만들어준다.
첫번째 코드처럼 사용할 수는 있으나 권장되는 방식이 아니다.
자바 1.5버전 이후로는 2두번째 코드처럼 쓰도록 권장되고 있다.
장점
- 타입 안정성 제공
- 지정된 타입 외 타입이 들어가는 것을 막아준다.
- 런타임 에러 중 ClassCastException이 일어나지 않도록 막아준다. (형변환 에러이다.) - 형변환 생략 가능
'TIL' 카테고리의 다른 글
[TIL] 자바 개인 과제 피드백 받고 수정하기 (0) | 2024.05.02 |
---|---|
[TIL] 과제풀이 중 새롭게 알게 된 것들 (1) | 2024.05.01 |
[TIL] Invalid Gradle JDK configuration found. 인텔리제이와 GitHub 연동 & commit, push. static, final, static final (0) | 2024.04.29 |
[TIL] 프로세스와 스레드, 모던 자바(filter) [Java] (0) | 2024.04.26 |
[TIL] 예외처리 [Java] (0) | 2024.04.25 |