자바 기본
14 Oct 2019 | JavaJAVA 프로그래밍 면접 이렇게 준비한다 - 한빛미디어를 학습하며 공부한 것을 정리한 내용입니다.
소개
-
원시 타입
-
객체란 무엇인가?
-
final 키워드의 역활
- 원시 타입
- Boolean, int, double 같은 각각의 기본 타입은 원시 타입이라고 알려져 있다.
JVM은 이들을 객체라고 알려진 참조 타입과는 다른 방식으로 다룬다.
원시타입들은 항상 값이 있는 상태, 즉 Null이 될 수 없기 때문이다.
- 객체란 무엇인가?
- 상태와 행위의 모음. 원시 타입을 제외하면 자바에서 모든 변수들은 참조 타입이다. 객체는 여러 가지 의미에서 원시 타입과 다르며 가장 중요한 차이점은 빈 객체를 의미하는 표현인 null이 존재한다는 것이다. 즉, 변수들은 null로 설정될 수 있으며 메서드 또한 null을 반환할 수 있다. 그러나 Null 참조에 대한 메서드를 호출할 수는 없다. 호출하려고 하면 NullPointerException이 발생한다.
객체가 ‘참조 타입이다’라는 말이 정확히 무슨 의미인지 살펴보자.
/* 원시 타입 */
int i = 42; // 변수 i에 42라는 값이 할당된다.
int j = i; // 변수 j에 i와 같은 42라는 값을 할당한다.
j = 50; // j의 값을 50으로 변경
System.out.println(i); // 42
System.out.println(j); // 50
/* 참조 타입 */
List<Integer> list = new ArrayList(); // ArrayList를 생성하고 주소값을 list에 할당한다.
list.add(1);
List<Integer> list2 = list; // list2에 ArrayList의 주소값을 할당한다.
list2.add(2);
System.out.println(list.size()); // list와 list2는 같은 주소값을 가지므로 list.size()의 반환 값은 2이다.
- final 키워드의 역활
- 변수를 선언하고 값을 할당하고 나면 메모리 위치가 변경되지 않는다.
객체에 선언하는 final 키워드는 원시 타입에 선언하는 final 키워드와 동일한 역활을 한다.
단, 객체 내부의 값들은 개별 값들이 final이 아니라면 변경할 수 있다.
final int num = 1;
num = 2; // 컴파일 에러. 할당이 되고 난 뒤에는 변경이 불가능하다.
final List<Integer> list = new ArrayList<>();
list = new ArrayList<>(); // // 컴파일 에러. 할당이 되고 난 뒤에는 변경이 불가능하다.