[Java] 제너릭(Generic)과 열거형(Enum)

minhyeok·2023년 8월 20일
0

Java 개념 정리

목록 보기
5/8
post-thumbnail

제네릭(Generic)

자바에서 제네릭(generic)이란 데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미한다.
조금 더 부연설명을 하자면 '데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법'이다.

제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다.

우리가 흔히 쓰는 ArrayList, LinkedList 등을 생성할 때 어떻게 쓰는가?

객체<타입> 객체명 = new 객체<타입>(); 이렇게 쓰지 않는가?
즉, 아래와 같이 여러 생성방식이 있다.

ArrayList<Integer> list1 = new ArrayList<Integer>();
ArrayList<String> list2 = new ArrayList<Integer>();
 
LinkedList<Double> list3 = new LinkedList<Double>():
LinkedList<Character> list4 = new LinkedList<Character>();

이렇게 <> 괄호 안에 들어가는 타입을 지정해준다.

생각해보자. 만약에 우리가 어떤 자료구조를 만들어 배포하려고 한다. 그런데 String 타입도 지원하고싶고 Integer타입도 지원하고 싶고 많은 타입을 지원하고 싶다. 그러면 String에 대한 클래스, Integer에 대한 클래스 등 하나하나 타입에 따라 만들 것인가? 그건 너무 비효율적이다. 이러한 문제를 해결하기 위해 우리는 제네릭이라는 것을 사용한다.
이렇듯 제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다.
한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것이다.

제네릭의 장점

  1. 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할 수 있다.

  2. 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다. 즉, 관리하기가 편하다.

  3. 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다.

제네릭 사용방법

보통 제네릭은 아래 표의 타입들이 많이 쓰인다.

열거형(Enum)

Enum은 서로 연관된 상수들의 집합을 의미한다.
자바에서 Enum은 특수한 자바 클래스로 상수, 메서드 등이 포함될 수 있다.

Enum의 장점

  1. 코드가 단순해지며, 가독성이 좋음

  2. 인스턴스 생성과 상속을 방지하여 상수값의 타입안정성이 보장

  3. enum class를 사용해 새로운 상수들의 타입을 정의함으로 정의한 타입이외의 타입을 가진 데이터값을 컴파일시 체크

  4. 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 알 수 있다.


열거형 enum은 상수를 의미별로 묶어 사용할 때 쓴다.
요일별로 일, 월, 화, 수...를 묶던지 mbti를 ENTJ, ENFP 등 으로 묶을 수 있다.
데이터 값의 의미를 명확히 하는 장점이 있다.

열거형은 보통 첫 글자를 대문자로 하여 시작한다.

	enum Week{SUN, MON, TUE ... }

메소드

  • valueOf(String str) : 문자열 str과 일치하는 열거값을 반환한다.
  • values() : 열거값 전부를 배열로 반환한다.
  • ordinal() : 열거값의 순서를 반환한다.(0부터 시작)
  • name() : enum타입의 값이 가지고 있는 문자열를 리턴한다.

0개의 댓글