• 카테고리
    • 전체 글

    • 카테고리1
    • 카테고리2
    • 카테고리3
    • 카테고리4
  • 태그
  • 방명록

'객체지향'에 해당되는 글 2건

  • 2009.12.11 내 미투데이에서 배달 온 글입니다.
  • 2008.10.17 자바 스크립트 클래스와 인스턴스 만들기 1

내 미투데이에서 배달 온 글입니다.

잡글/MeToday 2009. 12. 11. 04:33
  • 피곤하다(히키코모리 모드 발동 일보직전) 2009-11-18 17:08:30
  • 2년. 이 바닥에서 발 떼고 있다가, 다시 시작하려면, 분명 다른 세상이 날 맞이 할 것 같은 두려움(IT 바닥은 무섭게 변한다 변확에 견디지 못하는 그 순간 부터 게임은 끝이 날 것 같다) 2009-11-18 17:11:08
  • 毒說은 강렬한 愛着이 있어야 完成된다. 2009-12-03 13:34:35
  • 미라지 포멧완료. 각종 정보 정리의 일환(me2dayzm) 2009-12-03 13:44:31
  • 어느샌가 메신저는 네이트온이 되버렸다.(me2dayzm 난 마이너 다시 MSN 사용) 2009-12-03 16:35:06
  • 오늘은 왠지 잠들기가 힘들다(me2dayzm) 2009-12-04 04:14:51
  • 객체지향의 길이 이렇게 계속될 줄은 꿈도 못꾸었다(me2dayzm 새삼스래 객체지향 프로그래밍을 보는 중) 2009-12-04 09:31:51
  • 한국 구글. 포탈에 굴복하다. 된장(me2dayzm 구글 첫화면 지못미) 2009-12-04 09:54:28
  • 새벽의 목욕탕은 깔끔하다(me2dayzm 말끔한 기분에) 2009-12-05 11:26:59
  • ㅇㅇ?(me2dayzm) 2009-12-05 11:40:16
  • 천체전사 썬레드. 전대물 냄새 물씬나겠지만…(me2dayzm 천체전사 선레드 양아치 영웅) 2009-12-05 13:40:59
  • 오늘은 맑음(me2dayzm 눈이 시리도록 파랗다) 2009-12-06 13:57:48
  • 언제나 똑같은 일상을 보내는것이 무척어려운 일이 되었다(me2dayzm) 2009-12-07 12:26:01
  • 미치도록 빠지고 허우적대며 죽어라 하고 싶은 일이 무엇인지, 이젠 잘 모르겠다.(니가 진짜로 원하는게 뭐야? 라는 질문에) 2009-12-07 12:31:35
  • 언제부터인가 계획했던 것과 정반대의 진행을 하고 있는 자신을 항상 발견하곤 한다. 2009-12-07 12:34:06
  • 영문 기사(A4지 반?)하나에 모르는 단어가 50여개(영어공부 절실하다 이젠 기사를 봐도 뭔말인지 모르겠다) 2009-12-07 12:36:22
  • 안드로이드 내년 2월. LGT 일까? KTF일까? 설마… SKT는 아니겠지?(Java 기반 핸드폰 하나 세워야 될때가 온건가) 2009-12-08 09:02:22
  • 순간 힘, 속도, 재치는 나무랄데가 없는데… 지구력이 문제다(me2dayzm) 2009-12-08 09:25:12
  • 잃어버린 사진 보상. 네이버 뮤직 6개월 이용권 / 미투토큰 1,000 / 플리커 프로계정 1년 이용권(만박형 고생이 너무 많으십니다 플리커 공유 사진 유실) 2009-12-08 12:37:16
  • 형님 잘 받았습니다. 고맙습니다~
    미투데이 사진 유실 관련한 최종 이메일 받으신 분들 댓글 달아주세요. 소환이 계속 와서 쫌 괴롭. by 만박 에 남긴 글 2009-12-08 12:39:43
  • 인스턴스 커피를 블랙으로 옅게 타면 “즉석! 아메리카노!!!”(눈도 오고 춥고 내려가기 싫다) 2009-12-08 13:00:16
  • 콘솔 2줄짜리!!!!
    에궁… 학교에서도 안해본 콘솔프로그램을 작성하려니 미치겠네… 그것도 2줄짜리 LCD에… 우라질 생산단가여~ by 미쿠 에 남긴 글 2009-12-08 16:47:12
  • 에효 미투모바일 WM 전용 프로그램은 애석하게도 미라지 폰에서는 지원 안되나 부네. 2009-12-08 17:16:21
  • 풀 한글 게시시작은 누가했을까?(me2dayzm 누군지 모를 당신 덕분에 한글 입력할 때 한자를 전혀 고려할 필요가 없어졌읍니다 고맙습니다 그리고 세종대왕님 사랑해요) 2009-12-09 07:45:17
  • 비가 혹은 눈이 올락말락.(me2dayzm 날씨가 꾸리꾸리) 2009-12-09 07:48:25
  • 미쿠 오늘도 올랑가 모르겠네요. 그러나 날이 좀 따뜻?
    인스턴스 커피를 블랙으로 옅게 타면 “즉석! 아메리카노!!!” by 하인도 에 남긴 글 2009-12-09 11:36:50
  • ELW가 뭐여요?
    에구 내가 정신줄을 놓았나보다. ELW사놓고 날짜확인을 못했다. ㅠ.ㅠ 아~ 내돈… 휴지조각 되렸당 by 미쿠 에 남긴 글 2009-12-09 11:37:42
  • MS메신저를 허니 MS메신저에 사람이 왠지 많이 늘어나는 기분이다(me2dayzm 까마귀 날자) 2009-12-09 13:36:33
  • 그냥 화가 난다(me2dayzm) 2009-12-09 22:30:30
  • 인생 불만족(me2dayzm 내가 진짜로 원하는게 뭐야?) 2009-12-10 08:10:13
  • 또 한 사람이 나간다고 한다(me2dayzm 사람을 험하게 쓰는 회사의 결말일지도) 2009-12-10 09:51:06
  • 이 시간? 9시간 전이면..새벽?
    항상 이시간만 되면.. 온갖 맛난 음식들이 머릿속에서 파노라마처럼 지나간다. 하지만 참아내지 못하면 안돼!! by 아크림 에 남긴 글 2009-12-10 11:15:26
  • 테스트의 길은 어려우면서 쉬우면서… 역시 관심과 열정이 관건인거 같아요
    구글의 James Whittaker가 말하는 당신이 신규 QA Manager라면.. 이를 정리해 보았다. 많은 것을 되돌아보게 한다. 그냥 Manager가 해야할 일이 있겠지만.. QA Manager로써 나는? by josephyeo 에 남긴 글 2009-12-10 11:18:33
  • 에효…
    와우 … ? 내가 이래서 회사를 못나가 …. 응? by 진독 에 남긴 글 2009-12-10 11:23:30
  • 시간이 계속 흐른다. 끊김없이 계속.(me2dayzm 잠시 멈추고 싶다 아니 뒤로 흘러가고 싶다) 2009-12-10 12:06:25

