Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 슬라이딩윈도우
- 글또10기x코드트리
- generic
- 페이지네이션
- meatadata
- Spring
- javascript
- code-push-standalone
- codepush
- array
- map
- app.post
- 이진탐색
- 상속
- xlsx-js-style
- 스크롤이벤트
- TS
- set
- supabase 페이지네이션
- supabase auth
- 타입스크립트
- async
- extends
- 코드푸시
- interface
- supabase authentication
- Filter
- reactnative
- Next.js
- react
Archives
- Today
- Total
rhanziy
Java - 제네릭 클래스 본문
제네릭은 클래스와 메소드에서 사용할 수 있는데 제네릭 타입을 선언한 클래스를 제네릭 클래스라 한다.
제네릭 클래스를 이용하면 하나의 클래스에서 서로 다른 형태의 데이터 를 받아와 한꺼번에 처리할 수 있다.
기존의 인스턴스 변수를 Object 데이터 형식으로 지정해 받는다면
package Chap_09.coffee;
public class CoffeeByName {
public Object name; // Integer, Double, String ...
public CoffeeByName(Object name) {
this.name = name;
}
public void ready() {
System.out.println("커피 준비 완료 : " + name);
}
}
주문고객 번호와 주문고객 이름을 확인할 때 Object 형변환이 필요한 번거로움이 있고,
또 다른 문제점으로는 자료형과 관련된 실수 발생 가능성이 높다.
package Chap_09;
import Chap_09.coffee.CoffeeByName;
public class GenericClass {
public static void main(String[] args) {
CoffeeByName c3 = new CoffeeByName(34);
c3.ready();
CoffeeByName c4 = new CoffeeByName("ㅇㅇㅇ");
c4.ready();
int c3Name = (int)c3.name; // object 형변환 필요
System.out.println("주문 고객 번호 : " + c3Name);
String c4Name = (String)c4.name;
System.out.println("주문 고객 이름 : " + c4Name);
// c4Name = (String)c3.name; << 오류 발생 가능성이 높다.
}
}
package Chap_09.coffee;
public class Coffee <T> {
public T name;
public Coffee(T name) {
this.name = name;
}
public void ready() {
System.out.println("커피 준비 완료 : " + name);
}
}
그래서 제네릭 클래스를 만들어 타입을 변수로 표시한다. 이것을 “타입 매개변수(type parameter)”라고 하며, 타입 매개변수는 객체 생성 시에 프로그래머에 의하여 결정된다.
package Chap_09;
import Chap_09.coffee.Coffee;
public class GenericClass {
public static void main(String[] args) {
// 타입지정으로 오류발생 줄이기
Coffee<Integer> c5 = new Coffee<>(35);
c5.ready();
int c5Name = c5.name;
System.out.println("주문 고객 번호 : " + c5Name);
Coffee<String> c6 = new Coffee<>("ㅁㅁㅁ");
c6.ready();
String c6Name = c6.name;
System.out.println("주문 고객 이름 : " + c6Name);
}
}
조금 더 narrow한 타입지정을 통해 오류발생 가능성이 줄어들고, 자료형 관련 실수가 컴파일 과정에서 드러나며, 형변환이 필요없다는 장점이 있다.
'Java' 카테고리의 다른 글
SQL - 쿼리 분석 (0) | 2023.04.18 |
---|---|
SQL - OUTER JOIN 외부조인 (0) | 2023.04.17 |
Java - 제네릭스 (1) | 2023.04.11 |
Java - 추상클래스와 인터페이스 (0) | 2023.04.10 |
2023.04.06. 작은실습 (0) | 2023.04.06 |
Comments