inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Hướng dẫn dành cho người mới bắt đầu sử dụng Java và Kotlin

Bài 2. Cách xử lý null trong Kotlin

java class의 NotNull 어노테이션 인식

260

ziziza93

21 câu hỏi đã được viết

1

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

안녕하세요, 2강 코틀린에서 null을 다루는 방법 수강중 궁금한 지점이 생겨 문의드립니다.

name이라는 필드에 NotNull 어노테이션을 달아주어서 인스턴스 초기화시 null값은 받을 수 없게 하고싶었는데이런 경우에는 null을 대입해도 에디터상에서 에러를 짚어주지 못하더라구요.회사 프로젝트를 전환하는 과정중에는 이런 문제가 꽤나 발생할 것 같은데 좋은 해결책이 있을까요?

 

package com.lannstark.lec02;

import org.jetbrains.annotations.NotNull;

public class Person {
    @NotNull
    private final String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

}
package com.lannstark.lec02

fun main() {
    val person = Person(null)
    startsWithA(person.name)
}

java kotlin 객체지향

Câu trả lời 1

0

lannstark

안녕하세요 영욱님! 🙂 좋은 질문 감사드립니다.

 

결론부터 말씀드리면, 생성자에 @NotNull 어노테이션이 없기 때문에 발생하는 일입니다.

public class Person {
    @NotNull
    private final String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

}

라는 코드를 봤을 때 Kotlin에서 Person(null) 이라고 하게 되면 Person 의 생성자를 호출하게 되고, 생성자에는 @NotNull 이 없어 null을 넣을 수 있게 됩니다.

이때 생성자에도 @NotNull 을 붙여주시면 정상적으로 에러가 발생하는 것을 확인할 수 있습니다.

image.pngimage.png

추가로, 필드에 @NotNull 을 붙이시고 @AllArgsConstructor 와 같은 롬복을 사용하시면 필드에 붙은 어노테이션이 생성자에도 자동으로 들어가게 됩니다. (즉, 코틀린에서 null을 넣으면 에러로 인식하게 됩니다.)

감사합니다. 또 궁금하신 점 있으시면 편하게 말씀해주세요! 🙇

1

ziziza93

상세한 답변 감사합니다!

덕분에 좋은 강의 잘 보고 있습니다 :)

수업노트

0

52

1

싱글톤과 스프링

0

71

2

get() = 3

0

49

2

강사님

0

74

1

강의 복습하면서 생긴 질문

1

93

1

Kotlin과 Java의 현업에서의 활용

0

121

2

data class와 자바의 Lombok을 이용한 DTO 클래스 차이 질문

0

71

1

코틀린에서 상속 시, 주의점에 대한 질문

1

95

3

내용 이해 질문

0

56

1

자바와 코틀린의 함수형 프로그래밍,

1

91

1

플랫폼 타입 설명 문의

2

73

2

널 아님 단언 관련 질문

0

83

1

강의 중 질문

0

79

2

범위 비교 질문

1

91

2

타입캐스팅 궁금한점 질문드립니다.

1

239

2

코틀린 val 질문

0

166

2

완강 후 Kotlin 이런저런 질문 드려봅니다!

3

408

2

확장함수 스타일 질문

0

138

2

확장 프로퍼티 질문

1

156

1

update 함수를 만든다는게 어떤 의미인지 예시가 궁금합니다!

1

283

1

[16강] 확장함수 관련 질문입니다!

1

130

2

리턴타입 사용시 any를 사용해도 괜찮은가요?

1

138

1

안녕하세요 scope function 에 receiver 가 없는 경우

1

168

1

코틀린 싱글톤 질문

1

218

1