별 개수: 50
속도: 2

JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

Java/자바 학습

자바 제네릭

lamarcK 2025. 5. 7. 14:42

I. 제네릭 개념 설명

클래스나 메서드를 정의할 때 타입 파라미터(<T> 등)를 사용해서 임시로 타입이 들어갈 것이라고만 정의해두고, 실제 사용할 때 구체적인 타입을 지정하면 해당 클래스나 메서드 내부의 모든 타입 파라미터가 지정된 타입으로 일괄 변환되는 문법입니다.

쉽게 말하면 처음에는 T라는 임시 타입으로 틀만 만들어두고, 실제 사용할 때 String이나 Integer 같은 구체적인 타입을 지정하면,

클래스나 메서드 내부의 모든 T가 지정한 타입으로 자동 변환됩니다.

 

여기서 타입 파라미터는:

  • 임시 지정자(플레이스홀더) 역할
  • 클래스/메서드 정의 시점에만 사용
  • 실제 사용 시점에서 구체적인 타입(String, Integer 등)으로 변환됨
java
클릭하여 코드 펼치기
// 처음에 T로 정의
class Box<T> {
    private T item;        // T는 임시 타입
    
    public T getItem() {   // T는 임시 타입
        return item;
    }
    
    public void setItem(T item) {   // T는 임시 타입
        this.item = item;
    }
}

// Box<String>으로 객체 생성하면, 모든 T가 String으로 변환됨
Box<String> stringBox = new Box<>();
// 내부적으로 이렇게 변환된 것과 같음:
/*
    private String item;
    
    public String getItem() {
        return item;
    }
    
    public void setItem(String item) {
        this.item = item;
    }
*/

// Box<Integer>로 객체 생성하면, 모든 T가 Integer로 변환됨
Box<Integer> intBox = new Box<>();
// 내부적으로 이렇게 변환된 것과 같음:
/*
    private Integer item;
    
    public Integer getItem() {
        return item;
    }
    
    public void setItem(Integer item) {
        this.item = item;
    }
*/
클릭하여 코드 복사

II. 사용 목적

  • 타입 안정성 보장 : 컴파일 타임에 타입을 체크하여 런타임 에러를 방지합니다.
  • 코드 재사용성 향상
  • 컴파일 시점에서 타입 체크 가능
  • 불필요한 타입 캐스팅 제거 : 타입 체크와 형변환을 생략할 수 있게 해줘서 코드가 간결해집니다.

III. 자주하는 실수

  • 제네릭 타입 파라미터에 기본 타입(int, boolean 등) 직접 사용
  • raw type 사용 (제네릭 타입을 지정하지 않고 사용)
  • 배열 생성 시 제네릭 타입 사용 오류
  • 와일드카드 사용 시 extends와 super 혼동

IV. 비교

특징 제네릭 Object 사용
타입 안정성 높음 낮음
형변환 필요 불필요 필요
컴파일 시점 체크 가능 불가능
코드 가독성 좋음 나쁨

V. 실무 활용 예시

java
클릭하여 코드 펼치기
//제네릭 활용 예시
// 컬렉션 프레임워크
List<String> stringList = new ArrayList<>();
Map<String, Integer> scoreMap = new HashMap<>();

// 커스텀 제네릭 클래스
public class ResponseDTO<T> {
    private T data;
    private String message;
}

// 제네릭 메서드
public <T> List<T> convertToList(T[] array) {
    return Arrays.asList(array);
}

// API 응답 처리
public ResponseEntity<List<UserDTO>> getUsers() {
    return ResponseEntity.ok(userList);
}

// DAO/Repository 계층
public interface UserRepository extends JpaRepository<User, Long> {
}

// 유틸리티 클래스
public class Pair<K, V> {
    private K key;
    private V value;
}
클릭하여 코드 복사

'Java > 자바 학습' 카테고리의 다른 글

자바의 String은 클래스다.  (0) 2025.05.09
문자 자료형과 메서드  (0) 2025.05.08
자바 컬렉션 프레임워크  (0) 2025.05.07
자바의 예외 처리  (0) 2025.05.07
자바 접근 제어자  (0) 2025.05.01

이동