이 글은 하인도님의 2009년 11월 18일에서 2009년 12월 10일까지의 미투데이 내용입니다.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

자바 스크립트 클래스와 인스턴스 만들기

기술자료/Web 2008. 10. 17. 17:47

예전 포스팅 중 [ Javascript, 객체화 하기 ] 라는 제목으로 올린 것이 있다.
그 때 쓴 포스팅 방법에 의거해서 예제 소스를 하나 구성하면 아래와 같다.

var objTest = {
      valDisplay : "",
      displayValue : function () {
            alert(this.valDisplay);
      }
     
      setValue : function(val) {
            this.valDisplay = val;
      } 
};

위의 예제를 실행해 보려면, 적절한 위치에서 아래와 같은 코드를 실행해 보면 된다.

objTest.setValue("Go Go Objected Javascript World");
objTest.displayValue();

그런데, 위와 같은 코드를 하게 되면 문제가 하나 있다. 예를 들어 objTest와 같은 로직을 부르는 곳이 많을 때다. 여기서 부르는 곳이 많다는 의미를 단순히 호출 자체의 횟수가 아니고, valDisplay를 독립적으로 운영해야 되는 경우를 말하는 것이다.
예를 들어 아래와 같은 코드를 보도록 하자.

objTest0.setValue("Go Go Objected Javascript World");
objTest0.displayValue();
objTest1.setValue("No, I Want to new display valueGo Go Objected Javascript World");
objTest1.displayValue();

위와 같은 코드를 실행하려면 아래 처럼, 처음 코드를 두개 넣어야 한다.

var objTest0 = {
      valDisplay : "",
      displayValue : function () {
            alert(this.valDisplay);
      }
     
      setValue : function(val) {
            this.valDisplay = val;
      } 
};
var objTest1 = {
      valDisplay : "",
      displayValue : function () {
            alert(this.valDisplay);
      }
     
      setValue : function(val) {
            this.valDisplay = val;
      } 
};

