AngelPlayer`s Diary

레퍼 클래스

레퍼 클래스

기본 타입의 데이터를 객체로 변환할 때 사용

 

변수의 종류는 크게 기본형과 참조형으로 나뉨

제네릭 등으로 기본 변수를 전달하고 싶지만 기본 타입의 변수를 사용하지 못하는 경우 레퍼를 사용

기본 타입 레퍼
byte Byte
short Short
long Long
float Float
double Double
boolean Boolean
char Character
int Integer

 

 

박싱 & 언박싱

박싱 : 기본 타입 데이터 -> 레퍼 클래스 인스턴스

언박싱 : 레퍼 클래스 인스턴스 -> 기본 타입 데이터

 

레퍼 클래스 인스턴스는 값을 변경할 수 없기 때문에 언박싱 작업이 필요함

-> 사용자가 언박싱을 해주지 않더라도 오토언박싱 기능을 통해서 연산 작업이 이루어짐

Integer num1 = new Integer(8); // 박싱 (deprecated)
Integer num2 = 2; // 오토 박싱

int int1 = num1.intValue(); // 언박싱
int int2 = num2.intValue();

Integer result1 = num1 + num2; // 오토 언박싱
System.out.println(result1);

박싱은 현재 권장하지 않는 방식이며, 오토 박싱을 통해서 레퍼 클래스 인스턴스를 만들 것을 권장하고 있음

 

 

 

제네릭

제네릭

데이터 타입을 일반화하는 것

클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시 지정

-> 데이터 타입을 미지 지정하지 않고, 필요에 의해서 지정할 수 있음

-> 데이터의 형식에 의존하지 않고, 하나의 값이 다른 데이터 타입을 가질 수 있음

 

 

제네릭 선언 및 생성

제네릭은 클래스와 파라미터 메소드, 변수 등에 선언이 가능함

제네릭 타입은 여러 개를 둘 수 있음

class AngelPlayer<I, S> { // 제네릭 클래스
    public I var1; // I 타입 변수
    public S var2; // S 타입 변수
}

public class Prog {
    public static void main(String[] args) {
        AngelPlayer<Integer, String> a = new AngelPlayer<>(); 
        a.var1 = 88;
        a.var2 = "Hola";

        System.out.println(a.var1 + ":" + a.var2);
    }
}

 

 

제네릭 타입 제한

extends 키워드를 사용하여 특정 타입만 사용가능하도록 제안할 수  있음

-> 인터페이스를 구현 할 때도 implements가 아닌 extends 키워드를 사용함

interface School { public abstract void sName(); }

class Shin<T extends AngelPlayer> { } // 타입 변수 제한
class Shin2<T extends AngelPlayer & School> { } // 클래스와 인터페이스 상속

 

 

제네릭 메소드

[사용법] 접근제어자 <제네릭타입> 반환타입 메소드명(제네릭타입 파라미터) { }

반환 타입 이전에 <제네릭타입>을 선언

 

메소드에 한정한 제네릭

-> 파라미터의 타입에 따라서 제네릭 타입이 결정됨

-> 제네릭 클래스와 별도로 독립적인 제네릭

class AngelPlayer<T> { // 제네릭 클래스
    public T var; // 타입 변수

    <T> T genericMethod(T mVar) { // 제네릭 메소드
        return mVar;
    }
}

public class Prog {
    public static void main(String[] args) {
        AngelPlayer<Integer> a = new AngelPlayer<>();
        a.var = 10;

        System.out.println(a.var); // 10 | Integer
        System.out.println(a.genericMethod("Hola")); // Hola | String
    }
}

 

 

와일드카드

매개변수 타입을 와일드 카드를 통해서 제한 가능

(조금 더 정리가 필요..?)

<?> // 모든 타입을 사용
<? extends T> // T 타입과 T 타입을 상속받는 자손 클래스 타입만을 사용
<? super T> // T 타입과 T 타입이 상속받은 조상 클래스 타입만을 사용

 

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band