❯ 열거형(Enum)
열거형(enum: enumerated type): 여러 상수(변하지 않는 값)들을 보다 편리하게 선언할 수 있도록 만들어진 자바 문법요소.
상수명의 중복을 피하고 타입에 대한 안정성을 보장함. switch문에서도 작동이 가능함
* switch문: 사용자 정의타입은 사용 불가
enum Seasons {SPRING, SUMMER, FALL, WINTER} // 값을 지정하지 않아도 자동으로 0부터 시작하는 정수값 할당
// 특정 상수에 접근하려면 열거형이름.상수명 으로 가능 ex. Seasons.SUMMER
❯ 제네릭(Generic)
타입을 구체적으로 지정하는 것이 아니라 타입 매개변수를 활용해 추후에 지정할 수 있도록 일반화 하는것.
작성한 클래스 혹은 메서드가 특정 타입에만 사용되지 않도록 해둔것을 의미함
제네릭 클래스
제네릭이 사용된 클래스를 제네릭 클래스라고 함. 타입 매개변수는 여러개도 사용할 수 있음
타입 매개변수는 기본타입은 지정 불가함. 래퍼 클래스(Wrapper Class)를 사용해야함.
⇒ 기본타입의 데이터를 객체로 취급해야할 때 이를 포장해주는 클래스.
class Person<T> { // 타입 매개변수 T 를 사용한 제네릭 클래스
private T name; // 인스턴스 생성시 T 타입이 적용됨
} // 타입 매개변수는 T(type), K(key), V(value), E(element), N(number), R(result)를 자주 사용
(주의) 클래스 변수(static 변수)에는 타입 매개변수를 사용할 수 없음
-> 클래스 변수는 여러 객체가 공유하는 값인데, 타입 매개변수를 사용할 경우 인스턴스별로 변수의 타입이 바뀔 수 있음
Person<String> person1 = new Person<String>("John");
Person<String> person2 = new Person<>("Kate"); // new Person<>은 구체적 타입 생략 가능
제네릭 클래스에도 다형성 적용이 가능함
제한된 제네릭 클래스
위의 <T> 에는 어떠한 타입도 지정이 가능함.
만약 특정 클래스의 하위클래스만 지정하도록 제한하거나, 특정 인터페이스를 구현한 클래스만 타입으로 지정하도록 할 수 있음
class Person<T extends Teacher> {...} // Teacher를 상속받은 클래스만 타입으로 지정 가능
class Person<T extends Teacher & Male> {...} // Teacher, Male을 상속(구현)한 클래스만 타입으로 지정 가능 (여러개 조건 적용시 & 사용)
// (2)의 경우 클래스명을 인터페이스명보다 앞에 작성해야함
제네릭 메서드
class Person{
public <T> void add(T element) // 타입 매개변수 선언은 반환타입 앞에 위치함
static <T> void setAge(T element) // 제네릭 클래스와 달리 static 메서드에도 사용 가능함
클래스 내부의 특정 메서드만 제네릭으로 선언할 수 있음. (클래스의 타입 매개변수와 다른것)
클래스 타입 매개변수는 인스턴스화될 때 타입이 지정되며, 메서드 타입 매개변수는 메서드가 호출될 때 타입이 지정됨
제네릭 메서드는 타입이 지정되기 전까지는 변수가 어떤 타입인지 알 수 없음. 따라서 String 타입 메서드처럼 특정 타입에서 사용되는 메서드는 정의 단계에서 사용 불가. 대신 모든 클래스의 상위 클래스인 Object의 메서드는 사용 가능함.
❯ 예외처리
프로그램의 비정상적인 종료를 방지하고 정상적인 실행상태를 유지하기 위해 예외처리(Exception Handling)를 해줌.
- 컴파일 에러: 자바 컴파일러에 의해 발견됨. 오탈자 / ; 누락 / 잘못된 자료형 등 문법적 문제에서 발생하므로 Syntax Error라고도 함
IDE 에서 밑줄로 표시되는 에러들이 해당. 비교적 쉽게 해결 가능 - 런타임 에러: JVM에 의해 발견됨. 컴퓨터에게 수행할 수 없는 작업을 요청할 때 발생.
⇒ 프로그램 실행 시 문제를 Error 라고 명시했지만, 실제로는 Error 와 Exception(예외, 코드 수정을 통해 수습 가능)으로 구분됨.
예외 클래스의 상속 계층
자바에서는 예외가 발생하면 예외 클래스로부터 객체를 생성하여 해당 인스턴스를 통해 예외처리를 함.
모든 예외의 최고 상위 클래스는 Exception 클래스임
- 실행 예외 클래스(Runtime Exception): 런타임시 발생하는 예외 클래스와 그 하위클래스 (unchecked 예외)
- 일반 예외 클래스(Exception): 실행 예외 클래스와 그 하위클래스를 제외한 모든 예외 클래스와 그 하위클래스 (checked 예외)
try-catch문
예외 처리를 통해 비정상적인 종료나 오류를 대비하는것.
try { // 예외가 발생할 가능성이 있는 코드 삽입
}
catch (ExceptionType1 e1) {
// ExceptionType1 예외 발생 시 실행할 코드
}
catch (ExceptionType2 e2) {
// ExceptionType2 예외 발생 시 실행할 코드
}
finally {
// 예외 발생 여부와 관계 없이 실행할 코드. 반드시 작성해야하는 요소는 아님.
}
이번 부분을 학습하면서 예외 처리의 중요성에 대해 생각해보게 됐다.
비즈니스 로직에서 다양한 에러(예외)가 발생할 수 있는데, 이 때 예외를 어떻게 처리하는지에 따라 프로그램의 사용성이 달라질 수 있을것같다. 코드에서 발생할 수 있는 다양한 예외상황에 대해 생각해보고 처리할 수 있는 능력을 길러야겠다.
'부트캠프 개발일기 > Java' 카테고리의 다른 글
17일차: Java 심화(Annotation, Lambda) (0) | 2023.03.08 |
---|---|
16일차: 컬렉션(Collection Framework) (0) | 2023.03.07 |
14일차: 미니 프로젝트(의존성 주입) (0) | 2023.03.03 |
13일차: 미니 프로젝트(얕은복사 vs 깊은복사) (0) | 2023.03.02 |
12일차: 객체지향 프로그래밍 심화(다형성/Polymorphism, 추상화/Abstraction) (0) | 2023.02.28 |