컴퓨터 프로그래밍/Java

[Java] Generic

한33 2024. 8. 4. 23:15

제네릭의 효용

타입 언어에서 중복되거나 필요없는 코드를 줄여주고, 그러면서 타입 안정성을 해치지 않는다.

 

파이썬, 자바스크립트와는 다르게 Java 는 타입을 지정해줘야한다.

 

같은 함수더라도 타입에 따라 세 차례나 구현해야함.

 

제네릭 문법

1. 제너릭은 클래스 또는 메서드에 사용 가능, 클래스 이름 뒤에 <> 문법 안에 들어가야할 타입 변수 지정 ( T 는 컨벤션 )

2. 선언해둔 타입 변수는 해당 클래스 내에서 특정한 타입이 들어갈 자리에 대신 들어갈 수 있음

3. 메서드의 리턴 타입에 들어가는 것 역시 마찬가지다.

 

4. 제너릭을 통해 구현한 클래스를 사용하는 부분.

클래스에 선언했기 때문에 인스턴스를 만들기 위해서 타입 변수에 들어갈 실제 변수의 값을 넣어줘야함. ( String 으로 넣어준 모습 )

 

5. 타입변수로 대체되었던 곳에 String 으로 들어가있기 때문에 "Hello World" 사용 가능

 

제네릭 용어

Generic<T> 의 클래스처럼 제네릭을 사용한 클래스를 제네릭 클래스 라고 함.

변수명 T 는 타입 변수

Generic 클래스를 원시 타입

 

제너릭 제한

  • static 사용 불가능
    • 타입 변수는 인스턴스 변수로 간주되고, 모든 객체에 동일하게 동작해야 하는 static 필드 특성상 사용 불가
  • 제너릭 배열 생성 불가능

제너릭 문법

  • 다수의 타입 변수 사용 가능

  • 다형성 즉 상속과 타입의 관계는 그대로 적용
    • 부모 클래스로 제네릭 타입 변수를 지정하면 그 안에 자식 클래스를 넘기는 것이 가능
  • 와일드카드를 통해 제네릭의 제한을 구체적으로 정할 수 있음

  1. <? extends T> : T와 그 자손들만 사용 가능
  2. <? super T> : T와 그 조상들만 가능
  3. <?> : 제한 없음

  • 이렇게 타입 앞에 <T> 같이 제네릭을 사용한 경우, 해당 메서드에만 적용되는 제네릭 타입 변수 선언 가능
  • 타입 변수를 클래스 내부의 인스턴스 변수 취급하기 때문에 제네릭 클래스의 타입 변수를 static 메서드에는 사용할 수 없었지만, 제네릭 메소드의 제네릭 타입 변수는 해당 메소드에만 적용되기 때문에 메소드 하나를 기준으로 선언하고 사용할 수 있음
  • 같은 이름의 변수를 사용했다고 해도 제네릭 메소드의 타입 변수는 제네릭 클래스의 타입 변수와 다름

'컴퓨터 프로그래밍 > Java' 카테고리의 다른 글

[Java] Collection 과 Wrapper 객체  (0) 2024.08.05
[Java] 예외처리  (0) 2024.07.30
[Java] 인터페이스  (0) 2024.07.30
[Java] 상속  (0) 2024.07.29
[Java] this와 this(), 접근 제어자, package와 import  (0) 2024.07.29