여러 상수들을 보다 편리하게 선언하고 관리할 수 있게함
상수명의 중복을 피함
타입에 대한 안정성을 보장
관례적으로 대문자
각각의 상수들에는 따로 값을 지정해주지 않아도 자동적으로 0부터 시작하는 정수값이 할당되어 각각의 상수를 가리킴
enum Seasons {
SPRING, //정수값 0 할당
SUMMER, //정수값 1 할당
FALL, //정수값 2 할당
WINTER //정수값 3 할당
}
열거형의 필요성
기존에는 public static final을 통해 전역변수로 상수를 설정
public static final int SPRING =1;
상수 이름이 중복되는 문제는 인터페이스를 사용함으로써 해결 가능하지만 타입 안정성이라는 문제 생김->의미적으로 다른 개념을 같게 인식하는 경우
if (Seasons.SPRING == Frameworks.SPRING)
제네릭이란 클래스나 메서드의 코드를 작성할 때, 타입을 구체적으로 지정하는 것이 아니라, 추후에 지정할 수 있도록 일반화해두는 것을 말한다.
즉, 단 하나의 클래스만으로 모든 타입의 데이터를 저장할 수 있는 인스턴스를 만들 수 있다.
클래스 변수에는 타입 매개변수를 사용할 수 없음->클래스 변수는 공유하는 성질을 갖고 있기 때문
class Pocket {
private T item1; // O
static T item2; // X
}
타입 매개변수에 치환될 타입으로 기본 타입을 지정할 수 없음->래퍼클래스 활용
다형성을 적용할 수 있음
래퍼 클래스(Wrapper class) : 프로그램에 따라 기본 타입의 데이터를 객체로 취급해야 하는 경우 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스
기본타입 래퍼클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
박싱(Boxing) : 기본타입->래퍼클래스 인스턴스 변환과정
언박싱(UnBoxing) : 래퍼 클래스 인스턴스에 저장된 값 -> 기본 타입의 데이터로 꺼내는 과정
제한된 제네릭 클래스
class Pocket {
private T item;
}
특정 클래스를 상속받으면서 동시에 특정 인터페이스를 구현한 클래스만 타입으로 지정할 수 있도록 제한->&를 사용
제네릭 메서드
static 메서드에서도 선언하여 사용 가능class Pocket {
...
public void add(T element) {
...
}
}
제네릭 메서드의 타입 매개변수는 제네릭 클래스의 타입 매개변수와 별개의 것이다. 이는 타입이 지정되는 시점이 다르기 때문이다.
클래스명 옆에 선언한 타입 매개변수는 클래스가 인스턴스화될 때 타입 지정
제네릭 메서드의 타입지정은 메서드가 호출될 때 이루어짐
와일드카드
예외처리는 예기치 않게 발생하는 에러에 대응할 수 있는 코드를 미리 사전에 작성하여 프로그램의 비정상적인 종료를 방지하고, 정상적인 실행 상태를 유지하기 위해 사용된다.
에러는 발생 시점에 따라 컴파일 에러(Compile Time Error), 런타임 에러(Run Time Error)로 구분할 수 있다.
컴파일 에러
런타임 에러
자바에서는 코드 실행(run-time) 시 잠재적으로 발생할 수 있는 프로그램 오류를 크게 에러(error)와 예외(exception)으로 구분한다.
잘못된 사용 또는 코딩으로 인한 상대적으로 미약한 수준의 오류로서 코드 수정 등을 통해 수습이 가능한 오류
모든 예외의 최고 상위클래스는 Exception 클래스이고, Exception클래스는 일반 예외 클래스와 실행 예외 클래스로 나눌 수 있음
자바에서 예외 처리는 try - catch 블럭을 통해 구현
try {
// 예외가 발생할 가능성이 있는 코드
}
catch (ExceptionType1 e1) {
// ExceptionType1 유형의 예외 발생 시 실행할 코드
}
finally {
// 예외 발생 여부와 상관없이 항상 실행
}
예외 전가
반환타입 메서드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ... {
...
}
예외를 의도적으로 발생시키기