지네릭 타입의 형변환과 제거
·
자바/지네릭스
1. 지네릭 타입과 원시 타입의 형변환 - 아래의 코드처럼 지네릭 타입과 원시 타입의 형변환은 항상 가능하지만, 경고가 발생한다. Box box = null; Box objBox = null; box = (Box) objBox; // 지네릭 타입 -> 원시 타입 (경고 발생) objBox = (Box) box; // 원시 타입 -> 지네릭 타입 (경고 발생) - 단, 아래의 코드처럼 대입된 타입이 다른 지네릭 타입 간에는 형변환이 불가능하다. Box objBox = null; Box strBox = null; objBox = (Box) strBox; // 에러 발생 strBox = (Box) objBox; // 에러 발생 - 그러므로, 아래의 코드처럼 지네릭으로는 다른 지네릭으로 형변환할 수 없다. Bo..
지네릭 메서드
·
자바/지네릭스
1. 지네릭 메서드란? - 메서드의 선언부에 지네릭 타입이 선언된 메서드를 '지네릭 메서드' 라고 부른다. - 앞서 했던 예제 메서드 Collections.sort() 또한 지네릭 메서드이다. - 지네릭 클래스에 정의된 타입 매개변수와 지네릭 메서드에 정의된 타입 매개변수는 전혀 별개의 것이다. - 아래의 코드를 통해 이해하자. class FruitBox{ ... static void sort(List list, Comparator
와일드 카드
·
자바/지네릭스
1. 와일드 카드란? - Juicer라는 클래스가 존재하고 static 메서드로 makeJuice()가 있다고 가정해보자. class Juicer{ static Juice makeJuice(FruitBox box) { // 으로 지정 String tmp = ""; for(Fruit f : box.getList()) tmp += f + " "; return new Juice(tmp); } } ( Juice 클래스는 지네릭 클래스가 아닌데다, 지네릭 클래스라고 해도 static 메서드에는 타입 매개변수 T를 매개변수에 사용할 수 없으므로 아예 지네릭스를 적용하지 않던가, 위와 같이 같이 로 지정해줘야 한다. ) ( 그래서 아래와 같이 fruitBox는 컴파일이 잘 되지만, appleBox에 대해서는 컴파일 ..
지네릭스의 전반적 개념(2)
·
자바/지네릭스
5. 제한된 지네릭 클래스 - 타입 문자로 사용할 타입을 명시하면 한 종류의 타입만 저장할 수 있도록 제한할 수는 있지만, 그래도 여전히 아래의 코드처럼 모든 종류의 타입을 저장할 수 있다는 것에는 변함이 없다. FruitBox fruitBox = new FruitBox(); fruitBox.add(new Toy()); // 과일상자에 장난감을 담을 수 있다? ( 이러한 것을 해결하기 위해서는 class 이름 뒤에 아래와 같이 지네릭 타입을 주면 된다. ) class FruitBox{// Fruit의 자손만 타입으로 지정가능 ArrayList list = new ArrayList(); ... } public class Exercise002{ public static void main(String[] ar..
지네릭스의 전반적 개념(1)
·
자바/지네릭스
1. 지네릭스란? - 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 대해서 타입 체크를 해주는 기능을 말한다. - 그러므로, 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄어든다. - 타입 안정성을 높이는 것은 의도치 않은 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 원래의 타입과 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여준다는 뜻이다. - 예를 들면, ArrayList 컬렉션 클래스에 다양한 객체를 담을 수 있지만 한 종류의 객체를 담는 경우가 많다. 그런데도 꺼낼 때 마다 타입 체킹을 하거나 사용자가 원하지 않는 종류의 객체를 저장하는 것을 막지 못하는 불편한 점이 있다. 그러한 것을 해결할 수 있는 것이 바로 '지네릭스'이다. - 아래는 지네릭..