-
Java: 제네릭 Generic각종 학습 요약/Java 2022. 5. 17. 10:48
Java: 제네릭 Generic
제네릭이란?
객체 내부에서 사용할 데이터 타입을 파라미터 형태(타입 매개변수)로 지정해서, 일반화한 타입으로 사용하도록 하는 기술.
객체 입장에서 보면, 어떤 타입을 받을 건지 명확히 하지 않고 "'어떤 데이터 타입'이란게 넘어온다"라고 가정한 뒤 내부 속성과 동작을 정의하는 것이다.
객체를 사용하는 입장에서 보면, 객체를 생성할 때에 어떤 타입을 사용할 건지 명시하고, 객체를 활용할 때 해당 데이터 타입의 값만 사용하는 것이다.
말로 하면 헷갈리지만 기본 개념 자체가 엄청 복잡하진 않다.제네릭의 장점
- 코드 작성 시 타입체크를 신경쓰지 않아도 된다(어긴 부분에서 컴파일 에러 발생).
- 제네릭을 사용하는 객체 안에서 타입 안정성이 보장된다.
타입 매개변수
- 제네릭에서 자주 쓰이는 타입 매개변수 작성 방식은 아래와 같이 된다. 아래와 같은 문자들(T, E, ...)을 사용하지 않고 다른 문자(예를 들어 X)를 임의로 넣어도 문제 없이 동작되지만, 코딩은 혼자하는 것이 아니기 때문에 컨벤션은 꼭 지키는 게 좋다.
타입 종류 표기 Type T Element E Key K Value V Number N Result R - 와일드카드
?
: 타입을 명시하는 부분에?
를 입력하게 되면, 조건에 해당하는 모든 타입(조건이 특별히 없는 경우는 모든 타입)을 수용하게 된다.
제네릭 메서드
제네릭으로 구현하는 객체 안에서도 당연히 메서드를 작성할 수 있다.
제네릭 타입을 사용하는 것 외에 일반적인 메서드와 특별히 다른 점은 없는데, 두 가지만 염두하면 된다.리턴 타입 앞에 제네릭 타입을 명시해줄 것:
접근제어자 제네릭타입 리턴타입 메소드명(파라미터) {코드블럭}
. 해당 메서드에서 사용하는 제네릭 타입을 명시하면 된다.public <V> void printName(Student<V> student) { System.out.println(student.getName()); }
컴파일 타임(객체 코드를 작성하는 시점...으로 이해해도 되겠다)에는 타입이 구체화되지 않았기 때문에, 모든 객체의 조상인 Object의 메서드만 호출할 수 있다.
매우 후루꾸 요약(???)
- 제네릭 객체를 구현하는 입장에서의 제네릭: 이 객체 안에서 사용되는 파라미터의 타입을 특별히 명시하지 않겠다. 나는 대충
<T>
로 퉁치고 만든다. - 사용하는 입장에서의 제네릭 예시: 이 객체 안에 넘겨줄 파라미터로 나는
<String>
만 쓰겠다(또는<Integer>
,<Long>
,<etc>
...).
'각종 학습 요약 > Java' 카테고리의 다른 글
Java: Enum 클래스의 기본적인 이해 (0) 2022.05.19 Java: 내부 클래스(Inner Class)의 기본적인 이해 (4) 2022.05.18 Java: 컬렉션 프레임워크(Collection Framework) 개요 (0) 2022.05.17 추상클래스와 인터페이스의 차이와 선택 기준 (0) 2022.05.13 # Java의 상속 개념 : inheritance, composite (2) 2022.05.12 Java: 생성자(Constructor)의 기본적인 이해 (0) 2022.05.11