분류 전체.. (283)
일기 (124)
Flash Plat.. (101)
Scaleform (43)
JavaScript (3)
etc (12)
비공개 (0)
as3  scaleform  스케일폼  as3.0  CLIK  flash cs3  클릭  scaleform3  scaleform4  강좌 
 gmlmcklc
└>gmlmcklc
 비 익스플로러..
└>미나토
 비 익스플로러..
└>미나토
 Flash CS3, Fl..
└>iamyhs
 더 공부해
└>iamyhs
«   2012/01   »
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 31        
+ 다니는 회사
+ 내가 1년전까..
+ 내가 2년전까..
+ twitter
+ facebook
+ flex sdk
+ Total : 57,642
+ Today : 90
+ Yesterday : 96
  

 

 

 

2012/01/26 _해당되는 글 3건
2012/01/26   클로저 (Closure) 0 
2012/01/26   메모리의 이원화 
2012/01/26   JavaScript 카테고리를 만들었습니다... 

 

클로저 (Closure) 0
+   [JavaScript]   |  2012/01/26 12:48  


앞선 포스팅에서 실행 메모리 영역에 대해서 말했습니다... 다른 말로 클로저 영역이라고 합니다.

js

a = function (b){
    var c = 2;

    var d = function (e){
        var f; 
        alert(c);
    }
    d();
}
a();



as2

a = function (b){
    var c = 2;

    var d = function (e){
        var f; 
        trace(c);
    }
    d();
}
a();



이런 함수를 만들면 둘 다 2 가 출력됩니다. alert 함수가 trace 함수로 바꼈을 뿐, 보시다시피 코드는 똑같습니다.

어떻게 2가 출력되었는지 살펴볼까요??

얼핏보면 a 란 함수를 실행하면 a 함수 내부에 선언된 d 함수가 실행됩니다.

d 함수 내부에는 c를 출력하여야 하는데, d 함수 내부에는 어디에도 c라는 변수가 없습니다... 인자에도 없고 함수 내부에 지역변수로 선언되어 있지도 않습니다.
그러면 d 함수가 실행되고 있는 영역인 a 함수를 찾아올라갑니다. 그 안에는 c와 d가 변수로 들어있고, b가 인자로 들어있지요... c를 찾았네요??? c란 변수가 참조하고 있는 2 값을 출력합니다...


d 함수를 실행하는 순간 vm에서는 앞서 말했듯 실행메모리 영역을 만들어냅니다.
e 가 들어오는 arguments 객체가 있고, var 로 선언된 f 가 있습니다. (사실 생략된 this도 설명해야 하는데, 이건 나중에...)
이런 메모리 테이블 공간이 만들어지는겁니다.

마찬가지로 a 함수에도 b로 들어온 arguments 객체가 있고, c, d 로 선언된 지역변수 메모리 테이블이 있겠죠...


어쨌든 d의 메모리 테이블이 만들어지고 나면 이제 한줄씩 한줄씩 작성되어져 있는 구문을 실행하는 겁니다
alert / trace 로 c를 출력해야 하는데 해당 메모리 테이블 공간에 c 가 없습니다...
그러면 이때 해당하는 변수가 정의되지 않았음을 나타내는 undefined 를 출력하는 것이 아니라 함수 d가 실행된 메모리 영역인 a 의 메모리 테이블을 검색합니다

c를 찾았네요? c가 가르키는 값은 2를 출력합니다...

이런 연쇄적으로 연결되는 메모리 영역을 클로저라고 합니다...




그런데 여기서도 없다면?...





참조해볼 사이트

http://js.bsidesoft.com/ 
http://www.diebuster.com/flash/82 
http://blog.naver.com/kjhbond/50129536282


 
참조해볼 서적

javascript.jpg 
http://insightbook.springnote.com/pages/1109998 


js_patterns_cover_small.jpg 
http://insightbook.springnote.com/pages/8500578   
크리에이티브 커먼즈 라이선스
Creative Commons License

 
 
     0   0
이 글의 관련글(트랙백) 주소 ::    http://www.minarto.com/trackback/309 관련글 쓰기

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

메모리의 이원화
+   [JavaScript]   |  2012/01/26 12:26  


1. js vs as2


앞선 포스팅에서 말했듯 저는 js를 사용해본 적이 거의 없기 때문에 잘 몰랐지만, as2는 사실 js를 그대로 본따 만든 언어입니다...

js의 window 가 바로 as2의 _global 이고, DOM 이 바로 MovieClip, TextField 입니다...

as2에서, new Array 는 가능하되... MovieClip은 new MovieClip 대신 attachMovie 를 써야하는 이유가 여기에 있는 겁니다. DOM 객체를 가져와서 사용할 뿐인거죠... 만들어서 쓰는 것이 아니고요

그러다 보니 as2도 js의 이원화된 메모리 관리를 그대로 따라갑니다...



2. 메모리 이원화

그럼 메모리 이원화에 대해 말해야겠군요...

js는 메모리 관리 영역이 두군데로 나뉩니다. 오브젝트(Object Class 를 말하는게 아닙니다) 영역과 실행 메모리 영역입니다...


