자바의 신(책)을 통해 배우게 된 내용과 추가로 공부한 내용을 정리합니다.
8-17강 부분
오버라이딩 시에는 접근 제어자, 리턴타입, 메소드 명과 매개변수 타입 및 개수가 동일해야 한다. 그런데 리턴 타입은 다음의 2가지 조건을 만족하면 변경할 수 있다고 한다.
한편, 오버로딩 시에는 리턴 타입이 자유롭게 변경 가능하다. 다만 메서드 시그니처가 달라야 하므로 반드시 매개 변수의 변화가 있어야 한다.
이전에는 공통 상수를 사용할 때 클래스 내 final static으로 변수를 선언하거나, interface에 상수를 선언했다고 한다. 그러나 컴파일 시 형 검사를 하지 않는 인터페이스의 타입 안정성 문제와, 네임 충돌 등의 문제들로 인해 jdk1.5부터 enum이 등장한다.
Enum 클래스는 호출되는 순간, 클래스 안의 각 상수 마다의 인스턴스를 생성하게 된다. 이 때 생성자를 통해 인스턴스 마다 값들을 할당해줄 수도 있다.
public enum Numbers {
ONE(1, "첫번째"),
SECOND(2, "두번째"),
THREE(3, "세번째"),
private final int number;
private final String korean;
Numbers(int number, String korean) { // 접근 제어자는 기본 private
this.number = number;
this.korean = korean;
}
// 메소드도 추가해 사용할 수 있다. 실제 인스턴스를 쓸 때는
// 싱글톤 형태로 사용되므로 스레드 환경에서 사용 시 주의해야 한다.
}
enum 인스턴스는 java.lang.enum로부터 values(), valueof(), ordinal() 메서드를 상속받아 사용할 수 있다. values는 전체 인스턴스들의 배열을, valueof는 매개변수로 상수 인스턴스의 toString 값과 일치하는 값이 들어오면 그 인스턴스를 반환한다. ordinal은 인스턴스의 index를 반환한다.
자바스크립트에서는 에러와 예외에 대해서 크게 구분하지 않았던 것으로 기억하는데, 자바에서는 이를 보다 엄격히 나누는 듯 하다. 개발된 애플리케이션에 의해 발생한 문제는 예외로 처리하며, 이를 상세히 관리한다.
책 | 자바의 신, 이상민 저
웹 사이트 | https://velog.io/@kyle/%EC%9E%90%EB%B0%94-Enum-%EA%B8%B0%EB%B3%B8-%EB%B0%8F-%ED%99%9C%EC%9A%A9