Cute Happy Ghost
본문 바로가기
JAVA/Java

20201020_19 제네릭, static

by JENN_tech7 2020. 10. 20.
728x90
SMALL

 

package test01.generics01;
class Apple {
	public String toString() {
		return "apple";
	}
}
class Orange{
	public String toString() {
		return "Orange";
	}
}
class AppleBox {
	private Apple ap; // 참조 변수 선언, 멤버 필드

	public Apple getAp() {
		return ap;
	}

	public void setAp(Apple ap) { //new 없다는게 중요해요~
		this.ap = ap;
	}

}
class OrangeBox {
	private Orange o;

	public Orange getO() {
		return o;
	}

	public void setO(Orange o) {
		this.o = o;
	}
	
}
public class FruitAndBos {

	public static void main(String[] args) {
		//과일 담는 박스 생성
		AppleBox aBox = new AppleBox();
		OrangeBox oBox = new OrangeBox();
		
		//과일을 박스에 담는다.
		aBox.setAp(new Apple());
		oBox.setO(new Orange());
		
		//박스에서 과일을 꺼낸다
		Apple ap = aBox.getAp();
		Orange og = oBox.getO();
		System.out.println(ap);
		System.out.println(og);
	}

}

OrangeBox, AppleBox따로 안만들고 Box만 만들어서 깔끔하게 만들 수 있다

과일 꺼낼 때

Apple ap = (Apple)aBox.get(); 이러케...? ㅠㅠ

 

 

 

 

제네릭: <>꺽새를 쓰고 이 안에 넣으면 T로 된 것이 다 바뀜

 

 

클래스단위로 들어가야하기때문에 int가 아닌 Integer로 해야됨

ArrayList<DBox> arr = new ArrayList<DBox>();

box.set("Apple",

arr.add(box);

System.out.println(arr.get(0));

 

어레이리스트 객체생성 > set > add> 0인덱스 출력

헷갈려~~~~

 

 

  • 제네릭제네릭제네릭
package test06.generics05;
class Box<T> {
	private T ob;

	public T get() {
		return ob;
	}

	public void set(T ob) {
		this.ob = ob;
	}
	
}
public class BoxInBox {

	public static void main(String[] args) {
		Box<String> sBox = new Box<>();
		sBox.set("I am so happy.");
		
		Box<Box<String>> wBox = new Box<>();
		wBox.set(sBox);
		
		Box<Box<Box<String>>> zBox = new Box<>();
		zBox.set(wBox);
		
		System.out.println(zBox.get().get().get());
	}

}
I am so happy.

이게 뭐란말이냐

뭔말이란말이냐ㅠ

 

 

 

 

package test06.generics06;
class Box<T extends Number> {
	private T ob;

	public T get() {
		return ob;
	}

	public void set(T ob) {
		this.ob = ob;
	}
}
public class BoundedBox {

	public static void main(String[] args) {
		Box<Integer> iBox = new Box<>();
		iBox.set(24);
		System.out.println(iBox.get());
	}

}

T에 Number클래스만 오게해야됨 apple이런거 안됨 왜냐면 Number은 숫자만 있는 뭐 걔네니까...

제네릭에만 상속이 들어간거임

 

 

 

  • 인터페이스 제네릭
package test06.generics07;
interface Eatable { //인터페이스
	public String eat();
}
class Apple implements Eatable { //인터페이스를 구현한 Apple
	
}
class Box<T extends Eatable> {
	//eatable를 상속받은 T..가 아니라 Eatable을 구현한 클래스만 T자리에올수있음(헷갈림 주의 상속아님)
	
}
public class BoundedInterfaceBox {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

eatable를 상속받은 T..가 아니라 Eatable을 구현한 클래스만 T자리에올수있음(헷갈림 주의 상속아님)

 

 

package test06.generics07;
interface Eatable { //인터페이스
	public String eat();
}
class Apple implements Eatable { //인터페이스를 구현한 Apple
	public String toString() {
		return "I am an apple.";
	}
	
	@Override
	public String eat() {
		return "It tastes so good!";
	}
}
class Box<T extends Eatable> {
	private T ob;
	public void set(T o) {
		ob = o;
	}
	public T get() {
		System.out.println(ob.eat());
		return ob;
	}
}
public class BoundedInterfaceBox {

	public static void main(String[] args) {

		Box<Apple> box = new Box<>();
		box.set(new Apple());
		
		Apple ap = box.get();
		System.out.println(ap);
	}

}

<T> Box <T> 리턴타입 (void처럼)

 

 

static: 공용의 공간

package test06.generics08;
class Box<T> {
	private T ob;
	public void set(T o) {
		ob = o;
	}
	public T get() {
		return ob;
	}
}
class BoxFactory {
	//static T a ; //멤버필드 xx
	//static 제네릭 메소드
	public static <T> Box <T> makeBox(T o) 	{
		Box<T> box = new Box<T>();
		box.set(o);
		return box;
	}
}
public class GenericMethodBoxMaker {

	public static void main(String[] args) {
		Box<String> sBox = BoxFactory.makeBox("Sweet");
		System.out.println(sBox.get());
		
		Box<Double> dBox = BoxFactory.makeBox(7.59);
		System.out.println(dBox.get());
	}

}

 


  • static 메소드

 

728x90
LIST

'JAVA > Java' 카테고리의 다른 글

20201028_23 자바리뷰  (0) 2020.10.28
20201020_19 2차원배열  (0) 2020.10.20
20201019_18 영업실적프로그램  (0) 2020.10.19
20201019_18  (0) 2020.10.19
20201016_17 네트워크  (0) 2020.10.16

댓글