TIL

2023.10.16 TIL

목차

    • 오늘 배운 것 
      • Java 공부
        • 제네릭 (Generic)

    제네릭 (Generic)

    어느정도 자바와 친해졌다고 생각하지만 그럼에도 가끔 사용하면서 헷갈리는 것들이 있다..

    오늘은 그 중 하나인 제네릭에 대해 강의를 들으며 개념을 쌓아나갔다. 

     

    제네릭은 클래스, 인터페이스 그리고 메소드를 정의할 때, 타입을 파라미터로 사용할 수 있도록 해준다.

    => 어떤 클래스, 인터페이스, 메서드를 이용할 때, 잘못된 타입의 데이터로 사용될 때 일어날 수 있는 문제를 

        컴파일 하는 시점에 확인하고 제거할 수 있게 하는 거다. 

     

    간단하게 예를 들어 Integer 리스트를 받아 해당 Element를 Long 타입으로 변환하여 리턴하는 메서드를 작성한다면

     

    public static List convertIntToLong(List intList) {
            if(intList.isEmpty()) {
                return Collections.emptyList();
            }
            List longList = new ArrayList();
            for( int i = 0; i < intList.size(); i++ ) {
                Integer integer = (Integer) intList.get(i);
                longList.add(integer.longValue());
            }
            return intList;
        }

    파라미터로 들어오는 리스트가 [1, 2, 3, ...] 이면 정상적으로 동작을 하겠지만

    만약 리스트에 ["가", "나", "다", ...] 이런식으로 들어오면 어떻게 될까?

     

    당연히 예외가 발생한다..

    Exception in thread "main" java.lang.NumberFormatException: For input string: "가"
    	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
    	at java.base/java.lang.Integer.parseInt(Integer.java:668)
    	at java.base/java.lang.Integer.parseInt(Integer.java:786)

    해당 메서드를 사용할 때, List에 들어오는 요소의 타입을 

    이처럼 실행(런타임)단계에서 발생될 수 있는 타입에 따른 문제들을 컴파일 전에 타입을 지정하여 예방, 해결하도록 도와주는 것이 제네릭 인 것이다.

    이 점을 잘 생각하고 사용하면 정말 유용한 문법이 될 것 같다~

     

    느낀 점

    코드를 보면서 이해가 안가는 것들은 해당 코드로 해결하고자 하는 것이 무엇인지, 왜 이것을 만들었는지 먼저 이해하고 코드를 보면

    더 잘 이해하는 느낌을 많이 받았다. 앞으로 이런 경우가 있을 경우 코드 자체를 이해하려 하기보다는 코드의 목적을 이해해보려고 해야겠다.

     

     

     

     

     

    728x90

    'TIL' 카테고리의 다른 글

    2023.10.26 TIL  (0) 2023.10.26
    2023-10-24 TIL  (2) 2023.10.24
    2023.10.20 TIL  (0) 2023.10.20
    2023.10.19 TIL  (0) 2023.10.19
    2023.10.18 TIL  (2) 2023.10.19