Java

[Java] 제너릭(Generics)

boudle 2024. 9. 11. 21:30

제네릭(Generics)**은 Java에서 다양한 타입의 객체를 다룰 수 있는 클래스, 인터페이스, 메서드를 정의할 수 있도록 해주는 기능입니다. 제네릭은 컴파일 시 타입을 지정하고 검사할 수 있게 하여 타입 안정성을 보장하고, 형변환의 필요성을 줄여 코드의 가독성과 유지보수성을 향상시킵니다.

 

제네릭이 해결한 문제

  1. 타입 안정성 부족: Java 5 이전에는 컬렉션과 같은 데이터 구조에 다양한 타입의 객체를 저장할 수 있었지만, 이를 다시 사용할 때마다 형변환(casting)을 해야 했습니다. 이 과정에서 런타임 시점에 ClassCastException이 발생할 가능성이 있었습니다.
  2. 형변환의 불편함: 매번 객체를 사용할 때마다 수동으로 형변환을 해야 하므로 코드가 복잡해지고, 실수를 유발할 가능성이 높아졌습니다.
  3. 코드 재사용성: 제네릭을 사용하면 타입에 독립적인 코드 작성을 통해 다양한 타입을 처리할 수 있는 일반적인 코드 작성을 지원합니다.

제네릭을 사용할 때의 장점은 무엇인가요?

  1. 타입 안전성 보장: 제네릭을 사용하면 컴파일 시점에서 타입을 검사하므로, 잘못된 타입이 사용될 경우 컴파일 에러가 발생하여 런타임 오류를 방지할 수 있습니다.
  2. 코드의 가독성 및 유지보수성 향상: 명시적인 형변환이 필요하지 않아 코드가 간결하고, 읽기 쉽습니다. 또한, 코드 작성자가 의도한 타입을 명확히 드러낼 수 있습니다.
  3. 재사용성 증가: 제네릭을 사용하면 특정 타입에 의존하지 않고 일반화된 코드를 작성할 수 있어, 코드의 재사용성이 높아집니다.

Java에서 제네릭을 사용하는 방법과 제한 사항은 무엇인가요?

 

 

제네릭의 제한 사항

  1. 기본 타입 사용 불가: 제네릭은 오직 참조 타입만 사용할 수 있습니다. 따라서 int, char 같은 기본 타입을 사용할 수 없고, 대신 Integer, Character 등의 래퍼 클래스를 사용해야 합니다.
  2. 런타임 시 타입 정보 소거(Type Erasure): 제네릭은 컴파일 시에만 타입 검사가 이루어지고, 런타임에는 타입 정보가 제거됩니다. 따라서 제네릭 타입으로 배열을 만들 수 없고, 타입 파라미터의 런타임 타입을 알 수 없습니다.
  3. 스태틱(static) 멤버에 제네릭 타입 사용 불가: 제네릭 타입 파라미터는 인스턴스에만 적용되므로, 스태틱 변수나 메서드에 사용할 수 없습니다.
  4. 인스턴스 생성 제한: 제네릭 타입 파라미터를 사용해 객체를 직접 생성할 수 없습니다. 예를 들어, new T()와 같은 구문은 허용되지 않습니다.

제네릭 와일드카드(?)의 종류와 각각의 의미는 무엇인가요?

제네릭 와일드카드(?)는 다양한 타입을 유연하게 처리하기 위해 사용됩니다. Java에서는 세 가지 종류의 와일드카드를 제공합니다.

'Java' 카테고리의 다른 글

JSONObject  (0) 2025.05.19
[Java] Enum  (0) 2024.09.11
전략패턴으로 코드 개선  (0) 2024.09.04
[Java] - Thread  (0) 2024.08.29
[Java] StringBuilder  (0) 2024.08.19