본문 바로가기

기술면접대비

[JAVA] 클래스/객체/인스턴스

클래스(Class)란?

(1) 객체를 만들어 내기 위한 설계도 혹은 틀

(2) 연관되어 있는 변수와 메서드의 집합

 

객체(Object)란?

(1) 소프트웨어 세계에 구현할 대상

(2) 클래스에 선언된 모양 그대로 생성된 실체

(3) '클래스의 인스턴스'라고도 부름

(4) 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다

(5) OOP(객체 지향 프로그래밍)의 관점에서 클래스의 타입으로 선언되었을 때 '객체'라고 부른다.

 

인스턴스(Instance)란?

(1) 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체

     => 즉, 객체를 소프트웨어에 실체화하면 그것을 '인스턴스'라고 부른다.

(2) 실체화된 인스턴스는 메모리에 할당된다.

(3) 인스턴스는 객체에 포함된다고 볼 수 있다.

(4) OOP(객체 지향 프로그래밍)의 관점에서 객체가 메모리에 할당되어 실제 사용될 때 '인스턴스'라고 부른다.

(5) 추상적인 개념(또는 명세)과 구체적인 객체 사이의 관계에 초점을 맞출 경우에 사용한다.

     => '~의 인스턴스'의 형태로 사용된다

     =>객체는 클래스의 인스턴스다.

     => 객체 간의 링크는 클래스 간의 연관 관계의 인스턴스다.

     => 실행 프로세스는 프로그램의 인스턴스다.

     => 즉, 인스턴스라는 용어는 반드시 클래스와 객체 사이의 관계로 한정지어서 사용할 필요는 없다.

     => 인스턴스는 어떤 원본 (추상적인 개념) 으로부터 '생성된 복제본'을 의미한다.

 

클래스, 객체, 인스턴스의 차이

(1) 클래스(Class) VS 객체(Object)

- 클래스는 '설계도', 객체는 '설계도로 구현한 모든 대상'을 의미

 

(2) 객체(Object) VS 인스턴스(Instance)

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

- 객체는 현실 세계에 가깝고, 인스턴스는 소프트웨어 세계에 가깝다.

- 객체는 '실체', 인스턴스는 '관계'에 초점을 맞춘다.

   => 객체를 '클래스의 인스턴스'라고도 부른다.

 

※ 인스턴스화하여 레퍼런스를 할당한 객체를 인스턴스라고 말하지만, 이는 원본(추상적인 개념)으로부터 생성되었다는 것에 의미를 부여하는 것일 뿐 엄격하게 객체와 인스턴스를 나누긴 어렵다.

 

 

예시

객체는 현실 세계의 대상 

현실 세계에서는 자동차의 종류는 티코, 모닝, 소나타, 포니 등과 같은 실체들이 있다

티코, 모닝, 마티즈를 큰 개념으로 자동차라고 한다.

객체(티코,모닝,마티즈) 들은 공통적으로 가질 수 있는 상태 정보와 행동에 대해 정의해 놓은 것을

클래스(자동차) 라고한다!

아래 소스코드를 보면 tico, morning, matiz, pony를 객체라고 부르고

tico, morning, matiz, pony는 Car 클래스의 인스턴스라고 부른다.

tico, morning, matiz, pony는 Car 클래스를 실체화 한것이다

 

 

소스코드

package 개념;

class Car {
	//...
}

public class Main {

	public static void main(String[] args) {
		// 1. 객체를 선언, 어떠한 메모리도 차지하지 않았다
		// 객체는 선언!
		Car tico;  
		
		// 2. 클래스의 인스턴스를 만들었고 메모리가 객체에 의해 차지되었다
		Car matiz = new Car();
		
		// 3. sonata, moring, pony는 객체
		Car sonata, morning, pony;
		
		// 4. tico, mornig, pony는 Car클래스의 인스턴스
		tico = new Car();
		morning = new Car();
		pony = new Car();
		
	}

}

 

 

 

 

 

 

참고
https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html
https://dbnsecu.tistory.com/8#recentEntries