isEmpty 와 null

정지원·2022년 5월 17일
1

null

"어떠한 값으로도 초기화 되지 않은 상태"

  • 아무것도 없는 것을 나타내는 자바의 Keyword
  • 참조형 타입의 기본값

null 은 참조형 타입의 기본값이다.(초기값)
null 은 참조형 타입에서만 사용할 수 있다. 기본형 타입의 변수에 할당하게 될 경우 컴파일 오류가 발생한다.

참조변수가 지역변수로 선언된 경우 선언과 동시에 초기화 되어야 하기때문에 , 따로 초기화를 해주지 않는다면 기본값인 null 값으로 초기화 한다.

null 과 "" 빈값의 차이해

null 은 선언만 되어있고 초기화가 되어있지 않은 상태이다. 그래서 힙 메모리상 데이터가 존재하지 않는다.
하지만 빈값은 빈값이라는 데이터로 초기화가 되어있는 상태이다. 힙메모리상 빈값이 들어가 있을 것이고 스택 메모리에 빈값이 들어있는 메모리 주소가 들어 있을 것이다.

null 을 참조할 경우

우리는 객체를 참조할 때, 스택에 있는 지역변수(참조변수) 에 값으로 있는 메모리주소를 통해 객체를 참조한다.
하지만 참조변수인 지역변수에 null 값이 들어가있고 참조변수를 참조 하려고 할 경우 , 우리는 NullPointerException을 마주치게 된다.

isEmpty

사진을 보면 isEmpty 메서드는 객체의 length 가 0인지 아닌지를 판별하는 메서드이다.
즉 String 에서는 "" 이러한 빈문자열 , 리스트에서 리스트 안에 값이 존재하는지 없는지 등을 판별할때 사용 할 수 있다.

public class IsEmptyEx {
    public static void main(String[] args) {
        String a = new String();
        System.out.println(a.isEmpty());
        HashMap<String, String> dic = new HashMap<>();
        dic.put("baby", "아기");
        dic.put("love", "사랑");
        dic.put("apple", "사과");
        Set<String> keys = dic.keySet();
        Iterator<String> iter = keys.iterator();
        while (iter.hasNext()) {
        String key = iter.next();
        String value = dic.get(key);
        System.out.println("key : "+ key + ", value : " + value);
        }
        System.out.println();

        Scanner scanner = new Scanner(System.in);
        while (true) {
        System.out.print("찾고 싶은 단어는? (종료 -> exit) ");
        String eng = scanner.next();
        if(eng.equals("exit")){
        System.out.println("단어 찾기 종료");
        break;
        }
        String kor = dic.get(eng);
        if(kor.isEmpty()){
            System.out.println("입력 값 " + kor);
            System.out.println(eng + " 는 없는 단어 입니다.");
        } else System.out.println(kor);
        }


    }
}

내가 이 주제로 글을 정리하게 된 이유 이다.

마지막 조건문에서 if(kor == null) 으로 했다가 아 null 값을 직접 다루는 것은 좋지 않은 코드잖아.

라고 생각해서 isEmpty 를 썼다가 NullPointerException 이 터졌다.

isEmpty 와 null 은 엄연히 다르다는 것을 깨달으며 글을 마무리 짓는다.

profile
지속적인 발전, 태도

0개의 댓글