프로그래밍을 해서 컴퓨터에서 실행을 하려면, 우리가 작성한 코드는 당연히 컴퓨터의 메모리 어딘가로 올라가야 합니다... 그래야 CPU에서 그걸 가지고 연산을 하겠죠...

우리가 작성한 코드... 그것을 하나의 오브젝트로 보고 js vm 에서 거대한 해시맵에 담아줍니다. 여기까지는 c 와 비슷하다면 비슷할겁니다.(전 c를 한번도 안해봤기 땜시 잘 모르겠지만...)
이것을 오브젝트 메모리 영역이라고 하겠습니다.


그럼 실행 메모리 영역은 무엇이냐...

코드란 것은 결국 동작시키기 위해 작성하는 것... 동작하지도 않을 코드는 존재하지 않겠죠...
앞에서 작성한 코드가 실행될 때... 즉, 함수가 실행될 때 메모리를 js vm에서 메모리를 새롭게 분배해 줍니다...
예를 들어, 함수 내에 var a = 1 라고 지역변수(일단은 이렇게 부르겠습니다)를 선언하면 1 이라는 Number 메모리를 새로 잡아주고 a 라는 변수에 참조시켜주는거죠


여기서 js가 c 같은 언어에 비해 느린 이유가 만들어집니다... c 는 동작시에 사용하게 될 메모리를 미리 개발자가 잡아놔야 합니다. 그러면 컴파일러에 의해 컴파일이 되면서 메모리를 정리(?)해주게 되고, 해당 포인터를 바로 사용하면 됩니다.

하지만 js는 컴파일이 없으니 실행되는 동안  vm이 알아서 그런 일을 다 해줘야 합니다...

게다가 알아서 생성해줬으니 알아서 지워도 줘야겠죠... 안그러면 메모리가 폭발할 테니까요... 바로 gc가 돌아야 합니다...



3. 요약

첫번째니 가볍게 정리를 하겠습니다.

1. as2  js
2. js는 메모리를 두가지로 관리한다. 오브젝트 영역과 실행 메모리 영역




참조해볼 사이트

http://js.bsidesoft.com/ 
http://blog.naver.com/kjhbond/50129536282


 
참조해볼 서적

javascript.jpg 
http://insightbook.springnote.com/pages/1109998 


js_patterns_cover_small.jpg 
http://insightbook.springnote.com/pages/8500578 
크리에이티브 커먼즈 라이선스
Creative Commons License

 
 
     0   0
이 글의 관련글(트랙백) 주소 ::    http://www.minarto.com/trackback/308 관련글 쓰기

아이디 
비밀번호 
홈페이지 
비밀글   

 

 

JavaScript 카테고리를 만들었습니다...
+   [JavaScript]   |  2012/01/26 11:15  


아, 이게 말이죠... 사실은 전혀 만들 생각이 없었어요...


글을 쓰는 2012년 1월을 기준으로 약 2년째 웹을 떠나있는 저로서는 사실 실무에서 js를 쓸 일이 전혀 없습니다.... (1년간 인터랙티브 미디어, 나머지는 스케일폼)
앞으로도 당분간은 쓸 예정이 없고요...


그 전에도 js는 ctrl +c, ctrl + v 로 쓰는 정도였을 뿐입니다... 단지 플래시앱의 테스트를 위해서였죠... 언어라는 생각도 하질 않았어요...


그러나 지금 js는 세상을 뒤엎고 있습니다... 구글이나 페북에서는 아이비리그 나온 친구들이 js를 다룹니다... 플래시는 그에 비해 저물어가니 유행을 타서 저도 포스팅을 시작.....한건 절대 아니고요...


작년 말부터 히카님의 지도(스터디이지만 지도라는 말이 어울립니다) 하에 S51 이란 js 스터디를 하고 있는데,
as2 == js 이고,  as3 은 js의 ecmascript3 스펙에 class 문법을 붙인  ecmascript4 스펙인 것을 다시 한번 몸소 깨닫고 있습니다...


스터디는 들은 후에 잊혀지는 법... 이걸 어따 써먹긴 해야겠는데...

같이 스케일폼 스터디를 하는 친구들에게 스케일폼4를 대비해 스케일폼에 맞는 as3 스터디를 시작하기로 했거든요... 그 초입단계로서 as2 와 as3를 좀 가르쳐야겠다고 생각을 했고...
그러면서 자연스레 js 문법을 가르치면 되겠다 싶었습니다...(헌데 문제는 더도 배우고 있는 중이라...)


앞선 두가지의 스터디의 일부로서 좀 정리가 필요하겠다 싶어서 카테고리를 하나 더 만듭니다...


아마도 다른 곳같은 실무에서의 js가 아닌, as2, as3 와 연결된 개념으로서의 포스팅이 될거라고 생각합니다.



 
크리에이티브 커먼즈 라이선스
Creative Commons License

 
 
     0   0
이 글의 관련글(트랙백) 주소 ::    http://www.minarto.com/trackback/307 관련글 쓰기

아이디 
비밀번호 
홈페이지 
비밀글   

 

<<이전 | 1 | 다음>>

미나토's Blog is powered by Daum