Post

클래스와 객체, 그리고 인스턴스

클래스(Class) 란?

  • 객체를 만들어 내기 위한 설계도 혹은
  • 연관되어 있는 변수와 메서드의 집합
  • 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성과 행위를 변수와 메소드로 정의한 것이다.


객체(Object) 란?

  • 소프트웨어 세계에 구현할 대상
  • 클래스에 선언된 모양 그대로 생성된 실체
  • 클래스의 인스턴스 라고도 부른다.
  • 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다.
  • oop의 관점에서 클래스의 타입으로 선언되었을 때 객체 라고 부른다.


인스턴스(Instance) 란?

  • 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체
    • 객체를 소프트웨어에 실체화 하면 그것을 인스턴스 라고 부른다.
    • 실체화된 인스턴스는 메모리에 할당된다.
  • 인스턴스는 객체에 포함된다고 볼 수 있다.
  • oop의 관점에서 객체가 메모리에 할당되어 실제 사용될 때 인스턴스 라고 부른다.
  • 인스턴스는 어떤 추상적으로 정의된 원본으로부터 생성된 복제본 을 의미한다.
  • 엄격하게 객체와 인스턴스를 나누기는 어렵다.


예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 클래스
public class Animal {
  .
  .
  .
}

// 객체와 인스턴스
public class Main {
  public static void main(String[] args){
    Animal cat, dog;  // 객체

    // 인스턴스화(객체가 메모리에 할당되어 있는 상태이다.)
    cat = new Animal(); // cat은 Animal 클래스의 인스턴스
    dog = new Animal(); // dog은 Animal 클래스의 인스턴스
  }
}


인스턴스의 메모리 상태

  • 인스턴스가 생성되면 독립된 메모리 공간에 저장되는 자신만의 필드를 가진다.
  • 같은 클래스로부터 생성된 각 인스턴스는 같은 메서드에 대해 공유한다.

클래스, 객체, 인스턴스


누군가가 물어본다면

클래스란 객체(인스턴스)를 만들어 내기 위한 설계도 혹은 틀입니다.

인스턴스란 클래스라는 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체입니다.
oop의 관점에서는 객체가 메모리에 할당되어 실제 사용될 때를 인스턴스라고 부릅니다.
This post is licensed under CC BY 4.0 by the author.