inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

더 자바, Java 8

Optional 소개

Optional 질문

해결된 질문

346

석민

작성한 질문수 5

2

안녕하세요 기선님. 수업 잘 듣고 있습니다. 

예제와 같이 Progress 클래스를 get으로 받으려 하지만 참조값이 없을 경우, NPE가 발생하였습니다.

하지만 예를들어 OnlineClass 클래스에,

String professrorName; 이라는 필드가 존재하고 이를 인스턴스가 getProfessorName(); 으로 받을 때, 비어있는 필드인데 NPE가 발생하지 않고 null을 반환합니다.

왜 getProgress() 는 NPE가 발생하고, getProfesorName()는 null값을 반환하는 것인지요. 답변 해주시면 감사하겠습니다.

java

답변 3

1

석민

네 제가 예시를 처음부터 잘못적었고, 질문 자체도 모순이 좀 많았습니다. 

질문의 의도는 결국 npe를 왜 발생시키냐였습니다.

getProgress() 를 출력하면 null을 반환하고 getProgress().getDuration() 는 npe 가 발생하느냐 였습니다.

그냥 null을 주면 되는데 말이죠. 여기서 깊게 고민을 해봤고 다음과 같은 결론이 나왔습니다. 곰곰히 생각을 해보다가 이유를 알았고 블로그에 처음으로 생각을 정리하는겸 글을 적어봤습니다.  

https://catch-me-java.tistory.com/2

사실 optional 강좌에 이런질문을 하는 것도 좀 이상했었네요. ㅠㅠ 강의 잘보고 유튜브도 잘 보고있습니다. 늘 감사합니다.!

1

백기선

코드를 보여주시면서 질문해 주셨으면 이해가 좀 더 쉬웠을텐데 Progress를 Optional<Progress>로 만든 다음에 비어있는 상태에서 get()을 호출했을 때와 String professorName의 getter를 호출했을 때 왜 동작이 다르냐고 묻고 계신거죠?

가르쳐 드릴 순 있지만 직접 공부해서 알아내시는게 더 좋을거 같습니다. 이 수업이 Optional을 다루는 수업인데 조금 더 Optional에 있는 get()에 대한 API를 찾아서 읽어보시면 어떨까요.

0

백기선

아.. 왜 NPE를 던지느냐는 질문이었군요. 잘하셨습니다. 계속 그렇게 하시다보면 많이 성장하실꺼에요.

CompletableFuture의 get 실행에 대해 궁금한 점이 있습니다

0

231

2

기본 인터페이스의 기본 제공 메서드 관련 질문 (왜 이걸 사용하는지)

0

515

2

static 과 metaspace 관련 질문있습니다.

0

707

0

Map의 가장 큰 특징이 key는 null이 아니다

0

2377

2

Optional 질문드립니다.

0

469

0

인텔리제이 콘솔창

0

579

0

Supplier를 쓰는 이유

0

1355

1

allOf()에서 컬렉션으로 반환하는 것을 설명할 때 코드

0

706

1

[참고] LTS주기

0

468

1

orElseThrow()

1

1082

2

findFirst함수

0

357

1

메서드 레퍼런스

1

477

1

primitive type 질문

0

301

1

FunctionalInterface 상속 관계 질문

0

292

1

함수형 인터페이스를 왜 사용하나요?

1

496

1

while문 세미콜론

0

430

1

flatMap Optional과 Stream에서의 차이점을 제가 잘 이해했는지 헷갈립니다!

0

404

1

람다식과 익명 클래스

0

318

1

steam api 예제 git 주소

3

782

1

thread.sleep질문

0

383

2

.orElse 매개변수 질문

0

261

1

isPresent( ) 와 null 질문

0

333

1

예제 코드 질문

2

286

1

코드 질문있습니다.

0

235

1