Frontend/JavaScript

클래스, 객체, 인스턴스

findmypiece 2021. 3. 9. 16:41
728x90

객체는 뭐고 객체는 뭐고 인스턴스는 뭔가? 그리고 클래스는 또 뭘까?

흔히들 클래스를 객체화한다거나 클래스를 인스턴스화 한다는 표현을 사용한다.

 

클래스는 말그대로 프로그래밍상 정의되어 있는 데이터와 메소드의 집합을 의미한다.

해당 코드 자체가 클래스가 된다.

이것을 사용하기 위해서는 객체화 또는 인스턴스화 작업이 필요하다.

자바도 그렇고 자바스크립트도 그렇고 new 지시어를 통한 작업이 바로 그것이다.

 

여기에서 객체란 인스턴스화를 위해 리턴된 값을 의미하고

인스턴스란 이를 통해 생성된 결과물을 의미한다.

 

아래 코드를 보자.

function Test(){
	this.name = '인스턴스';
	return {
		name: '객체',
		getInstance: () => {
			console.log(this.name);
		},
		getObject: function(){
			console.log(this.name);
		}
	}
}

var test = new Test();

test.getInstance();	//인스턴스
test.getObject();	//객체

위에서 Test 코드 자체가 클래스이고

그곳에서 리턴되는 객체리터럴이 객체이고

new 연산자를 통해 최종적으로 test 변수에 담기는 것이 인스턴스이다.

 

화살표 함수의 경우 this가 인스턴스를 참조하기 때문에 콘솔에 "인스턴스"가 출력되는 것을 볼 수 있고

기존 함수표현식의 경우 this가 객체를 참조하기 때문에 "객체"가 출력되는 것을 볼 수 있다.

 

이는 자바스크립트를 예로 들었지만 자바의 경우도 이와 같은 의미로 해석하면 된다.

즉, 클래스를 통해 new로 인스턴스화 하면 기존에 클래스의 자원들을 사용할 수 있는데

여기까지를 객체라고 하고 그 외에 인스턴스화 과정에서 자동으로 추가되는

.hashCode() .equals() 같은 메소드까지 보면 인스턴스라고 할 수 있다.

728x90

'Frontend > JavaScript' 카테고리의 다른 글

ES6 object-shorthand 문법  (0) 2021.03.10
ES6 비구조화 할당 문법  (0) 2021.03.10
클로저  (0) 2021.03.09
script 태그 async, defer 옵션  (0) 2021.03.04
콜백함수와 비동기처리  (0) 2021.03.04