하루에 0.01%라도 성장하자

Develop/Android

제네릭이란? 사용하는 이유는!!?

뚠님 2019. 11. 1. 18:59
반응형

자바의 가장 상위 클래스는 Object 이다.

 

이 Object는 상위 클래스이기 때문에 어떠한 타입도 받을 수 있다. 단! 캐스팅이 필요하다.

 

아래는 간단한 예시이다.

 

public class Obj {
    private Object object;
    public Object get(){
        return object;
    }
    public void set(Object object){
        this.object = object;
    }
}



public class Test {
    public class void main(String[] args){
        Obj obj = new Obj;
        obj.set("뚠님");
        String text = obj.get();
        System.out.printf(text);
    }
}

 

Object 형태의 Obj 클래스를 만들고 set 메소드를 이용하여 "뚠님"이라는 String 값을 넣어주었다.

이후 같은 String 변수인 text에 obj에 설정된 값을 get()으로 가져와서 넣어주려고 하면 에러가 발생한다.

저기 위에 코드를 아래와 같이 변경하면 에러는 발생하지 않는다.

 

public class Test {
    public class void main(String[] args){
        Obj obj = new Obj;
        obj.set("뚠님");
        String text = (String)obj.get();
        System.out.printf(text);
    }
}

 

obj.get()부분을 (String)obj.get() 부분으로 강제 캐스팅 하였다.

 

 

하지만 강제캐스팅은 프로그램 성능저하가 발생하는 부분이기 때문에 최대한 자제하는 방향으로 코딩하는 것이 좋지만 코딩을 하다보면 변수의 타입때문에 캐스팅 이슈로 많은 고생을 한다.

 

간단한 코드임에도 타입때문에 같은 코드를 변수의 타입이 다르게 적용해야 할 수 도 있고, 코드는 길어지고 반복되는 코드가 생성된다.

 

이러한 것을 보완하기 위해서 탄생한 것이 제네릭이다.

 

 

 

 

제네릭은 이로써 두가지의 특징을 확인할 수 있다.

  1. 강제 캐스팅 사용을 줄어 프로그램 성능저하를 줄인다.
  2. 반복되는 코드를 줄임으로써 가독성, 프로그램 크기(미세하지만.. ), 유지보수를 효율적으로 할 수 있다.

 

사실 지금까지 제네릭을 따로 사용해 본적은 없다.. 가끔 솔루션보면 유지보수성으로 보인적은 있었는데, 개발하면서 내가 사용한 적은 없었던 것 같다.

하지만 이번에 이런 기본적인 내용을 공부하면서 업무에 사용했으면 좋았겠다는 생각이 든다...

반응형