Dorothy_YANG
With Dorothy
Dorothy_YANG
전체 방문자
오늘
어제
  • 분류 전체보기 (279)
    • Hi, I'm Dorothy 🕵️‍♂️ (21)
      • Slowly but Surely (18)
      • IT certifications (3)
    • 🤯TIL (80)
      • HTML & CSS (2)
      • Javascript & jQuery (13)
      • React (13)
      • C언어 (1)
      • JAVA (22)
      • Python (2)
      • Oracle SQL (10)
      • My SQL (5)
      • Spring (12)
    • 💻Programmers (17)
    • 🏫 Open API_JAVA (101)
    • 🌎 Project (10)
      • Shopping (10)
    • 💥 Error (24)
    • ⚙ Setting (23)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • oracle
  • 기간쿼리
  • 서버등록
  • SQLD합격후기
  • SQL
  • spring
  • 독학후기
  • 비쥬얼스튜디오코드
  • CSS
  • 기간설정
  • sql기간
  • 백준
  • colaboratory
  • java
  • Eclipse
  • SQLD합격
  • googlecolaboratory
  • Database
  • HTML
  • 파이썬온라인
  • 이것이자바다
  • 시작일종료일
  • 오류해결
  • Javascript
  • AllArgsConstructor
  • 노마드코더
  • 연습문제
  • 창초기화
  • 코딩앙마
  • 콜라보레이토리

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Dorothy_YANG

With Dorothy

🏫 Open API_JAVA

[48일차] 제네릭 타입 / 멀티 타입 파라미터 / 제네릭 메소드 / 제한된 타입 파라미터 / 와일드카드 타입 / 제네릭 타입의 상속과 구현

2022. 9. 29. 19:46
728x90

20220929(목)

  • 목차 
    - 제네릭 타입 
    - 멀티 타입 파라미터 
    - 제네릭 메소드
    - 제한된 타입 파라미터 
    - 와일드카드 타입
    - 제네릭 타입의 상속과 구현

< 제네릭 타입 > - class<T>, interface<T>

✨ 제네릭 특징
      : 타입을 매개변수로 미리 정해 놓으면 ➡ 추후 관련된 메소드의 매개변수 타입이 변경된다.

  • 제네릭 타입
    - 타입을 파라미터로 가지는 클래스와 인터페이스
    - 선언 시 클래스 또는 인터페이스 이름 뒤에 <> 부호(=타입 파라미터) 붙임

  • 일반클래스 vs 제네릭클래스
    - 일반클래스 : 제네릭 미사용
    - 제네릭클래스 : 제네릭 사용(타입만 다르고 클래스의 구조를 그대로 쓰고 싶을 경우 사용)

        class ArrayList {
          Integer a;
           }

          class ArrayList {
          String a;
           }
         ➡ 다루고 싶은 데이터가 늘어나는 만큼 클래스가 계속 늘어난다.  🤯🤯
         ----------------------------------------------------------------------------------------------------------------

          <자바제공> 🤩
         class ArrayList  {
           T a;
            }

           ✨ 위 코드구조를 재사용해서 타입별로 사용 😍😍
            ArrayList<Integer> al = new ArrayList<Integer>();
            ArrayList<String> al = new ArrayList<String>();

 

 


< 멀티 타입 파라미터 > - class<K, V>, interface<K, V>

  • 멀티 타입 파라미터
    - 제네릭 타입은 두 개 이상의 타입 파라미터 사용 가능
    - 각 타입 파라미터는 콤마로 구분
       ex) class<K, V >

  • 뒷부분 생략 가능
    ex) Product<Car, String> product2 = new Product<Car, String>();
        ➡  Product<Car, String> product2 = new Product<>(); 😊

 


< 제네릭 메소드 > - <T, R> R method(T t)

  • 제네릭 메소드
    - 메소드에 타입파라미터 작업을 하는 것. / 다양한 데이타타입들을 사용하고 싶은 경우
    - 비교목적 : 하나의 데이타타입에 해당하는 의미만 비교목적으로 사용했었는데,
                        제너릭인 경우에는 여러 데이타타입들 비교목적으로 사용가능

    - 제네릭 메소드 선언 방법
       1) 리턴 타입 앞에 “<>” 기호를 추가하고 타입 파라미터 기술
       2) 타입 파라미터를 리턴 타입과 매개변수에 사용

  • class 클래스 <T> {
    public <E> Box <E> boxing(T t) {return 변수;}
    // public <타입파라미터> 리턴타입 메소드명(매개변수) {...}
    // 얘(제네릭 클래스의 제네릭을 이용하는 메소드)와 구분해야 됨! public T getKind() {return this.kind;} 
    }

     ✨ 제네릭 메소드 문법구성
     public static <타입파라미터> 리턴타입 메소드명(타입 매개변수) {
     return 변수;
     }