처음에는 단순하게 생각했었다. objTest0 = objTest; objTest1 = objTest; 이렇게 하면 되지 않을까 하고....그런데, 그렇게 쉽게 되지는 않았다. 두개의 변수는 하나의 objTest를 바라보고 있어, 결국 값은 valDisplay를 공유한 꼴이 되버린 것이다.

이에 구글링과 테스트를 반복하여 그 방법을 드디어 찾아냈다.
즉 첫번째 소스를 이렇게 변경하면 된다.

objTest = function() {
     this.valDisplay = "";
     this.displayValue = function () {
            alert(this.valDisplay);
      }     
      this.setValue = function(val) {
            this.valDisplay = val;
      } 
};

실제 실행하는 코드는 아래 처럼 짜면 된다.

var objTest0 = new objTest();
objTest0.setValue("Test0 objTest!!!!");
var objTest1 = new objTest();
objTest1.setValue("Test1 objTest!!!!");

new 라는 것을 사용해서 만들기 때문에, 새로운 인스턴스가 생성되며 별개의 메모리 상에서 동작하게 되는 것이다. 이렇게 될 수 있는 건 자바스크립트의 미묘한 마법때문이다. 예전에 이런 문제 발생한적이 있지 않은가?

var realVar = "Init Data";
reelVar = "Update value!!!";
alert(realVar);

결과는 의도한 "Update value!!!"는 안찍히고 "Init Data"가 찍힌다. 그 이유는? reelVar 라는 변수 명이 잘못된 것이다. 그러나 씹고 그냥 진행되고 도리어 reelVar라는 변수가 하나 더 생기고 그 안에 값이 들어가 버린다. 맨 아랫줄에 alert(reelVar) 찍어보면 그제서야 "Update value!!!" 가 찍힌다. 자바 스크립트에서는 새로운 형태의 변수가 발견되면 일단 변수를 멋대로 만든다.

이런 기묘한 자바스크립트의 성질을 이용해 구성하는 것이다.
코드를 하나씩 뜯어 보도록 하자.

objTest = function() {      
};
일단 함수를 만드는 것이다. 함수 객체 자체를 objTest에 담는 것이다. 즉 objTest는 변수이긴 하지만 실제로 들어 있는 것은 함수인 것이다.
     this.valDisplay = "";
여기서 부터가 진짜 마법이다. this를 처음 접하신 분들은 순간 당황하실 것이고, 객체 지향을 하시던 분이라면 저 this가 어딜 가르키는 this인지 도무지 판단이 안서실 것이다. 저 this란 바로 function() 즉 objTest를 가르키는 것이다. 즉 objTest 라는 이름의 함수 내에 valDisplay 라는 변수를 정의하는 것이다. 이처럼 정의하는 이유는 아래의 또다른 함수의 형태 때문이다. 
     this.displayValue = function () {
            alert(this.valDisplay);
      }

이번에는 displayValue 라는 형안에 또다른 함수를 때려 박는다. 이 함수는 objTest.displayValue로 호출 된다. 그런데 만일 아까 this.valDisplay = ""; 가 아닌 var valDisplay = "" 라고 쓴다면 저 함수 안에서는 밖에서 정의한 변수를 쓸 수 없다. (물론 무한한 자바스크립트 세계에서 "완전 불가"/"절대" 란 없으니 "완전 불가"/"절대" 라는 말을 뺐다.) 즉 내부에서 사용하기 위한 변수로 쓰기 위해서 this. 라는 것을 붙여서 처리한 것이다.

여튼, 지금 필자는 MOSS 2007에 WebPart라는 개념이 있는데, AJAX 스럽게 만들려다 보니, 같은 스크립트를 여러 다른 웹파트들이 쓰게 되었는데, 일단 저렇게 간신히 해결하는데 성공했다. 미묘한 감동 찌리리링 상태다.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

  • «
  • 1
  • »
250x250

블로그 내에 소스 코드 삽입 이사온 기념 스킨도... RSS 전문 기능 비활성화 관련. 스킨 바꾸어 보았습니다. 서버 파일 정리 좀 했습니다.

«   2025/06   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Visual Studio me2sms 수 불만 인터파크 Google Apps Engine 매뉴얼 WSS 오류 Buscuit 지름신 것 me2photo e-book 2010 좀 me2dayzm 블로그 MOSS 2007 비스킷 친구 Azure moss SharePoint java 협업 windows Tutorial twi2me 개발환경

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015-2025 Socialdev. All Rights Reserved.

Copyright © 2015-2025 Socialdev. All Rights Reserved.

티스토리툴바