1. 인스턴스
- 실제 클래스 기반으로 생성된 인스턴스는 각각 다른 멤버 변수 값을 갖게 된다.
(같은 클래스 기반으로 생성되어도 각 인스턴스는 메모리 내 각각 다른 위치를 차지하기 때문이다.)
- new 키워드를 사용해서 인스턴스 생성 -> 이 때 메모리(동적 메모리, heap)를 할당받는다.
2. 힙 메모리
- 생성된 인스턴스는 동적 메모리(heap)에 할당된다.
- C나 C++에서는 사용한 동적 메모리를 free()나 delete을 이용해서 해제시켜야 하지만,
자바에서는 gabage collector가 주기적으로 사용하지 않는 메모리를 수거해준다.
3. 참조 변수, 참조 값
Student studentLee = new Student();
studentLee.studentName = "홍길동";
System.out.println(studentLee);
// 이렇게 해주면 studentLee가 차지하는 메모리의 주소가 나온다.
// 근데 이건 물리적인 주소는 아니고, jvm이 준 가상 주소.
// 여기서 참조변수는 studentLee
// 멤버변수는 초기화를 해주지 않으면 null로 자동 초기화되지만, 지역변수는 초기화를 꼭 해줘야 한다.
4. 용어 정리
- 객체 : 객체 지향 프로그램의 대상, 생성된 인스턴스
- 클래스 : 객체를 프로그래밍 하기위해 코드로 정의해 놓은 상태
- 인스턴스 : new 키워드를 사용하여 클래스를 메모리에 생성한 상태
ㄴ 간단하게 예시를 들자면,
클래스는 자동차 설계도, 객체는 실제 자동차, 인스턴스는 내 자동차 딱 그 하나라고 생각할 수 있다.
- 참조 변수: 메모리에 생성된 인스턴스를 가리키는 변수
- 참조 값: 생성된 인스턴스의 메모리 주소 값
* 본 게시글은
패스트캠퍼스 "한 번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지"
강의를 참고하여 정리한 내용입니다.
'Java' 카테고리의 다른 글
[Java] 배열 (0) | 2024.07.11 |
---|---|
static 변수 (0) | 2024.07.07 |
[Java] 객체 자신을 가리키는 this (0) | 2024.07.07 |
접근 제어 지시자(access modifier)와 캡슐화 (0) | 2024.07.05 |
생성자(constructor)와 생성자 오버로딩 (0) | 2024.07.05 |