Java는 클래스 기반 객체지향 언어(class-based object-oriented language)로, 객체지향을 지원한다.
객체지향 언어인 Java를 공부하기 위해서는 (1)클래스, (2)인스턴스, (3)레퍼런스의 개념에 대해 정리할 필요가 있다고 생각해 이번 글을 작성한다.
1. 클래스 (Class)
클래스는 객체를 생성하기 위한 설계도(템플릿)이다.
흔히 붕어빵(객체)을 만들기 위한 붕어빵 틀(Class)이라고 비유한다.
객체가 가지는 속성(필드)과 동작(메서드)으로 구성된다.
- Class : 붕어빵 틀
2. 인스턴스 (Instance) or 객체 (Object)
클래스에 정의된 내용을 바탕으로 생성된 실제 객체로, 메모리 영역 중 힙(Heap) 영역에 새로운 인스턴스(객체)를 생성한다.
인스턴스와 객체의 차이는 다음과 같다.
- Object: 붕어빵 틀에서 만들어진 하나의 붕어빵
- Instance : 붕어빵 틀 중 어느 틀에서 만들어진 붕어빵인지 구분하기 위한 것
- ex) 붕어빵 틀1 에서 만들어진 붕어빵 1은 붕어빵 틀 1의 Instance.
3. 레퍼런스 (Reference)
메모리상에 생성된 인스턴스를 가리키는데 사용되는 변수다.
생성된 인스턴스와의 연결을 통해 속성과 메서드에 접근할 수 있다.
레퍼런스는 객체를 직접 포함하지 않고 메모리 주소를 저장한다.
정리
클래스(Class)를 사용하기 위해서는 반드시 메모리에 인스턴스(Instance)를 생성해야하는데, 레퍼런스(Reference) 변수는 메모리상에 생성된 인스턴스를 가리키는데 사용되는 변수다.
레퍼런스(Reference) 변수를 통해 힙(Heap) 영역에 생성된 객체(Object)에 접근할 수 있으며, 이를 통해 인스턴스의 멤버 변수와 메서드를 호출할 수 있습니다.
예:
- 레퍼런스변수.멤버변수
- 레퍼런스변수.메서드()
예시
예시를 통해서 실제 Java 코드에서 객체를 어떻게 생성하는지 알아보겠다.
레퍼런스 타입
- 레퍼런스 타입은 객체의 주소를 저장하는 타입이며, 기본형(Primitive Data Type)을 제외한 나머지 타입을 뜻한다.
- 해당 데이터 타입에 대해서는 다음번에 기본 타입과 참조 타입을 정리하면서 적을 예정이다.
레퍼런스 변수
- 메모리 Heap영역에 생성된 인스턴스의 주소값을 저장하는 변수
new 연산자
- 인스턴스(객체)를 생성해주는 역할
- 메모리(Heap 영역)에 데이터를 저장할 공간을 할당 받고, 그 공간의 주소값을 객체에게 반환하여 주고 이어서 생성자를 호출한다.
생성자
- new 연산자와 같이 사용되어 클래스로부터 인스턴트가 생성될 때 호출되는 객체의 초기화를 담당하는 메서드
- 여기서 '인스턴스 초기화'란 인스턴스 변수들을 초기화 하는 것을 뜻한다.
- Class 생성자가 정의되지 않은 경우 컴파일러가 기본 생성자를 추가한다.
- 생성자의 조건
- 생성자의 이름은 클래스의 이름과 같아야한다.
- 생성자는 리턴 값이 없다.
인스턴스 생성 과정
- 연산자 new에 의해서 메모리(heap 영역)에 책장 Class Instance가 생성된다.
- 생성자 책장()가 호출되어 인스턴스 초기화가 수행된다.
- 연산자 new의 결과로, 생성된 책장 Class 인스턴스의 주소가 반환되어 참조변수 c1에 저장된다.
여기서 중요한 사실은 객체를 메모리 힙(Heap) 영역에 할당하는 역할은 생성자가 아니라 new 연산자의 역할이다.
'Java' 카테고리의 다른 글
[Java] 상속과 다형성 + (메소드 오버라이딩) (2) | 2024.12.06 |
---|---|
[Java] Static 변수 & 메서드 (0) | 2024.11.28 |
[Java] 데이터 타입 - 기본형 타입, 참조형 타입 (0) | 2024.11.27 |
[Java] Maven이란? (0) | 2024.11.26 |
[Java] JVM, JRE, JDK에 대해 알아보자! (0) | 2024.11.25 |