반응형
객체, 인스턴스의 개념을 이해하기 위해 정리하는 내용입니다.
클래스 (Class)
개념
- 객체를 만드는 설계도 또는 틀
/* 클래스 */
public class Car {
...
}
객체 (Object)
개념
- 소프트웨어 세계에 구현할 대상
- 클래스에 선언된 모양 그대로 생성된 실체
- 설계도(클래스)에서 만들어낸 제품(?)
특징
- 모든 레퍼런스 타입을 객체라고 부르기도 한다.
- 객체는 모든 인스턴스를 포괄하는 의미를 갖는다.
- OOP 관점에서 클래스 타입으로 선언되었을 때 객체라고 부른다.
public class Main {
public static void main(String[] args) {
Car santafe, tucson; // 객체
}
}
인스턴스 (Instance)
개념
- 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체
특징
- 인스턴스는 객체에 포함 된다.
- 객체를 실체화 하면 그것을 그 클래스의 인스턴스 라고 부른다.
- 실체화된 인스턴스는 메모리에 할당된다.
public class Main {
public static void main(String[] args) {
Car santafe, tucson;
/* 인스턴스화 (객체를 메모리에 할당) */
santafe = new Car(); // santafe는 Car 클래스의 인스턴스이다.
tucson = new Car(); // tucson은 Car 클래스의 인스턴스이다.
}
}
까먹고 다시 돌아올 나에게 구구 절절 설명
예를 들어, 자동차의 종류는 싼타페, 투싼 (그 외 여러가지) 등등 모델들이 존재합니다. 싼타페 , 투싼을 보고 우리는 자동차라고 부릅니다.
여기서 싼타페, 투싼을 객체라고 표현합니다.
객체(싼타페, 투싼 등)들의 공통된 상태 정보와 행동에 대해 정의해 놓은 것이 클래스입니다.
즉, 자동차를 클래스라고 합니다.
public class Main {
public static void main(String[] args){
Car santafe; // 객체 (메모리에 할당 전. 즉, 실체화 전)
Car tucson; // 객체 (메모리에 할당 전. 즉, 실체화 전)
/* 인스턴스화 (실체화) */
santafe = new Car(); // santafe는 Car클래스의 인스턴스라 한다.
tucson = new Car(); // tucson은 Car클래스의 인스턴스라 한다.
}
}
예제 코드에서 santafe, tucson은 선언만 하고, 아직 new 연산자를 통해 실체화 하기 전 상태이므로 객체 라고 표현하고,
new 연산자로 실체화를 하는 순간 메모리에 할당 되고, santafe, tucson는 'Car 클래스의 인스턴스다' 라고도 할 수 있는 것입니다.
이 둘의 차이점을 정확하게 이해 하자!
REFERENCES
codevang.tistory.com/83?category=827598
docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html
gmlwjd9405.github.io/2018/09/17/class-object-instance.html
dbnsecu.tistory.com/8
slow-and-steady-wins-the-race.tistory.com/69
반응형