Generic

2023. 7. 18. 12:59JAVA

public class Main {
	
	public static void main(String[] args) {
		
		// Generic [ 제네릭 - 아직 명칭이 정해지지 않은 상품 (제네릭 상품) ]
		// class를 설계할때 멤버의 자료형을 결정하지 않고
		// 사용할때(new 할때) 결정하도록 하는 문법
		
		// 데이터를 하나 멤버변수로 저장하고 있는 Box 객체 생성
		// 즉, 멤벼변수 1개짜리 Box 클래스를 설계
		
		// new 할때 자료형을 결정
		 Box<String> b = new Box<String>();
		 
		 b.a= new String("Hello");
		 b.a= "Hello"; //자동 new String();
		 System.out.println(b.a);
		 
		 // new 할때 정수형을 저장하도록
		 // <>제네릭에 사용할 수 있는 자료형은 참조형만 가능함
		 // Box<int> b2= new Box<int>(); //error
		 
		 // 기본형을 제네릭의 타입으로 저장하고 싶다면 
		 // 기본형을 참조형타입을 감싸줘야 함.
		 // 기본형 8개에 대응된 참조형 자료형들이 존재함
		 // 이런 클래스들을 Wrapper 클래스라고 부름
		 // [Boolean, Byte, Character, Short, Integer,Float, Double]
		 // 축약형
		 Integer num= 10; // 자동 new Integer(10) --> auto boxing 이라고 부름
		 int n = num;      // 자동 Integer객체를 int로 변환 --> auto unboxing 이라고 부름
		 System.out.println(n);
		 
		 //위 처럼 Wrapper클래스를 사용하면 기본형처럼 사용이 가능함
		 //이를 제네릭에 적용함
		 Box<Integer> b2= new Box<Integer>();
		 //b2.a= new Interger(100);
		 b2.a= 100; // auto boxing
		 System.out.println(b2.a);
		 
		 Box<Double> b3 =new Box<Double>();
		 b3.a= 3.14;
		 System.out.println(b3.a);
		 
		 Box<Boolean> b4= new Box<Boolean>();
		 b4.aaa(true);
		 boolean k= b4.bbb();
		 
		 // <>제네릭타입을 여러개 지정할 수 있음
		 Box2<String, Integer> box= new Box2<String, Integer>();
		 box.a = "sam";
		 box.b = 20;
		 System.out.println(box.a);
		 System.out.println(box.b);
		 	
	}

}

Generic [ 제네릭 - 아직 명칭이 정해지지 않은 상품 (제네릭 상품) ]


class를 설계할때 멤버의 자료형을 결정하지 않고
사용할때(new 할때) 결정하도록 하는 문법
new 할때 <>안에 전달된 자료형으로 멤버의 타입이 결정됨

 

제네릭에 사용할 수 있는 자료형은 참조형만 가능함
기본형을 제네릭의 타입으로 저장하고 싶다면 
기본형을 참조형타입을 감싸줘야 함.


기본형 8개에 대응된 참조형 자료형들이 존재함
이런 클래스들을 Wrapper 클래스라고 부름
[Boolean, Byte, Character, Short, Integer,Float, Double]

 

Wrapper 클래스



축약형
Integer num= 10; // 자동 new Integer(10) --> auto boxing 이라고 부름
int n = num;      // 자동 Integer객체를 int로 변환 --> auto unboxing 이라고 부름

// new 할때 <>안에 전달된 자료형으로 멤버의 타입이 결정됨
public class Box<T> { // <>제네릭 문법
	
	//데이터를 저장하는 멤버변수 1개
	//클래스를 설계할때는 자료형을 정하지 않도록 하고 싶을때
	T a;
	
	//멤버함수의 파라미터나 리턴타입에도 제네릭타입 적용가능함
	void aaa(T x) {
		this.a=x;
	}
	
	T bbb() {
		return this.a;
	}
}
// <>제네릭타입을 여러개 지정할 수 있음
public class Box2<T,G> {

	T a;
	G b;
    
}

 

'JAVA' 카테고리의 다른 글

Colletion 클래스들 - List  (0) 2023.07.18
Java 고급 문법 - Collection 클래스들  (0) 2023.07.18
Interface 예제  (0) 2023.07.14
Interface  (0) 2023.07.14
Abstract  (0) 2023.07.14