Generic

말하는 감자·2024년 12월 20일
0

자바 중급

목록 보기
7/21
post-thumbnail

개념

제네릭은 자바에서 데이터 타입을 매개변수로 사용할 수 있게 해주는 기능
제네릭을 사용하면 클래스, 인터페이스, 메서드를 정의할 때 사용할 데이터 타입을 유연하게 지정할 수 있다. 이로 인해 코드의 재사용성을 높이고, 타입 안정성을 높여서 컴파일 타임에 오류를 줄여준다

주요 특징

  • 타입 안정성
    제네릭을 사용하면 컴파일할 때 타입 체크가 이루어져 런타임 시 타입 오류가 발생하지 않도록 도와준다.
  • 코드 재사용성
    동일한 클래스를 서로 다른 데이터 타입으로 재사용 가능하다
  • 유연성
    제네릭은 다양한 타입의 객체를 수용할 수 있는 유연성을 제공한다.

Code

BoxExam

public class BoxExam {
    public static void main(String[] args) {
        Box box=new Box();
        box.setObj(new Object());   //Object형
        box.getObj();
        box.setObj("hello");
        String str=(String)box.getObj();    // String으로 형변환

        box.setObj(1);  //int형
        int value=(int)box.getObj();      
    }
}

Box

public class Box<E> {
    private Object obj;
    
    public void setObj(Object obj){
        this.obj=obj;
    }
    public Object getObj(){
        return obj;
    }
}
  • box는 Object 형이기 때문에 상황에 맞게 String이나 int로 형변환이 필요하다

Generic 적용

Box

 public class Box<E> {
        private E obj;
        public void setObj(E obj){
            this.obj = obj;
        }

        public E getObj(){
            return obj;
        }
    }
  • 클래스 이름 뒤에 < E >를 적어 제네릭을 적용한 것이다.
    Box 는 가상의 클래스 E 를 사용한다는 의미
  • Object를 받아들이고, 리턴하던 부분이 E로 변경된다

BoxExam

public class BoxExam {
    public static void main(String[] args) {

        Box<Object> box=new Box<>();    //Object형
        box.setObj(new Object());
        Object obj=box.getObj();

        Box<String> box2=new Box<>();   //String형
        box2.setObj("hello");
        String str= box2.getObj();

        Box<Integer> box3=new Box<>();  //Integer 형
        box3.setObj(1);
        int value=box3.getObj();
    }
}

  • 참조타입에 Object,String,Integer가 있는 것을 볼 수 있다.
  • 별도의 형변환이 필요 없이 각각 Object, String, Integer 를 사용하는 Box 인스턴스를 만든다는 의미

정리

  • Generic을 사용하여 선언할 때 가상의 타입으로 선언하고, 사용 시 구체적인 타입을 설정함으로써 다양한 타입의 클래스를 이용하는 클래스를 만들 수 있다.
profile
주니어개발자(?)

0개의 댓글