class Member {
String name;
}
List<Member> list = new ArrayList();
.
.
.
list.size() == n+m
list.get(n);
휴일이는 Member 타입의 객체만 담을 수 있는 List를 만들었습니다
그리고 n번째 list에 있는 Member객체를 꺼내려고 합니다
그런데, n번째 index에 있는 Member 객체가 들어있는지, null이 들어있는지 알 수 없습니다
예외를 발생시키지 않고 객체를 꺼낸 다음
객체의 null여부를 검사하는 코드를 작성하세요
코드 작성이 어렵다면,
어떤 방식으로 확인이 가능한지 설명해도 좋습니다
심화1)
list.get(n)에는 null이 들어있었습니다
그런데, null을 직접 다루는 것은 NullPointerException 때문에 위험하다고 합니다
그렇다면, 안전하게 list.get(n)을 다루는 방법은 무엇이 있을까요?
그리고, 그렇게 null을 다루면 좋은 점은 무엇이 있을까요?
심화2)
list.get(n)에는 null이 들어있습니다
심화1에서 사용했던 null여부 검사 방식으로
list.get(n).getName() 를 꺼냈을 경우, 정상적으로 로직이 동작할까요?
그렇게 생각하는 이유도 설명하세요
정답)
System.out.println("list.get(0) = " + list.get(0));
list.get(n)으로 Member 객체를 받은 후,
member.getName()을 직접 호출하지 않는 이상
list.get(n)에 null이 들어있어도 로직은 정상 작동한다
println() 메소드로 출력하면, null이라고 출력된다
복수정답
Optional.ofNullable(list.get(0))
Opional.ofNullable(list.get(0)).orElse()
Opional.ofNullable(list.get(0)).orElseThrow()
Opional.ofNullable() 로 감싸서 받은 후
orElse() 또는 orElseThrow() 를 이용해 null여부를 검사한다
심화 1)
Opional로 받은 후, orElse 메소드로 값이 없다면 null을 받게 한다
Opional을 사용한다면
- NullPointerException이 나올 수 있는 상황을 방지한다
- Null 체크 로직을 만들지 않아도 알아서 검증이 가능하다
- Opional을 사용한 코드는, 해당 객체가 null일 수도 있다는 가능성을 표현하기도 한다
Member member = Optional.ofNullable(list.get(0)).orElse(null);
//list.get(0)이 null일 경우, NPE가 아닌 그냥 null객체로 받는다
System.out.println(member==null); //결과 true
2. NullPointerException이 발생한다
심화 1번과 같은 방식이라면 이런 코드가 나올 것이다
Optional.ofNullable(list.get(n).getName()).orElse(null)
위 코드 메소드의 실행 순서는
list.get(n)
.getName()
Opional.ofNullable 이다
그래서 getName()을 호출하려면, list.get(n)를 가져온 다음에 꺼내야하는데,
null에서 null을 호출하는 것이기 때문에
NullPointerException이 발생한다
학원 스터디에서 문제내고 맞추고 머 그러는 건데
난 낼까지 하고 그만하려고 해서
마지막 문제는 좀 빡시게 내보았다
다들 얼마나 맞추실가 궁금스...
'문제를 풀어보자' 카테고리의 다른 글
ORACLE) Do it! 오라클 10강 연습문제 (0) | 2022.10.23 |
---|---|
ORACLE) Do it! 오라클 9강 연습문제 (0) | 2022.10.21 |
ORACLE) Do it! 오라클 8강 연습문제 (0) | 2022.10.20 |
ORACLE) Do it! 오라클 6강 연습문제 (0) | 2022.10.20 |
JAVA) 자바의 정석 기초편 11-4 연습 문제(Comparator 정렬) (0) | 2022.10.14 |