[자바의 정석] Ch 12 generics, enumeration, annotation

Seri·2024년 7월 14일
1
  • 이 글은 책 <자바의 정석 3판 - 남궁성>을 공부한 내용을 바탕으로 작성한 글입니다.

지네릭스(generics)

다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크(compile-time type check)를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.

선언하는 방법은 다음과 같다.

class Box<T>{
	T item;
    voide setItem(T item) { this.item = item; }
    T getItem() { return item; }
}

Box<T>에서 T를 '타입 변수' 또는 '타입 매개변수'라고 한다.

Box<String> b = new Box<String>();

타입 매개변수에 타입을 지정하는 것을 '지네릭 타입 호출'이라고 하고 지정된 타입 String을 매개변수화된 타입이라고 한다.

지네릭스의 제한

객체별로 다른 타입을 지정하는 것은 적절하다. 지네릭스는 인스턴스별로 다르게 동작하도록 하려고 만든 기능이기 때문이다. 그러나 모든 객체에 대해 동일하게 동작해야 하는 static 멤버에 타입 변수 T를 사용할 수 없다.

지네릭 메서드

메서드의 선언부에 지네릭 타입이 선언된 메서드


열거형(enums)

서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다.
enum 열거형이름 { 상수명1, 상수명2, ...
사용할 때는 '열거형이름.상수명'이다.


애너테이션(annotation)

프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이 애너테이션이다. 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 수 있다는 장점이 있다.

  • @Override: 메서드 앞에만 붙일 수 있는 애너테이션으로 조상의 메서드를 오버라이딩하는 것이라는 걸 컴파일러에게 알려주는 역할.
  • @Deprecated: 더 이상 사용되지 않는 필드나 메서드에 붙인다.
  • @FunctionalInterface: 함수형 인터페이스를 선언할 때 이 애너테이션을 붙이면 컴파일러가 함수형 인터페이스를 올바르게 선언했는지 확인하고 잘못된 경우 에러를 발생시킨다.
  • @SuppressWarnings: 컴파일러가 보여주는 경고메시지가 나타나지 않게 억제해준다.
  • @SafeVarags: 메서드에 선언된 가변인자의 타입이 non-reifiable 타입일 경우, 해당 메서드를 선언하는 부분과 호출하는 부분에서 "unchecked"경고가 발생한다. 해당 코드에 문제가 없다면 이 경고를 억제하기 위해 @SafeVarags를 사용해야 한다. 오버라이드될 수 있는 메서드에서는 사용할 수 없다.

메타 애너테이션

애너테이션을 위한 애너테이션. 애너테이션을 정의할 때 애너테이션의 적용대성이나 유지기간 등을 지정하는데 사용된다.

애너테이션 타입 정의하기

@interface 애너테이션이름 {
	타입 요소이름();
    ...
}

애너테이션 요소의 규칙

  • 요소의 타입은 기본형, String, enum, 애너테이션, Class만 허용된다.
  • ()안에 매개변수를 선언할 수 없다.
  • 예외를 선언할 수 없다.
  • 요소를 타입 매개변수로 정의할 수 없다.
profile
🎤 📷 ❄️ 🌊

0개의 댓글