TIL
Day26
jackpods
2023. 2. 27. 22:18
- 도메인 모델
- 해결하고자 하는 문제 영역
- 특정 문제와 관련된 모든 주제의 개념 모델이다.
- null
- 대소문자를 구분하는 키워드이다. Null, NULL도 안되고 오직 null로만 선언할 수 있다.
- null은 참조형 타입의 기본 값이다.
null 의 문제점
그렇다면 왜 null이 문제가 되는 것일까?이렇게 레퍼런스를 존재하지 않는 값을 나타내는 null 참조는, 그 자체로 에러의 근원이다. null 참조를 남발하다가는 NullPointerException을 정말 쉽게 만날 수 있다.NullPointerException
자바 개발자라면 한 번쯤은 NullPointerException(이하 NPE)이 발생하는 상황을 마주쳤을 것이다.특히나 개발자를 고통받게 하는 이유는 NPE가 런타임(Runtime)에 발생하기 때문이다. 그렇기 때문에 프로그램이 실행되기 전인 컴파일 시점에서는 예외의 발생 위험을 알아차리기 어렵다.실행 로그에 오류가 발생한 코드 라인이 명시되기 때문에, 발생 위치는 파악하기 쉬우나 발생 원인은 직접 확인해야 한다. 자바 14버전의 “JEP 358: Helpful NullPointerExceptions” 스펙에서 NPE의 원인을 더 명확하게 확인할 수 있도록 조금이나마 개선되었다. - https://madplay.github.io/post/what-is-null-in-java
- 앞서 살펴본 것처럼 자바에서 null은 참조가 없는 경우를 뜻하는데, null을 참조하는 레퍼런스로 인스턴스 메서드를 호출하는 등의 코드를 수행하는 경우 NPE가 발생한다.
- 예외 상활을 피하기 위해 null 체크 코드를 추가하다 보면 깔끔하게 작성된 코드를 기대하기 어려워진다. 코드의 들여 쓰기가 생기고 코드의 가독성도 떨어질 수 있다.
- null은 자바가 추구하는 단순화의 철학과 맞지 않는다. C 언어를 접해봤다면 꽤 어려움을 주는 포인터라는 개념을 알고 있을 것이다. 반면에 자바 언어는 개발자로부터 모든 포인터를 숨겼다. 바로 null을 제외하고 말이다.
- 물론 ==, != 과 같은 관계 연산자는 사용할 수 있다.
- IndexOutOfBoundsException
- 리스트형 객체에서 선언되지 않은 요소를 get 하는 경우에 발생하게 된다.
- 동일성과 동등성
- 동일성 - 동일하다는 뜻으로 두 개의 객체가 완전히 같은 경우를 의미한다. 같다는 뜻은 두 객체가 사실상 하나의 객체로 봐도 무방하며, 주소 값이 같기 때문에 두 변수가 같은 객체를 가리키게 된다. 동일성은 변수가 동일한지 double equals(==)로 판별할 수 있다.
- 동등성 - 두 개의 객체가 같은 정보를 갖고 있는 경우를 의미한다. 변수가 참조하고 있는 객체의 주소가 서로 다르더라도 내용만 같으면 두 변수는 동등하다고 이야기할 수 있다. 동일하면 동등하지만, 동등하다고 동일하지는 않다.동등한지에 대한 판별은 equals 연산자를 통해 판별할 수 있다.
- 값 객체(Value Object) - 그 값 그 자체를 나타내는 객체
- 객체를 값처럼 쓸 수 있고, 제약사항 중 하나는 객체의 인스턴스 변수가 생성자를 통해서 일단 설정된 후에는 결코 변하지 않음을 보장한다는 것이다.
- 특성
- Immutability(불변성) - 수정자(setter)가 없다.
- value equality(값 동등성) - 내부 값 동등성 검사
- self validation(자가 유효성 검사) - 생성자에서 validate
- File객체는 하드디스크에 존재하는 실제 파일이나 디렉토리가 아니고 그것에 대한 경