Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ordinary

[effective_java] item26, item27 본문

카테고리 없음

[effective_java] item26, item27

extra_ 2022. 12. 22. 20:58

Generic이란 ?

다양한 타입의 객체를 컴파일시에 체크하는 기능

  • T : Type Variable
  • E : Element
  • K : Key
  • V : Value


제네릭은 개인적으로 실무에서 각 도메인의 dto -> ResponseEntity(를 사용한 커스텀 객체)로 한번 더 묶어줄때 쓰면 좋겠다고 생각했음.
별 내용없는것 같은데 책이랑 자료에서는 굉장히 어려운 내용 처럼 보인다...아는만큼 보이는건가.. 실무에서 사용할때의 예시를 많이 기억해두면 좋을 듯 하다.


Item26 : 로(raw) 타입은 사용하지 말라
Item27 : 비검사 경고를 제거하라



Item26 : 로(raw) 타입은 사용하지 말라

  • raw type이란?
List names = new ArrayList(); // 이게 raw type!
names.add("스트링1");
names.add("string2");
names.add(Boolean.FALSE); // 이것도 가능함

BUT ?!

for( Object o : names ) {
    String str = (String) o;
    System.out.println(str); // ClassCastException~!~!
}

String으로 cast를 해주면서 ClassCastException이 발생할 수 있다.
names.add() 한 라인과 (String) cast 한 라인이 멀리 떨어져 있다면 오류 위치를 확인하기 어려울 수 있음
그래서

List<String> names = new ArrayList<String>();
names.add("John");
names.add("Mary");
names.add(Boolean.FALSE); // 여기서 바로 에러남

바로 에러가 잡힐 수 있게끔 <String> Generic을 사용해서 형변환의 안정성과 표현력을 가져가도록 하자.

-> 모르는 타입을 받고 싶어서 List <Object>는 사용하지 말고
1. Set <?>의 비한정적 와일드카드타입을 사용하도록 하거나

2. instanceof 연산자와 같이 사용하자

if(o instanceof Set) { // 여기서 한번 Set만 거르고 들어가기때문에 
// 아래에서 Set<?>으로 cast 해줘도 에러가 나지 않는다.

	Set<?> s = (Set<?>) o;
}


Item27 : 비검사 경고를 제거하라

  • 비검사 경고란?
@SuppressWarnings("unchecked")

을 붙여서 경고를 숨기는 기능이다.

`경고를 숨긴다`는 문장에서 알 수 있듯이 위험 요소의 가능성을 최소화한 뒤 좁은 범위에서 사용할 수 있도록 하라는 얘기이다.
또한 경고를 무시해도 안전한 이유를 주석으로 남겨두어야 한다.