Generic

Q. 자바의 Generic에 대해 아시는데로 말씀해주세요.

자바 제네릭(Generic)은 클래스나 메서드를 작성할 때 데이터 타입을 미리 지정하지 않고, 사용할 때 타입을 지정할 수 있게 해주는 기능입니다. 제네릭을 사용하면 코드 재사용성이 높아지고, 컴파일 시 타입 안전성을 확보할 수 있습니다.

이러한 제네릭은 자료구조와 연관되어 있습니다. 자바의 List, Set, Map 등의 자료구조 클래스는 제네릭을 활용하여 다양한 타입의 데이터를 다룰 수 있도록 설계되어있습니다.


Q. 그렇다면 Set자료구조에서 Generic은 구체적으로 어떻게 사용되나요?

Set은 중복되지 않은 요소들의 집합을 나타내는 자료구조입니다. 여기에 제네릭을 적용하면 Set에 저장되는 요소의 타입을 명확하게 지정할 수 있습니다. 즉, 특정 타입의 객체만 저장하도록 제한할 수 있습니다. 예를들어, A라는 변수에 String만 저장되는 Set 자료구조를 만들고 싶다면 Set<String> A 라는 형식으로 생성하는 식 입니다.


Q. Object를 사용하면 String을 포함한 모든 타입을 다 저장할 수 있을텐데, Generic를 꼭 써야하는 이유가 있나요?

Object를 사용하면 데이터를 꺼낼 때 Object 타입으로 꺼내지게 되고, 추가적인 작업을 위해서 형 변환이 필수 입니다. 여기서 발생되는 문제로, 만약 추가적인 작업이 Integer 타입으로 짜여져있을때 값이 String 타입이면 에러가 발생합니다. 따라서, 추가적인 형변환 없이 명확하게 원하는 타입만 저장하기 위해 Generic은 필수 입니다.


Q. 추가로 와일드카드에 대해서 설명해주세요.

제네릭 와일드카드는 제네릭 타입에서 특정 타입을 명시하지 않고, 어떤 타입이 올 수 있는지에 대한 제약을 표현하는 방법입니다. 마치 정규 표현식에서 와일드카드 문자(*)가 어떤 문자든지 대표하는 것처럼, 제네릭에서도 와일드카드(?)가 다양한 타입을 나타냅니다. 와일드카드의 종류로는 비제한 와일드카드, 상한 제한 와일드카드, 하한 제한 와일드카드 가 있습니다.

Last updated