자바에서의 String 타입 String name = "홍길동"; String 객체를 생성할 때 문자열 값인 "홍길동"은 String 객체로 생성되고, name 변수는 생성된 String 객체를 참조한다. String 타입은 클래스 타입으로, 참조 타입이기 때문에 기본 타입과는 달리 힙 영역에 생성되기 때문에 이러한 구조를 가진다. name 변수 자체는 스택 영역에 저장되고, 문자열 리터럴인 "홍길동"은 힙 영역에 String 객체로 생성된다. 그리고 name 변수에 "홍길동"이 담겨있는 String 객체의 주소 값이 저장된다. 문자열 리터럴 자바에서는 문자열 리터럴이 동일하다면 String 객체를 공유한다. String name1 = "홍길동"; String name2 = "홍길동"; 따라서 위와 같은..
NullPointerException NullPointerException은 참조 타입(reference type) 변수를 잘못 사용했을 때 발생한다. 기본 타입(primitive type) 변수는 애초에 null로 초기화가 불가능하므로 기본 타입 변수와 관련해서는 NullPointerException이 일어나지 않는다. 참조 타입 변수가 null 값을 가지는 건 힙 영역의 객체를 참조하지 않는다는 뜻이다. 따라서 참조 타입 변수에 저장된 주소 값이 없는 것일 뿐, 참조 타입 변수는 스택 영역에 생성되긴 한다. 참조 타입 변수를 사용한다는 건 객체를 사용한다는 것을 의미하는데, null 값을 참조 타입 변수에 저장한다는 의미는 참조할 객체가 없다는 의미이다. 따라서 null 값을 가진 참조 타입 변수는 ..
예외 (Exception) 예외는 컴파일 에러와는 다르다. 컴파일 에러는 문법 상의 오류이지만 예외는 문법 상 오류가 아닌 실행 중에 발생되는 오류 상황을 일컫는다. 일반적으로는 예외가 발생하는 경우에 예외 관련 메시지를 출력하고 프로그램을 종료한다. 예외 예시 ArithmeticException 0으로 나누었을 때 발생하는 예외이다. ClassCastException 타입 변환(Casting)은 상위 클래스와 하위 클래스 간 또는 구현 클래스와 인터페이스 간에서 발생한다. 두 클래스가 위와 같은 관계가 아닌 상황에서 타입 변환을 시도하는 경우 발생하는 예외이다. ArrayIndexOutBoundsException 배열 사용 시, 배열 사이즈를 벗어난 인덱스에 접근하는 경우 발생하는 예외이다. Negat..