본문 바로가기
국비학원

[국비지원] KH 정보교육원 33일차

by 도전하는 개발자 2022. 5. 12.

kh day 033

 오늘은 sqldveloper를 설치했다. sqldveloper은 스쿱으로 설치가 불가능해서 설치파일을 직접 다운받아서 설치했다. 이후에 on-premise 방식으로 로컬에 설치한 oracle database XE를 삭제했다. 약간의 더미데이터가 남긴했지만 잘 지워진거 같다. 이후에는 시간이 빠듯해서 SQL문은 select문을 한문장 쳐보고 끝났다 ㅋㅋ; 남은 시간은 다시 자바 언어의 제네릭을 배웠다! 제네릭이 간단해보이면서도 나름 공부해야할 부분도 적지 않은 것 같다. 그래도 생각보단 할만한 것 같아 다행이다!

 

---

 

제네릭 타입의 종류 3가지
(1) 제네릭 클래스
(2) 제네릭 인터페이스
(3) 제네릭 메소드

제네릭 타입이란?
타입을 파라미터로 가지는 클래스와 인터페이스 (메소드는 나중에 생각하자)
선언 시 클래스 또는 인터페이스 이름 뒤에 “<>” 부호 붙임
“<>” 사이에는 타입 파라미터 위치

타입 파라미터
일반적으로 대문자 알파벳 한 문자로 표현 ex) T, U, R
개발 코드에서는 타입 파라미터 자리에 구체적인 타입을 지정해야

제네릭 타입을 사용하지 않은 경우
빈번한 타입 변환 발생 → 프로그램 성능 저하

제네릭 타입 사용한 경우 
클래스 선언할 때 타입 파라미터 사용
컴파일 시 타입 파라미터가 구체적인 클래스로 변경

* 제네릭 타입 파라미터에 *구체적인 참조타입 (구체타입)*을 언제 지정해야하는가?
(1) 제네릭 타입 (=클래스/인터페이스/메소드) 선언할 때는   타입 파타미터 T, U, R 등을 단문자로 표시
    -> 이 때 구체타입을 지정하는 것 아님!!!

(2) 제네릭 타입을 사용할 때 구체타입을 지정한다
    - new 연산자로 제네릭 타입의 객체를 생성할 때 
    - 제네릭 타입을 메소드/생성자의 매개변수의 타입으로 지정(선언)할 때
       ex) String name = "John";
    - 제네릭 메소드를 호출 할 때, "구체타입명을 인자로 전달"

--

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

자바 7부터는 다이아몬드 연산자 사용해 간단히 작성과 사용 가능
Product<Car, String> product2 = new Product<>();

 

Tv 클래스
Car 클래스
제네릭 클래스 Product

 

제네릭 객체 생성


---

제네릭 메소드
매개변수 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드

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

public <타입파라미터>    리턴타입    메소드명(매개변수) {...}
public         <T>            Box <T>     boxing(T t) {...}

제네릭 메소드 호출하는 두 가지 방법
1. 리턴타입 변수 = <구체적타입> 메소드명(매개값);  
   - 명시적으로 구체적 타입 지정

   Box<Integer> box = <Integer> boxing((100);
   - 타입 파라미터를 명시적으로 Integer로 지정

2. 리턴타입 변수 = 메소드명(매개값);
   - 매개값을보고 구체적 타입을 추정
   
    Box<Integer> box = boxing((100);
    - 타입 파라미터를 Integer로 추정

 

제네릭 클래스 Box
제네릭 메소드 boxing()
제네릭 메소드 호출