--------------------------------------------------------------------------------------------------------------------------
     ✔ 일반메소드 문법구성         😮 똑같은데 <>만 추가!
     public static 리턴타입 메소드명 (타입 매개변수) {
     return 변수;
     }

 


< 제한된 타입 파라미터 > - <T extends 최상위타입>

  • 타입 파라미터 제한
    - 상속 및 구현 관계 이용해 타입 제한
    public <T extends 상위타입> 리턴타입 메소드(매개변수, ...) {...}
    - 상위 타입은 클래스 뿐만 아니라 인터페이스도 가능

     // Number 추상클래스 : Byte, Short, Integer, Long 클래스의 상위클래스
     public class Util {

     // T extends Number : Number 클래스 이거나 Number 클래스를 상속, 구현한 클래스만 사용가능.
     // T extends 인터페이스 : implements 키워드 사용안함.
     public static  리턴타입 메소드명() {</t extends number>}

 


< 와일드카드 타입 >

제네릭타입<?> 제네릭타입<? extends 상위타입> 제네릭타입<? super 하위타입>
Unbounded Wildcards
(제한없음)
Upper Bounded Wildcards
(상위 클래스 제한)
Lower Bounded Wildcards
(하위 클래스 제한)
타입 파라미터를 대치하는 구체적인 타입으로 ~
모든 클래스나
인터페이스 타입
상위 타입이거나
상속받은 하위 타입
하위 타입이나
상위 타입

 


< 제네릭 타입의 상속과 구현 >

  • 제네릭 타입을 부모 클래스로 사용할 경우
    - 타입 파라미터는 자식 클래스에도 기술 ➡ 만들지 않으면 이클립스에서 에러뜸! 🥵
    public class ChildProduct<T, M> extends Product<T, M> {...}
    - 추가적인 타입 파라미터 가질 수 있음
    public class ChildProduct<T, M, C> extends Product<T, M> {...}

  • 제네릭 인터페이스를 구현할 경우
    - 제네릭 인터페이스를 구현한 클래스도 제네릭 타입
728x90
저작자표시 (새창열림)

'🏫 Open API_JAVA' 카테고리의 다른 글

[50일차] andThen()과 compose() 디폴트 메소드 / 메소드 참조 / 입력 스트림과 출력 스트림  (0) 2022.10.05
[49일차] 람다식 기본 문법 / 타겟 타입과 함수적 인터페이스 / 표준 API의 함수적 인터페이스  (0) 2022.10.03
[47일차] Set 컬렉션(HashSet) / Map 컬렉션(HashMap, Hashtable, Properties) / 검색 기능을 강화시킨 컬렉션 / LIFO와 FIFO 컬렉션  (0) 2022.09.29
[46일차] 스레드 그룹 / 스레드풀 / 컬렉션 프레임워크 / List 컬렉션  (0) 2022.09.28
[45일차] 동기화 메소드와 동기화 블록 / 스레드 상태 / 스레드 상태 제어 / 데몬 스레드  (0) 2022.09.27
    '🏫 Open API_JAVA' 카테고리의 다른 글
    • [50일차] andThen()과 compose() 디폴트 메소드 / 메소드 참조 / 입력 스트림과 출력 스트림
    • [49일차] 람다식 기본 문법 / 타겟 타입과 함수적 인터페이스 / 표준 API의 함수적 인터페이스
    • [47일차] Set 컬렉션(HashSet) / Map 컬렉션(HashMap, Hashtable, Properties) / 검색 기능을 강화시킨 컬렉션 / LIFO와 FIFO 컬렉션
    • [46일차] 스레드 그룹 / 스레드풀 / 컬렉션 프레임워크 / List 컬렉션
    Dorothy_YANG
    Dorothy_YANG
    Slowly but Surely, 비전공 문과생의 개발공부

    티스토리툴바