inblog logo
|
{CODE-RYU};
    java

    제네릭, 오브젝트

    Jan 04, 2024
    제네릭, 오브젝트
    Contents
    1. 제네릭(Generic)2. 오브젝트(Object) vs 제네릭
     

    1. 제네릭(Generic)

     
    💡
    클래스를 정의할 때, 클래스 안에서 사용되는 자료형을 구체적으로 명시하지 않고 다양한 데이터를 처리할 수 있는 방법
     
    class 클래스명 <영어 대문자> { 영어대문자 변수명 } class Box<T> { T data; }
     
    클래스에 <대문자> 를 사용하면 변수 타입을 정하지 않아도 사용할 수 있다.
     
    class Box<T> { T data; } public class GenericEx01 { public static void main(String[] args) { Box<String> box1 = new Box(); Box<Integer> box2 = new Box(); box1.data = "1"; box2.data = 1; } }
     
    제네릭을 사용하면 new 할 때 자료형이 정해진다.
     
     

    2. 오브젝트(Object) vs 제네릭

     
    💡
    다형성을 이용하면, 모든 객체는 Object 타입형으로 처리할 수 있다.
     
    class Box { private Object data; public void set(Object data) { this.data = data; } public Object get() { return data; } } public class Generic5 { public static void main(String[] args) { Box b = new Box(); b1.set(1); int i = b1.get(); } }
     
    자료형을 Object 로 처리했다. set 메서드를 통해 변수를 입력받고 get 메서드를 통해 값을 리턴한다.
    변수형은 사용자가 메인 메서드에서 정할 수 있다.
    notion image
     
    하지만 Object 를 사용하면 문제가 있다. Object 값을 저장할 때 오류가 발생한다. 리턴되는 값이 Object 형이기 때문에 사용할 int 나 String 보다 더 큰 자료형이기 때문이다. 그래서 다운캐스팅을 사용해서 값을 저장해야 한다.
     
    int i = (Integer) b1.get(); // Object 형을 Integer 형으로 다운캐스팅
     
    notion image
     
     
     
    이때 제네릭을 이용하면 문제를 쉽게 해결할 수 있다.
     
    class Box<T> { private T data; public void set(T data) { this.data = data; } public T get() { return data; } } public class Generic5 { public static void main(String[] args) { Box<String> b1 = new Box(); b1.set("hello"); int i = b1.get(); } }
     
    같은 코드를 제네릭을 이용해 만들었다. Object 를 대문자 T로 자료형을 변경했다.
    제네릭을 이용해면 객체를 생성할 때 타입을 정할 수 있다.
     
     
    notion image
     
    정수형을 사용하기 원한다면 int 가 아니라 Integer 를 이용하면 된다.
    Box<Integer> b1 = new Box();
    notion image
     
    Share article

    {CODE-RYU};

    RSS·Powered by Inblog