Home /Java/ 클래스, 객체, 인스턴스
Post
Cancel

/Java/ 클래스, 객체, 인스턴스



자바에서는 하나의 클래스로부터: 여러 개의 인스턴스를 생성할 수 있다.
이렇게 생성된 인스턴스는: 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있다.
하지만 해당 클래스의 모든 메소드(method)는: 해당 클래스에서 생성된 모든 인스턴스가 공유하게 된다.


1. 클래스


class

  • 연관되어 있는 변수와 메서드의 집합
  • 객체를 만들어 내기 위한 설계도라 볼 수 있다.


  • 특징
    • 실체가 없다.
    • 객체가 가지는 공통된 속성과 기능을 정의한다.
    • 객체를 생성할 수 있는 생성자를 가진다.
    • 객체를 해제하는 메서드를 가진다. [ 현대 언어에서는 GC가 호출해준다. ]


  • class
    • 필드(field)
      • 객체의 상태를 나타냄
      • 클래스에 포함된 변수(variable)
    • 메소드(method)
      • 객체의 행동을 나타냄
      • 어떠한 특정 작업을 수행하기 위한 명령문의 집합


Java에서의 클래스 = 필드(속성을 표현) + 메소드(기능을 표현)



2. 객체


Object

  • 소프트웨어 세계에 구현할 대상
  • 클래스에 선언된 모양 그대로 생성된 실체
  • 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다.


  • 특징
    • 클래스를 통해 생성할 대상이다.
    • 소프트웨어적인 관점에서 보면 생성자를 통해 구현체가 되지 않았으며 클래스의 타입으로 명시된 상황이다.
    • 메모리에 올라올 구현체를 위한 참조만 가진다.
    • 이해관계자를 위한 현실세계의 문제점을 소프트웨어로 해결하기 위한 매개체이다.



3. 인스턴스


Instance

자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체(object)를 선언해야 한다.
이렇게 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화라고 한다.

  • 설계도인 클래스를 바탕으로 구현된 구체적인 실체/객체
  • 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부른다.
    이때 인스턴스는 힙 영역의 메모리에 할당 된다.
  • 개념적으로 인스턴스는 객체와 같거나 객체에 포함된다고 봐도 틀린말이 아니다.


  • 특징
    • new 연산자를 통해 생성자를 호출해서 메모리에 올라온 객체의 상태를 의미한다.
    • 세부적인 속성값, 유일 값을 지니며 소프트웨어의 생애주기에 참여하여 동작한다.
      (꼭 유일해야 하는 것은 아니다)
    • 객체는 인스턴스보다 더 포괄적인 단계이다.
    • 런타임에 작동하는 객체를 인스턴스라고 말할 수 있다.
    • 객체는 인스턴스의 묶음이라고 볼 수 있다.


✔️ 런타임 컴퓨터 과학에서 컴퓨터 프로그램이 실행되고 있는 동안의 동작


1
2
3
4
5
6
7
8
9
10
/* 객체와 인스턴스 */
public class Main {
public static void main(String[] args) {
Phone Galaxy20, IPhone11; // '객체'

    // 인스턴스화
    Galaxy20 = new Phone(); // Galaxy20은 Phone 클래스의 '인스턴스'(객체를 메모리에 할당)
    IPhone11 = new Phone(); // IPhone11은 Phone 클래스의 '인스턴스'(객체를 메모리에 할당)
  }
}



4. 비교



스크린샷 2023-01-24 오후 11 21 53


4-1. 클래스(Class) VS 객체(Object)

클래스객체
‘설계도’‘설계도로 구현한 모든 대상’


4-2. 객체(Object) VS 인스턴스(Instance)

클래스의 타입으로 선언되었을 때 객체라고 부르고, 그 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부른다.

객체인스턴스
현실 세계에 가깝다.소프트웨어 세계에 가깝다.
‘실체’에 초점인스턴스는 ‘관계’에 초점
‘클래스의 인스턴스’‘방금 인스턴스화하여 레퍼런스를 할당한’ 객체
: 이는 원본(추상적인 개념)으로부터 생성되었다는 것에 의미를 부여하는 것일 뿐
엄격하게 객체와 인스턴스를 나누긴 어렵다.


4-3. 클래스(Class) VS 인스턴스(Instance)

클래스인스턴스
객체를 만들어 내기 위한
설계도
설계도인 클래스를 바탕으로 구현된
구체적인 실체
실체가 없음구체적인 실체



4-4. 클래스(Class) VS 객체(Object) VS 인스턴스(Instance)

객체실세계의 엔티티(Entity)를 대표한다.
인스턴스소프트웨어에서 활동하는 객체의 실재이다.
클래스실세계의 엔티티를 추상화한 속성과 기능을 가지며 객체를 생성하기 위한 생성자를 제공한다.




(참고)



공부한 내용을 여러글과 책 읽은 내용을 바탕으로 정리하고 있습니다.
좋은 글로 저의 공부에 도움을 주시는 분들께 감사드립니다.

This post is licensed under CC BY 4.0 by the author.