JAVA17

Java16 의 특성중 Instanceof 를 회고하기 위해 그때 코드를 다시 재사용해 보자.이전글

Map<String, Object> data = new HashMap<>();
data.put("key1", "aaa");
data.put("key2", 111);
if (data.get("key1") instanceof String s) {
  log.info(s);
}

value 에는 서로 같지 않은 data 타입이 있다. 이때 instanceof 로 꺼내온 data 타입이 무엇인지를 알아내고 타입에따로 비지니스로직을 처리한다. 더 나아가서 String、Integer、Double 등 더 많은 유형의 데이터 타입이 Map 의 value 값으로 있다면 아래와 같이 해야 되지않을까?

if (data.get("key") instanceof String s) {
  log.info(s);
} else if (data.get("key") instanceof Double s) {
  log.info(s);
} else if (data.get("key") instanceof Integer s) {
  log.info(s);
}

하지만 이런 유형의 if else 패턴은 체크포인트가 많아질수로 가독성도 떨어지고 추후 유지보수에도 큰 부담된다. 그러면 switch로 개선해보자.

switch (data.get("key1")) {
  case String s  -> log.info(s);
  case Double d  -> log.info(d.toString());
  case Integer i -> log.info(i.toString());
  default        -> log.info("");
}

어떤가? 코드 읽기가 편해졌다.

여기서 추가로 언급해보자면 Lambda 함수를 써서 break 는 더 이상 쓰지 않아도 되게 됐다.

끝!

Last updated