파란하늘의 지식창고
반응형
인터넷에 돌아다니는 말장난 중 하나가 있다.
객체지향(object-oriented)과 객체기반(object based)의 차이가 무엇인가요?
라는 질문에 대해
  1. java와 c++은 객체지향이고 javascript는 객체기반이다
  2. object-oriented > delegation-based > instance/prototype-based > object-based 순으로 포괄적인 관계이다.

위와 같은 답변이 달려 있다. (참고1, 참고2)

일부는 맞는 말이고 일부는 틀린 말이다.
위의 내용에서는 답변은 맞지만 질문은 틀렸다.

객체지향 언어의 구현 방법 중 하나가 객체기반이다.

JAVA는 Class를 기반으로 모든 프로그램이 이루어진다.
객체를 생성하기 위해 Class를 사용하여 호출을 한다.
이를 위해서는 2부분이 필요한데 객체를 생성할 대상 Class 부분와 객체를 생성하는 부분이다.

JAVA의 객체 생성 source
public class A {
	String aValue = "aValue is me!";
	void aMethod() {
		System.out.println("aMethod Called");
	}
}
public class B {

	public static void main(String[] args) {
		A a = new A();
		System.out.println(a.aValue);
		a.aMethod();
	}

}


이는 합리적인 프로그래밍이지만 하나의 객체를 만들기 위한 단계가 복잡할 수 있다.
JavaScript는 이를 편하게 하기 위한 방법을 제시해준다.
객체리터럴이라는 녀석이다.

JavaScript의 객체 생성 source
var A = {
	aValue : "aValue is me!"
	, aMethod : function() { document.write("aMethod Called"); }
}
document.write(A.aValue);
A.aMethod();

JAVA에선 객체를 만들 껍데기 Class를 선언하고 그 Class를 이용하여 a라는 이름의 객체를 생성한다.
JavaScript에선 var A로 선언한 순간 A라는 이름의 객체가 생성된다.

선언과 생성을 동시에 처리를 한다는 점에서 JavaScript는 편리하다.

언어의 표현방법이 다를 뿐이지 둘다 객체지향 언어이다.
다만 JavaScript는 생성과 동시에 만들어지는 객체기반의 사용이 가능한 것 뿐이다.
즉, JAVA와 JavaScript의 차이는 객체지향과 객체기반이 아니다.
객체지향 언어의 구현 방법 중 하나가 객체기반이다.

위에서 언급하였듯이 JAVA는 Class를 기반으로 객체를 만든다.
이를 class-based OOP(class 기반 객체지향언어)라고 한다.

JavaScript는 Class를 만들지 않아도 객체가 생성이 된다.
이런 것이 가능한 이유는 prototype이라는 속성때문이다.
따라서 JavaScript는 prototype-based OOP(prototype 기반 객체지향언어)라고 부른다.

JavaScript를 깊이있게 공부하기 위해서는 선행되어야 할 요소가 바로 prototype과 객체, 함수 리터럴에 대한 이해이다.
반응형
profile

파란하늘의 지식창고

@Bluesky_

내용이 유익했다면 광고 배너를 클릭 해주세요