지네릭스

IT/JAVA / / 2021. 7. 4. 20:42

객체 타입을 컴파일 시에 체크 해주는 기능이다.

타입 안정성을 높이고, 잘못 형변환 되는 오류를 막을 수 있다.

 

1. 지네릭 생성

class Box <T>
{
	ArrayList<T> list = new ArrayList<T>();
	
	void add(T item) 
	{
		list.add(item);
	}
	
	T get (int i )
	{
		return list.get(i);
	}

	int size ()
	{
		return list.size();
	}

	public String toString() 
	{
		return list.toString();
	}
}

object 대신 지네릭을 통해서 형을 간단히 쓸 수 있다.

 

2. 지네릭 사용

public static void main()
{
	Box<Fruit> fruitBox = new Box<Fruit>();
	//위처럼 < > 안에는 같은 변수명이 들어가야 한다.
	Box<Grape> grapeBox = new Box<Apple>();
	// error
}

 

 

3. 지네릭의 제한 없에기

 

사용할 타입을 명시하면 한 종류만 사용할 수 있지만, <T extends Fruit> 처럼 상속된 클래스의 타입도 사용할 수 있다.

class FruitBox <T extends Fruit & Eatable> extends Box<T> {}

 

4. 와일드 카드

 

함수 오버로딩시 지네릭타입을 다르게 만드는 것 만으로 오버로딩을 할 수 없기에 나온 기능

<? extends T>
<? super T>
<?> // 모든 타입 가능

static Juice makeJuice(FruitBox<? extends Fruit> box)
{	
	string tmp = "";
	for(Fruit f : box.getList()) temp += f + " ";
	return new Juice(tmp);
}

위와 같이 제네릭타입을 만들어주면 다른 클래스를 상속 받은뒤에 각각의 제네릭타입의 함수를 적을 필요 없이 하나의 함수로 여러 타입의 제네릭을 사용할 수 있다.

 

5. 지네릭 메서드

 

메서드 선언부에 지네릭 타입이 선언된 메서드를 말한다.

static <T extends Fruit> Juice makeJuice(FruitBox<T> box)
{	
	string tmp = "";
	for(Fruit f : box.getList()) temp += f + " ";
	return new Juice(tmp);
}

 

 

Enum

 

1. Enum 생성

상수를 선언해서 여러 상수를 정의 할 때 유용하게 사용할 수 있다.

class game
{
	enum EDirection
	{ north, west, south, east}
}

 

2. Enum 변수 대입

enum EDirection
	{ north (1), 
		west (3),
		south (-1)
		east (14);
	}

위와 같이 상수 대입이 가능하다.

 

3. Enum 은 클래스이므로 클래스처럼 사용이 가능하다

enum Transportation
{ 
	EAST (1), WEST(2);
	private final int value;
	
	Direction(int value)
	{
		this.value = value;
	}
}

와 같이 하나의 클래스 로서 사용됨

 

 

에너테이션

 

주석처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 정보를 제공하는 역할을 한다

표준 에너테이션은 다음이 있다

@override

@Deprecated

@SuppressWarnings

@FunctionalInterface

@Native

등이 있다.

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기