'instanceof'에 해당되는 글 1건

  1. 2007.12.09 Javascript 클래스 인스턴스 - OOP 다지기
간단한 목표가 생겼습니다.

완벽한 OOP라고는 하지 않지만 웹 상에서 구현할 수 있는 가장 필요한 OOP라고 하겠습니다.
어느 이론이나 개념은 늘 발전하고 개혁될 수 있습니다.

1+1 = 2 라는 불변의 진리라 하겠지만 그 쓰임과 상황에 따라 충분히 달라질 수 있다는 것은
물방울 1개와 물방울 1개가 합쳐지면 큰 물방울 하나라는 이치와 같습니다.

Javascript 가 진정한 OOL이다 아니라가 아니라.
다른 어떤 언어들과 비교했을 때 OOL라 하기엔 Javascript의 OOL을 다소 부족하거나 개념이 틀린 부분이
충분히 있을 수 있습니다.

하지만 흔히 말하는 OO에 아무런 지장없이 잘 활용할 수 있다 라는 것을 증명해 보고 싶습니다.

1. Class

이전 클래스 생성에 대해서도 이야기를 했었지만.. 이번에는 간단하게 좀더 고급스럽게 Class를 구현을 해보도록 하겠습니다.

위의 소스는 매우 간단한 예제입니다. 그냥 얼핏 보기에는 단지 클래스라기 보다는 Foo라는 함수(function)에 가까워보입니다.

하지만 자세히 보면 this.name 이라는 맴버 property를 갖는 것을 알 수 있습니다.



이렇게 new Operator을 통해서 맴버 property에 접근하거나 맴버 method를 호출합니다.
foo는 Foo의 인스턴스로 foo와 function Foo()의 내부의 this가 같는 constructor 는 같아 foo.name 이나
this.name 은 같습니다.

이는 맴버를 접근 방식이 외부의 접근이냐 내부의 접근이냐에 따라서 foo나 this로 바뀝니다.

하지만 이를 함수(function)로 오인하게 되면 결과는 예상밖의 결과가 나올 수 있습니다.



이거 하나 가지고 뭐가 얼마나 문제가 될까도 싶지만 커뮤니케이션을 잘 하지 않는 개발자들 간에
이거 하나를 문서화하는 개발자도 없고 말그대로 커뮤니케이션 하는 일도 없습니다.
있다 하더라도 나중에 개발시 사용하게 되면 그때 소스를 한번 들여다 보게 될것입니다.

아니면 새롭게 자신이 기능을 추가하겠죠.

이럴때는 분명 문제가 됩니다. ^-^ 사소한거라 생각하지 마세요..

위의 문제를 모두 해결할 수 있는 코드를 만든다면 어떻게 될까요??



이렇게 하면 무조건 인스턴스를 생성하겠네요.

instanceof 연산자는 아시겠지만.

object instanceof class 하게 되면 object 가 class 의 인스턴스인지를 boolean 값으로 반환해 줍니다.
위를 예로 든다면

if( this instanceof Foo )
Foo를 function 기능으로 접근했다면 this 는 window가 됩니다.
하지만
new Foo() 를 통해서 접근했다면 this는 Foo의 인스턴스입니다.



사실 이렇게까지 해야되는 것은 예외처리에 해당하거나 아주 자주 사용하거나 접근하게 되는 함수나 클래스에
해당합니다.


자 위에서 본 내용을 바탕으로 간단한 클래스를 만들어 보겠습니다.
Prototype.js 에 있는 Class오브젝트의 creat 메서드를 다른 방식으로 함수를 만들어 보겠습니다.



하게 되면 new Operator 을 통해서 인스턴스를 생성하나 그냥 함수처름 호출을 해서 사용하나 클래스의 인스턴스가 생성되게 됩니다.
신고
Posted by Rhio.kim