본문 바로가기
Book

자바의 정석 - 자바 기본기 정리하기 (11)지네릭스 / 열거형 / 어노테이션

by devLog by Ronnie's 2021. 11. 22.

들어가며


문제 구현에 있어서 자바에 대한 기본기의 부족함을 느껴서 오랜만에 자바의 기본 저서인 자바의 정석을 다시 피게 됐다. 그러면서 정말 신기한 경험을 하게 되었는데 바로 예전에 잘 이해가 안가서 읽고 넘어갔던 내용들이 이제는 내 머릿속에서 자연스럽게 그려지는 경험을 하게 되었다. 그동안에 시간들이 헛되지는 않았나보다.

 

어느 곳에서나 기본기는 중요하듯이 이번 기회를 통해 자바 기본기를 더 단단히 다지고자 챕터별로 글로 정리하면서 다시 한번 암기를 하고 좀 더 디테일하게 알아야 되는 곳은 챕터를 나눠서 자바의정석에 나온 내용 + 보강된 내용을 더해서 정리를 하고자 한다. 

 

정리


지네릭스(Generics)
지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다.
컴파일 시에 체크 해주므로 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여준다. 
ArrayList<Tv> tvList = new ArrayList<Tv>();
tvList.add(new Audio()); 처럼 다른 타입 넣으면 컴파일 에러가 남 -> 안정성 높임
더불어 객체를 꺼낼때는 형변환할 필요가 없어서 편리하다. 이미 어떤 타입의 객체들이 저장되어 있는지 알기 때문이다. -> 코드가 간결해짐
만약 안한다면 아래처럼 꺼내고 형변환 해줘야한다.
ArrayList tvList = new ArrayList();
Tv t = (Tv)tvList.get(0);

제한된 지네릭 클래스
지네릭 타입에 extends를 사용하면 특정 타입의 자손들만 대입할 수 있게 제한할 수 있다.

enum 열거형
열거형은 여러 상수를 선언해야 할 때 편리하게 선언할 수 있는 방법이다. 일반적으로 상수를 선언할때는 다음과 같이 하여 코드가 불필요하게 길어진다.
static final int...
...
..
-> 이럴때 바로 열거형을 이용하면 다음과 같이 간단히 상수를 선언할 수 있다.
enum Kind {CLOVER, HEART, DIAMOND, SPADE}
enum Value {TWO, THREE, FOUR}

final Kind kind;
final Value vlaue;
열거형 사용시에는 열거형이름.상수명으로 사용한다. 클래스의 static 변수를 참조하는 것과 동일하다.
열거형 상수간의 비교에는 == 을 사용가능하며 크기 비교 연산자는 사용 불가능하고 compareTo()는 사용가능하다. compareTo()는 같으면 0 왼쪽이 크면 양수 오른쪽이 크면 음수를 반환한다.

 


열거형에 멤버 추가하기
열거형의 상수의 값이 불규칙적인 경우에는 열거형 상수의 이름 옆에 원하는 값을 괄호와 함께 적어주면 된다.
그리고 지정된 값을 저장할 수 있는 인스턴스 변수와 생성자를 새로 추가해 주어야 한다.
주의점은 먼저 열거형 상수를 모두 정의한 다음에 다른 멤버들을 추가해야하며 열거형 상수의 마지막에 ; 로 잊지 말아야 한다.
enum Direction {
EAST(1), SOUTH(5), WEST(-3), NORTH(2); // 끝에 ; 추가
private final int value; // 정수를 저장할 필드를 추가
Direction(int value) {this.value = value;} //생성자 추가

public int getValue() {return value;}
}
열거형의 인스턴스 변수는 반드시 final이어야 한다는 제약은 없지만 value는 열거형 상수의 값을 저장하기 위한 것이므로 final을 붙였다. 

어노테이션이란?
자바 개발한 사람들은 소스코드에 대한 문서를 따로 만들기 보다 소스코드와 문서를 하나의 파일로 관리하는 것이 났다고 생각했다. 애너테이션은 주석 처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 수 있다는 장점이 있다. 
예를들어 @Test 어노테이션은 테스트 프로그램에게 이 메서드는 테스트해야 한다는 정보를 알리는 역할을 할뿐 메서드가 포함된 프로그램 자체에는 아무런 영향을 미치지 않는다. 주석처럼 존재하지 않는 것이나 다름 없다. jdk에서 제공하는 표준 어노테이션은 주로 컴파일러를 위한 것으로 컴파일러에게 유용한 정보를 제공한다. 

댓글