객체 타입을 컴파일 시에 체크 해주는 기능이다.
타입 안정성을 높이고, 잘못 형변환 되는 오류를 막을 수 있다.
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
최근댓글