[Java] 클래스, 인스턴스, 객체

전우석·2024년 3월 19일

Java

목록 보기
10/24

객체, 클래스, 인스턴스

객체

Object; 클래스에서 정의된 속성을 바탕으로 생성된 복제품

  • 물리적으로 존재하거나, 개념적인 요소 중, 다른 것들과 식별 가능한 요소
  • 객체는 상태(state)와 행동(behavior)을 가진다.
    • Java에서는 이것을 각각 변수(variable), 그리고 메소드(method)로 정의한다.
  • 객체는 클래스에 정의된 속성과 기능을 갖는 실체이다.
  • 객체 지향 프로그래밍에서 객체는 현실 세계의 사물을 모델링하여 프로그램 내에서 사용할 수 있도록 하는 중요한 요소이다.

객체는 상태와 행동을 가지는 소프트웨어 세계에서의 구성 요소이다.
객체는 실세계의 사물이나 개념을 모델링한 것이다.

클래스

Class; 객체를 생성하기 위한 설계도(blueprint)

  • 현실 세계의 개념을 대상으로 하여, 목적에 따라 멤버 변수(속성)와 메소드(행동)를 포함할 수 있다.
  • 클래스는 특정 유형의 객체가 지닐 구조와 행동을 정의한다.
    • 클래스 자체로는 어떤 상태를 갖지 않지만, 클래스를 통해 생성된 객체가 상태를 갖도록 구조와 기능을 정의한다.
  • 예로, ‘자동차’ 클래스는 모든 ‘자동차’ 객체가 공통적으로 가질 속성과 메소드를 정의한다.

클래스 자체는 물리적인 형태가 존재하지 않는다.
클래스는 단지 객체를 생성하기 위한 템플릿으로써 존재한다.

인스턴스

Instance; 클래스의 정의에 기반하여 생성되어 실제로 메모리에 존재하는 객체

  • 객체가 메모리에 할당되어 실제로 사용할 수 있는 상태를 인스턴스라고 한다.
  • 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있다.
  • 각 인스턴스는 클래스가 정의한 구조를 따르지만, 인스턴스 별로 상태가 다를 수 있다.
    • 예로, ‘자동차’ 클래스로부터 생성된 서로 다른 인스턴스 ‘소나타’와, ‘아반떼’는 거의 모든 것이 다르지만, ‘자동차’로써의 기능을 수행한다는 점은 동일하다.(바퀴를 이용해 이동 ..)

인스턴스는 클래스로부터 생성된 실제 객체를 의미한다.
각 인스턴스는 동일한 구조를 공유하지만, 서로 다른 상태를 가질 수 있다.

객체와 클래스, 인스턴스의 관계

클래스의 인스턴스화를 통해 객체가 생성된다.

클래스 ↔ 객체

  • 클래스는 객체를 만들기 위한 설계도이다.
  • 객체는 이 설계도를 바탕으로 생성된 실체이다.

객체 ↔ 인스턴스

  • 객체는 클래스의 인스턴스이다.
  • 객체가 생성되어 실제로 메모리에 할당되어 사용될 때 ‘인스턴스’라는 용어로 사용된다.
  • 객체와 인스턴스는 거의 동의어처럼 사용되지만, 객체는 보다 일반적인 용어로,
    클래스의 인스턴스 뿐만 아니라 모든 구체화된 사례를 의미한다.

클래스 ↔ 인스턴스

  • 클래스에서 새로운 인스턴스를 만드는 행위를 인스턴스화라고 한다.
  • 인스턴스화된 객체는 해당 클래스의 속성과 메소드를 가지며, 클래스에서 정의된 대로 생성되어 메모리 상에 할당된다.

정리하자면, 클래스설계도이고,
객체는 설계도에 따라 만들어진 구체적인 대상이며,
인스턴스는 그 구체적인 대상이 메모리에 할당되어 실제로 사용될 수 있는 상태를 의미한다.

객체의 인스턴스화 과정

(0). 클래스 로딩

  • 우선, 해당 객체의 클래스가 아직 메모리에 로드되지 않았다면, JVM을 통해 클래스가 메모리에 최초로 로드된다.
    • 이 과정에서 클래스에 정의된 모든 정적 변수와 정적 초기화 블록이 처리된다.

1. 메모리 할당

  • 메모리에 클래스가 로드된 상태에서, new 연산자가 호출되면, JVM은 객체를 저장하기 위한 메모리 공간을 힙(Heap) 영역에 할당한다.
  • 힙은 런타임 데이터 영역 중 하나로, 동적으로 할당된 메모리(객체)를 저장하는 데 사용된다.
    또한 Java의 메모리 관리(Garbage Collection)가 자동으로 이루어지는 영역이기도 하다.

2. 인스턴스 변수 초기화

  • 할당된 메모리 공간에는 객체의 인스턴스 변수들이 저장되며, 이 변수들은 해당 클래스에 정의된 초기값이나 기본값으로 초기화된다.

3. 생성자 실행 및 인스턴스 생성

  • 객체의 생성자가 호출되어 실행된다.
  • 생성자는 객체의 초기 상태를 설정하는 데 사용되며, 필요에 따라 매개변수를 통해 다양한 초기화 작업을 수행할 수 있다.

0개의 댓글