좋게 말하면 Advanced Topic이지만, 사실은 알아도 별 도움은 안되는 내용을 잠깐 다루어볼까요.

아마 Flex와 ActionScript를 처음 접하시는 분들 중에는, 가변 길이인 String이 어떻게 primitive data type이 될 수 있는지 의아했던 분들이 계실 겁니다. (대부분의 객체 지향 언어에서 primitive data type들은 고정 길이지요.)

보통의 객체 지향 언어에서는 일반적으로, primitive data type은 reference가 아닌 value 그 자체로 다룹니다만, 유독 ActionScript 3.0의 경우에는 모든 데이터가 reference로 처리가 됩니다.[각주:1] 즉, ActionScript는 primitive조차도 reference로 처리를 하기 때문에, 가변 길이인 String가 primitive data type이 되어도 별 문제가 없습니다. (물론, 이와 같은 경우가 아니라도, 딱히 가변 길이의 primitive가 불가능하거나 한 것은 또 아닙니다. 몇 마디로 설명하기에 다소 복잡한 문제이긴 합니다만..)

그런데, 또 primitive data type의 실제 동작을 보면, 마치 pass by reference가 아닌 pass by value처럼 보이지요. (아래는 LiveDocs에서 발췌한 예입니다.)

function passPrimitives(xParam:int, yParam:int):void
{
    xParam++;
    yParam++;
    trace(xParam, yParam);
}

var xValue:int = 10;
var yValue:int = 15;
trace(xValue, yValue);// 10 15
passPrimitives(xValue, yValue); // 11 16
trace(xValue, yValue);// 10 15

위와 같은 동작 때문에, primitive data type은 Value로 처리되는 것이 아니냐고 생각하시는 분들이 계시겠습니다만, 이는 primitive data type에 대해서만 특별히 이와 같이 보이도록 별도의 구현이 되어있는 것이며, 실제로 primitives를 포함한 모든 인자는 pass by reference로 처리가 됩니다.

어쨌든 표면적으로는 아무런 차이가 없으므로, 이와 같은 내용을 알지 못하여도, 개발하는데 별 지장은 없을 것입니다.

Reference


마치며 덧붙임

한동안 글이 뜸했지요.  얼마 전, 전원 주택으로 이사를 했는데, 접지 문제에서부터 시작해서 인터넷 회선까지, 개발하고 관련된 모든 환경이 엉망이라서, 몇 주 동안 개발을 끊(?)고 살았었습니다.

다시 조금씩 일을 손에 쥐어보곤 있습니다만, 포스팅을 자주 하게 될 지는 아직 잘 모르겠네요.


  1. Reference - [LiveDocs] Function parameters 참고 [본문으로]
저작자 표시 비영리 변경 금지
Posted by 찬익

트랙백 주소 : http://blog.chanik.com/trackback/120 관련글 쓰기

댓글을 달아 주세요

  1. 라피르 2010/07/19 13:25  댓글주소  수정/삭제  댓글쓰기

    오호홋.. 간만에 안녕하세요..^^

    복날입니다~!

    닭드세요~~~~~~

    ps. 이사 축하드려요~~

  2. BlogIcon 이민철 2010/07/20 13:16  댓글주소  수정/삭제  댓글쓰기

    좋은 내용 고맙습니다!

  3. BlogIcon vulcan 2010/07/20 16:50  댓글주소  수정/삭제  댓글쓰기

    전원주택에서의 자유로움.. 부럽당

    • BlogIcon 찬익 2010/07/22 01:37  댓글주소  수정/삭제

      저도 그럴 줄 알았는데, 하루에 반은 집안 일에 묶여있어야 하더군요.
      집사를 따로 두기 전에야, 그다지 좋은 선택은 아닌 듯.