반응형
1) 기본 타입과 참조 타입
- 참조 타입(reference type): 번지를 통해 객체(object)를 참조하는 타입 [배열/열거/클래스/인터페이스]
-> 실제 값을 변수 안에 저장하는 기본 타입[byte/char/short/int/long/float/double/boolean]과 다르게,
메모리의 번지를 변수 안에 저장
2) JVM에서의 메모리 영역(Runtime Data Area/운영체제에서 할당받음)
(1) 메서드 영역(Method Area)
- JVM이 시작할 때 생성되며, 모든 스레드가 공유하는 영역
- 코드에서 사용하는 클래스(.class)들을 클래스 로더로 읽어,
클래스별로 정적 필드(static field)/상수(constant)/메서드 코드, 생성자(constructor) 코드 등을 분류하여 저장
(2) 힙 영역(Heap Area)
- 객체와 배열이 생성되는 영역
-> 생성된 객체와 배열은, JVM 스택 영역의 변수나 다른 객체의 필드에서 참조
=> 참조하는 변수나 필드가 없다면, JVM이 가비지 콜렉터(Garbage Collecter)를 실행하여 객체와 배열을 자동으로 제거
(3) JVM 스택(Stack) 영역
- 메서드를 호출할 때마다 프레임(frame)을 추가(push)하고, 메서드 종료 시 해당 프레임 제거(pop)
-> 프레임 내부의 로컬 변수 스택에서, 기본/참조 타입 변수가 추가/제거됨 (스택 영역 변수 생성 시점은 변수 초기화 시점) - 코드 예시
- 1. 스택 영역에 v1='A'가 저장됨
- 2. v1='A'위에 v2=100, v3=3.14가 차례대로 저장됨
- 3. v2와 v3이 소멸되고, v1='A'위에 v4=true가 저장됨
// 1.
char v1 = 'A';
// 2.
if (v1 == 'A') {
int v2 = 100;
double v3 = 3.14;
}
// 3.
boolean v4 = true;
3) 참조 변수의 ==, != 연산
- 변수의 값이 같은지를 조사하는 게 아닌, 동일한 객체를 참조하는지 조사할 때 사용
- 동일한 객체를 참조하면 ==연산은 true, != 연산은 false 반환
- 코드 예시
4) null과 NullPointerException
- 참조 변수는 힙 영역 객체를 참조하지 않는다는 뜻으로 null 값을 가질 수 있으며, 이는 초기값으로도 사용 가능
- 참조 변수의 값이 null일 경우(참조 변수=null로 정의), '참조 변수 == null' 연산 시 true반환
- 코드 예시
5) String 타입
- 문자열을 String 변수에 저장한다는 표현은 잘못된 표현
-> 문자열은 String 객체로 생성되고 변수는 String 객체를 참조하기 때문 - 따라서 String 객체 내부의 문자열을 비교하려면, ==나 != 연산자가 아니라 .equals() 메서드 사용
- .equals() 메서드 사용 예시[String 타입의 str1과 str2 비교]: str1.equals(str2)
반응형
'자바(JAVA) > 미니 프로젝트 & 기초 공부' 카테고리의 다른 글
Java 기초 또 다시 공부하기 8일차 - 객체 지향 프로그래밍(객체의 특징, 객체 간의 관계, 클래스와 인스턴스 (0) | 2025.06.04 |
---|---|
Java 기초 또 다시 공부하기 7일차 - 배열, 열거 타입 (2) | 2025.06.02 |
Java 기초 또 다시 공부하기 5일차 - 반복문(for문, while/do-while문, break/continue) (1) | 2025.05.23 |
Java 기초 또 다시 공부하기 4일차 - 연산자와 연산식, 조건문 (3) | 2025.05.22 |
Java 기초 또 다시 공부하기 3일차 - 변수 타입 변환, 변수와 시스템 입출력 (2) | 2025.05.20 |