일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- java super( )
- 자바 예제
- 자바 문자열 클래스
- 코딩
- 자바 try-catch
- 자바 내부 클래스
- Java 추상 메서드
- Java업캐스팅
- Java 내부 클래스
- 오라클
- 데이터베이스
- Java문자열 클래스
- nodejs
- database
- 자바 스트링클래스
- Java try-catch
- dbeaver
- 자바 Random클래스
- oracle
- Java다운캐스팅
- 자바 제어문
- Java추상클래스
- Express
- Java thorw
- DBMS
- 자바 추상메서드
- 자바 String클래스
- db
- 자바 Wrapper클래스
- Java객체배열
- Today
- Total
코딩이란 무엇일까
[Java/자바]제네릭(Generic) 본문
안녕하세요 오늘은 제네릭에 대해 간단하게 알아볼게요!
제네릭(Generic)이란?
우선 제네릭은 몇 번 들어본 분도 계시고 처음 들어보시는 분도 계실 거예요
제네릭은 직역하면 '일반적인'이라는 뜻입니다. 도대체 뭘 일반적으로 만드는 걸까요?!
부연 설명을 하자면 제네릭은 클래스 내부에서 타입을 지정해주는 게 아닌 사용자가 호출한 곳에서 타입을 지정해주는 것입니다!!
제네릭의 사용방법
클래스 명 뒤에 <E>, <K>, <V>와 같은 형식으로 사용합니다.
단, < > 안에 구현 시는 알파벳, 사용 시는 클래스만 들어갈 수 있다.
제네릭 사용 구간
1) 제네릭 클래스 : 클래스 뒤에 제네릭 기법 사용
class A<T> //클래스명 뒤에 < > 제네릭 타입 명시
2) 제네릭 메서드 : 메서드의 반환 타입 전에 제네릭 기법 사용
public <T> void typeSearch(T x) //반환타입 즉, void 전에 제네릭 타입 명시
제네릭 타입 매개변수
제네릭 타입의 매개변수는 관례적으로는 알파벳 하나를 사용해서 표기합니다.
살짝 암묵적인 룰입니다. <T>가 굳이 아닌 < TYPE >로 작성해도 문제는 없습니다.
타입 분류 | 타입인자 |
<T> | 참조 타입을 지정 |
<E> | 배열이나 여러 요소들의 타입을 지정합니다. |
<K> | 키 타입 지정 시 사용합니다. |
<V> | 값 타입 지정 시 사용합니다. |
제네릭 메서드 사용 예시
클래스 안의 메서드에 제네릭 메서드 사용하기
class Value{
//제네릭 메서드 생성
public <T> void typeSearch(T x) { //제네릭 메서드 사용 부분
if(x instanceof Integer) {
System.out.println(x+"는 정수입니다.");
}
else if(x instanceof Double || x instanceof Float) {
System.out.println(x+"는 실수입니다.");
}
else if(x instanceof Character) {
System.out.println(x+"는 문자형입니다.");
}
else if(x instanceof String) {
System.out.println(x+"는 문자열 입니다.");
}
else if(x instanceof Boolean) {
System.out.println(x+"는 논리형 입니다.");
}
}
}
```
Value라는 클래스 안에 typeSearch라는 제네릭 메서드를 만들어줬습니다.
여기서 보시면 반환 타입인 void전에 <T>가 있는 것을 볼 수 있고 메서드의 매개변수를 넣는 괄호 안에
T x가 있는 것을 볼 수 있습니다. 자 따라서 이 메서드는 타입은 지정되어 있지 않고 사용자가 메서드를 호출할 때 이 메서드의 매개변수의 타입을 지정해 주어 여러 가지 타입의 매개변수를 사용할 수 있는 것입니다.
밑에 메서드의 내용은 여러 가지 매개변수가 들어갔을 때 instanceOf를 사용해서 객체의 타입을 구분하여 타입별로 출력문을 출력해주네요.
메인 메서드
public class Generic1 {
public static void main(String[] args) {
Value v = new Value();
v.<Integer>typeSearch(3); //< >를 열어 타입을 명시 해줌
v.typeSearch(3.14); // < > 타입을 명시 안해도 오류 X
v.typeSearch('a');
v.typeSearch("Hello");
v.typeSearch(true);
}
}
```
이제 Value클래스의 객체를 만든 뒤 클래스의 메서드를 호출하여 여러 타입의 값을 넣어주었습니다.
주석에도 설명되어있지만 v. <타입>을 넣어주어 타입을 명시해 주어도 되지만 매개변수의 값에 따라 알아서 타입을 정해주기 때문에 타입을 명시해 주지 않아도 오류는 나지 않습니다.
❗여기서 타입을 명시할 때 주의하셔야 할 점은 참조 타입밖에 오지 못합니다.
즉, int , float, double과 같이 원시 타입은 오지 못하는 것입니다.
출력 결과
타입별로 실행문이 잘 실행된 것을 볼 수 있네요.
이렇듯 제네릭을 사용하면 다양한 타입의 변수를 메서드에서 사용할 수 있습니다.!
제네릭 클래스 사용해 보기
제네릭 클래스
//제네릭 클래스 생성
class A<T>{
T x; //T 로 변수 생성
T y;
}
메인 메서드
public class GenericClass {
public static void main(String[] args) {
A<Integer> a1= new A();
a1.x=20; //a1은 Integer
a1.y=20;
System.out.println(a1.x+a1.y);
A<String> a2= new A(); //문자형 객체 생성
a2.x="20";
a2.y="20";
System.out.println(a2.x+a2.y);
}
}
객체를 생성할 때 <Integer>로 객체의 타입을 명시해 주었습니다.
그럼 클래스의 필드 값인 T x와 T y는 정수형 타입이 들어갈 수 있겠죠
그리고 덧셈을 해주었습니다.
그 밑으로 <String>을 사용하여 String타입인 객체를 생성해 주었습니다.
a2객체 또한 값을 넣은 뒤 덧셈을 해주어봤습니다.
결과를 보시죠
출력 결과
첫번 째 40이라는 값은 정수형 타입이기 때문에 20+20은 40이 나오지만
두 번째 객체 즉, a2객체는 String타입이기 때문에 문자열을 이어줍니다.
따라서 2020이라는 값이 나오는 것이지요
자 이상으로 오늘은 제네릭에 대해 알아보았는데요.
이상으로 글 마치겠습니다.
글 읽어주셔서 감사합니다.
'Java' 카테고리의 다른 글
[Java/자바]큐(Queue),스택(Stack) (2) | 2022.10.13 |
---|---|
[Java/자바]Set,List (0) | 2022.10.12 |
[Java/자바]Wrapper클래스, Random클래스 (0) | 2022.10.07 |
[Java/자바]기본 API클래스 (String 클래스)알아보기 (0) | 2022.10.07 |
[Java/자바]예외처리 throw,throws (0) | 2022.10.06 |