기본 타입
: 정수, 실수, 문자, 논리 리터럴을 저장하는 타입
byte, char, short, int, long, float, double, boolean 변수는 실제 값을 변수 안에 저장
참조 타입
: 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스를 말합니다.
배열, 열거, 클래스, 인터페이스 변수는 메모리의 번지를 변수 안에 저장(번지를 통해 객체를 참조한다)
기본 타입 변수
int age = 25;
double price = 100.5;
참조 타입 변수
String name = "신용권";
String hobby = "독서";
메모리 사용 영역
메소드 영역
: JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역
클래스 별로 정적 필드와 상수, 메소드 코드, 생성자 코드등을 분류해서 저장한다.
힙 영역
객체와 배열이 생성되는 영역
생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조
JVM 스택 영역
메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거하는 동작을 수행
프레임 내부에는 로컬 변수 스택이 있는데, 기본 타입 변수와 참조 타입 변수가 추가되거나 제거 된다.
스택 영역에 변수가 생성되는 시점은 초기화가 될 때, 즉 최초로 변수에 값이 저장될 때이다.
변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거됩니다.
기본 타입 변수는 스택 영역에 직접 값을 가지고 있지만, 참조 타입 변수는 스택 영역에 힙 영역의 객 체 주소를 가진다.
int[] scores = {10, 20, 30};
참조 변수의 ==, != 연산
참조 타입 변수의 값은 힙 영역의 객체 주소이므로 ==, != 연산은 결국 번지 값을 비교하는 것이 됩니다. 동일한 번지 값을 갖고 있다는 것은 동일한 객 체를 참조한다는 의미입니다. 따라서 동일한 객체를 참조하고 있을 경우 == 연산의 결과는 true이고 != 연산의 결과는 false입니다.
null 과 NullPointerException
참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null(널) 값을 가질 수 있습니다. null 값도 초기값으로 사용할 수 있기 때문에 null로 초기화된 참조 변수는 스택 영역에 생성됩니다.
참조 변수를 사용하면서 가장 많이 발생하는 예외(예외란, 자바를 실행하는 도중 발생하는 오류) 중 하나로 NullPointerException0! 있습니다. 이 예외는 참조 타입 변수를 잘못 사용하면 발생 한다.
int[] intArray = null;
intArray[0] = 10;
String 타입
문자열은 String 객체로 생성되고 변수는 String 객체를 참조한다.
name 변수와 hobby 변수는 스택 영역에 생성되고, 문자열 리터럴인 “신용권”과 “자바”는 힙 영역에 String 객체 로 생성된다. 그리고 name 변수와hobby 변수에는 String 객체의 번지 값이 저장된다.
new 연산자 (= 객체 생성 연산자)
힙 영역에 새로운 객체를 만들 때 사용하는 연산자
String name1 = new String("신용권");
String name2 = new String("신용권"); // name1과 name2는 서로 다른 String 객체 참조
equals() 메소드
동일한 String 객체이건 다른 String 객체이건 상관없이 내부 문자열을 비교하고 싶을 때에 사용
equalsO 메소드는 원본 문자열과 매개값으로 주어진 비교 문자열이 동일한지 비교한 후 true 또는 false를 리턴한다.
boolean result = str.equals(str2);
► 확인 문제
1. 참조 타입에 대한 설명입니다. 맞는 것에 O표, 틀린 것에 X표 하세요.
① 참조 타입에는 배열, 열거, 클래스, 인터페이스가 있다. (O )
② 참조 변수의 메모리 생성 위치는 스택이다. ( O)
© 참조 타입에서 ==, != 연산자는 객체 번지를 비교한다. (O )
④ 참조 변수는 null 값으로 초기화할 수 없다. ( X)
-> 참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null값 가질 수 있다.
2. 자바에서 메모리 사용에 대한 설명 중 맞는 것에 o표, 틀린 것에 x표 하세요.
① 로컬 변수는 스택 영역에 생성되며 실행 블록이 끝나면 소멸된다. ( O)
② 상수, 메소드 코드, 생성자 코드는 메소드 영역에 생성된다. (O )
© 참조되지 않는 객체는 프로그램에서 직접 소멸 코드를 작성하는 것이 좋다. (X )
④ 배열 및 객체는 힙 영역에 생성된다. ( O)
-> JVM은 쓰레기 수집기를 실행시켜 참조되지 않는 객체를 자동으로 제거한다.
3. String 타입에 대한 설명 중 맞는 것에 O표, 틀린 것에 X표 하세요.
① String은 클래스이므로 참조 타입이다. (O )
@ String의 문자열 비교는 ==를 사용해야 한다. (X )
® 동일한 문자열 리터럴을 저장하는 변수는 동일한 String 객체를 참조한다. ( O)
④ new StringC문자열”)은 무조건 새로운 String 객체를 생성한다. ( O)
-> equals()메소드 사용
4. 참조 변수에 대한 설명입니다. 맞는 것에 o표, 틀린 것에 x표 하세요.
① 참조 변수에 저장되는 것은 객체의 번지이다. ( O)
② 참조 변수에 null을 저장해서 변수를 초기화시킬 수 있다. ( O)
③ 참조 변수에 null이 저장된 상태에서는 객체를 사용할 수 없다. ( O)
④ NullPointerException은 초기화되지 않은 참조 변수에서 발생한다. ( X )
5. 다음 코드를 보고 비교 연산식과 메소드의 실행결과를 빈 칸에 기술하세요.
® varl == var2 ( T)
② varl != var2 ( F)
® var3 == var4 ( T)
④ var3 != var5 ( T)
⑤ var4.equals(var5) ( T)
'JAVA' 카테고리의 다른 글
생성자 (0) | 2022.10.12 |
---|---|
열거 타입 (0) | 2022.09.26 |
배열 (0) | 2022.09.26 |
반복문 (1) | 2022.09.26 |
조건문 (0) | 2022.09.26 |