2008.09.28 22:30
단도직입적으로 말씀드리자면, new 키워드는 비용이 비쌉니다. 많은 리소스를 사용하게 된다는 말이죠. 물론 안쓸 수야 없죠. 새로운 객체를 생성하려면, 당연히 써야됩니다. 하지만, 사용하게 되면 그만큼의 연산과 메모리의 차지는 어쩔 수가 없습니다. 이런 문제들로 인해 좀 더 효율적인 객체의 사용을 위해 객체 풀(Object Pool) 을 구성하여 사용한다던가 하는 방법을 고민하게 되죠.
본 포스트에서는 객체 풀에 대해서 설명하지는 않겠습니다. 위에 링크로 걸어놓은 영구기님의 포스트를 참고하시도록 하시고요, 이번 포스트에서 제가 설명하고자 하는 것은 new 키워드를 사용하지 않고서도 사용할 수 있는 타입들에 대한 사용방법입니다.

데이터형태는 아래와 같이 2가지의 데이터형이 존재합니다.

Primitive Data Type : Boolean, int, uint, Null, Number, String, void
Complex Data Type : Object, Array, Date, Error, Function, RegExp, XML, XMLList


기본적인 데이터 형태(Primitive Date Type)의 변수선언시에는 물론 new 키워드는 사용하지 않습니다. 하지만 사용하지 못한다는 것은 아닙니다.
문자열을 저장할 때에 String 를 사용하게 됩니다. 이 String 형 변수는 다음과 같이 선언하게 됩니다.

하지만 아래와 같이 new String() 이라고 할 수도 있습니다.

int, uint, Number, Boolean 도 마찬가지로 new 키워드를 이용하여 변수에 할당해줄 수 있습니다. 허나 그렇게 사용하지는 마십시오. 기본적인 데이터 형태의 변수는 new 키워드를 사용하지 않아도 메모리가 할당되게 됩니다. 게다가 더 빠르고 간편합니다.

그래도 확인하고 넘어가는 차원에서 Number 형태의 변수의 할당에 대해 살짝 실험해보도록 하겠습니다. 아래의 코드를 보시면 Number 변수를 할당시에 new Number()를 사용하는 것과 직접 값을 입력하는 것에 대해서 속도를 비교해보고 있습니다. new 키워드를 사용하지 않는 것이 더 간편합니다. 그 아래에는 실제 결과물입니다. 테스트 버튼을 클릭하셔서 테스트 해보시기 바랍니다.







그렇다면 보다 복잡한 데이터 형태(Complex Data Type)의 변수를 선언시에는 new 키워드를 어떻게 쓰지 말라는 말일까요?
가장 먼저 많이 사용하는 Array에 대해서 말씀드려보겠습니다. 우선 Array를 선언시에 아래와 같이 선언할 수 있습니다.

이전 포스트에 살짝 언급하였습니다만, Array의 경우는 [] 를 이용하여 새로운 Array를 할당할 수 있습니다.

이와 비슷하게 Object를 할당할 때에도 new Object()  대신에 {} 를 이용하여 새로운 Object 할당이 가능합니다.
아래와 같은 선언을 다른 예제 소스코드에서 흔히 보셨을겁니다.

위에서 설명드린 것과 같이 Array 를 할당시에 [] 를 이용하고 Array 내부의 값을 {}를 이용하여 Object 형태로 정의하였습니다.
만약 [], {} 없이 선언하려고 한다면 아래와 같이 하여야할 것입니다. (물론 이렇게 사용할 일은 거의 없죠. 매우 극단적인 예랄까요? )


RegExp 같은 경우도 new 키워드를 사용하지 않고 선언 가능합니다.


XML 도 마찬가지입니다. 아래와 같이 흔히 사용하시고 있죠?
2번째 라인에 있는 것처럼 사용하실 일은 없을 듯합니다. 물론 String 형태의 XML 데이터라면 XML 로 변환하려면 2번째 라인처럼 해야겠죠.


마지막으로 위에서 말씀드린 Array와 Object 의 new 키워드 사용 유무에 대한 속도차 테스트를 해보고 마무리 짓겠습니다.
(RegExp 는 속도차가 거의 없어서 생략하였고,  XML은 쓸일이 없을 것 같아 생략하였습니다. ㅎ)

아래는 Array를 테스트한 코드입니다.

아래는 Object를 테스트한 코드입니다.




뭐 결론은 new Array() 대신에 [], new Object() 대신에 {} 를 사용하자는 것입니다. ;)
긴 글 읽어주셔서 감사합니다. ;) 다 읽으신 후에는 덧글 하나 써주시는 센스!!

참고자료 :
객체 풀[Object pool]을 이용해 보자.  - 영구기님 블로그
ActionScript3.0 너는 누구냐? - 엄진영님 Flex 챔피언 블로그

신고
Creative Commons License
Creative Commons License
Favicon of http://wooyaggo.tistory.com BlogIcon 우야꼬  | 2008.09.29 09:45 신고 | PERMALINK | EDIT/DEL | REPLY
Best Practice에서도 new 보다는 [] 나 {} 를 쓰라고 나와있더라구요.
좋은 내용 ㄳ~
(인액션 책에 추천사 넣으셨더라구요~ ㅋㅋ 서점가서 보고 왔는데 많이 듣던 이름이여서 내심 반가웠다능~)
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.09.29 13:12 신고 | PERMALINK | EDIT/DEL
제가 쓴 서평은 짤렸.. .ㅋ
매번 방문해주셔서 감사합니다. ;)
신준섭 | 2008.09.29 10:01 신고 | PERMALINK | EDIT/DEL | REPLY
항상 좋은 자료 잘보고갑니당.^^
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.09.29 13:12 신고 | PERMALINK | EDIT/DEL
네~ 좋은 하루 되세요~ ;)
Favicon of http://lovedev.tistory.com BlogIcon lovedev | 2008.09.29 11:01 신고 | PERMALINK | EDIT/DEL | REPLY
ObjectPool을 잘 사용하면 필시 좋은 건 사실입니다.
다만 GC에 대한 고민이 있어야 겠죠. GC관리를 풀관리자가 잘 해주면 관계는 없겠지만..
Java에서도 ObjectPool은 신중하게 사용되어야 한다고 논의 되고 있습니다.
때론 메모리에서 인스턴스화를 하지 않은 상태로 객체를 가지고 있는 자체가 문제가 될 때가 있습니다..그 상태야 말로 GC를 할 수도 없는
메모리 할당만 받고 있는 누수의 원인이 되기 때문입니다.
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.09.29 13:13 신고 | PERMALINK | EDIT/DEL
매번 좋은 말씀 감사합니다. ;)
저도 ObjectPool 은 실제로 개발시에는 사용해본 적은 없네요 ^^;
보다 좋은 방법들이 고려되고 나타나기를 기대합니다 ;)
Favicon of http://bnufactory.com/ BlogIcon BNU | 2008.09.29 16:35 신고 | PERMALINK | EDIT/DEL | REPLY
자바스크립트에서도 Flex에서처럼 큰 폭은 아니지만 [], {}가 좀 더 빠르네요.
좋은 정보 감사합니다. :)
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.09.29 19:20 신고 | PERMALINK | EDIT/DEL
아무래도 리터럴이니까요 ;)
좋은 정보 되셨다니 기분 좋습니다 ㅎ
Favicon of http://www.jinhokim.com BlogIcon 찌노 | 2008.09.29 16:59 신고 | PERMALINK | EDIT/DEL | REPLY
무의식적으로 Array 선언시 [] 를 사용하고 있었는데 더 좋은방법이라니.. 왠지 모를 뿌듯함이.. ㅎ
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.09.29 19:21 신고 | PERMALINK | EDIT/DEL
좋은 습관!! ㅎㅎ
Favicon of http://2rang.tistory.com BlogIcon 꽃녀 | 2008.09.30 00:09 신고 | PERMALINK | EDIT/DEL | REPLY
항상 연구하시는 쉰님..
자알~ 배우고 갑니당 ^^
new가 뽀대가 나긴 한데 ㅎㅎ
내일 보면 쌩까지 마셈~
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.09.30 09:40 신고 | PERMALINK | EDIT/DEL
오늘이군요!! ;)
좀 있다 뵙겠습니다 ㅎㅎ
Favicon of http://okgosu.tistory.com BlogIcon okgosu | 2008.09.30 01:19 신고 | PERMALINK | EDIT/DEL | REPLY
좋은 정보 잘 보고 갑니다...
담에 세미나 있으면 발표 의뢰해야겠습니다...^^
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.09.30 09:40 신고 | PERMALINK | EDIT/DEL
영광이죠! ;)
찾아주셔서 감사합니다 ㅎ
Favicon of http://blog.jidolstar.com BlogIcon 지돌스타 | 2008.09.30 10:19 신고 | PERMALINK | EDIT/DEL | REPLY
멋진 글입니다.
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.10.01 12:52 신고 | PERMALINK | EDIT/DEL
지돌스타님이 더 멋지시면서! ㅋ
차차 | 2008.10.09 09:58 신고 | PERMALINK | EDIT/DEL | REPLY
좋은내용 감사해요.
센스있어 보이려고 덧글 남겨요ㅋㅋ
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.10.09 13:32 신고 | PERMALINK | EDIT/DEL
센스 만점이신데요! ^-^
연월태생 | 2008.10.09 16:57 신고 | PERMALINK | EDIT/DEL | REPLY
좋은 글이에요~
코딩 습관을 바꾸던지 해야 할듯하네요 ㅎㅎ
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.10.13 10:00 신고 | PERMALINK | EDIT/DEL
좋은 쪽으로 바꾸는 것이니 즐거운 마음으로 ㅎㅎ
수채화 | 2008.11.05 11:02 신고 | PERMALINK | EDIT/DEL | REPLY
좋은글 잘보고갑니다~
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.11.07 16:58 신고 | PERMALINK | EDIT/DEL
방문 감사드려요~ :)
덧글은 더 감사드립니다 ㅎ
Favicon of http://orochi77.egloos.com BlogIcon 꼬출든남자 | 2008.11.12 00:47 신고 | PERMALINK | EDIT/DEL | REPLY
아.. 정말 주옥같은 내용들이에요..
검쉰님 포스트 주욱 보고 공부해야게써요~ ^^
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.11.13 18:27 신고 | PERMALINK | EDIT/DEL
칭찬 감사합니다. ;)
Favicon of http://shinlucky.tistory.com BlogIcon shinlucky | 2008.11.27 17:54 신고 | PERMALINK | EDIT/DEL | REPLY
이거 플래쉬 viewer 10으로 바뀌면서 티스토리내에 올린 파일들은 안보이는거죠?
(다른 계정에서 링크한건 보이던데...)

안보임 ㅠ.ㅜ;
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.12.02 01:17 신고 | PERMALINK | EDIT/DEL
제 회사 컴에 10이 설치되어 있는데 제대로 나옵니다 ^^;
뭔가 다른 문제인듯 싶네요;;
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.12.06 23:13 신고 | PERMALINK | EDIT/DEL
다시 확인해보니 10 설치후에 나타나는 문제인듯 싶군요;
한동안 바빠서 정신없다가 이제서야 문제점을 인식했습니다;
김병건 | 2008.12.03 13:02 신고 | PERMALINK | EDIT/DEL | REPLY
좋은정보 감사합니다.
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.12.03 14:28 신고 | PERMALINK | EDIT/DEL
방문 감사드려요~ :)
도움이 되셨으면 좋겠네요 ㅎ
모험가 | 2008.12.23 18:37 신고 | PERMALINK | EDIT/DEL | REPLY
좋은 글 잘 보고 갑니다~~ ㅋㅋㅋ 감사합니다.
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.12.25 15:18 신고 | PERMALINK | EDIT/DEL
덧글감사합니다~ :)
Favicon of http://shallaazm.tistory.com BlogIcon shallaa | 2009.01.27 02:16 신고 | PERMALINK | EDIT/DEL | REPLY
저도 이제 기왕이면 싼거 애용해야 겠네요- ㅎ
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2009.01.28 10:34 신고 | PERMALINK | EDIT/DEL
방문 감사드려요~ :)
어쩔수 없이 비싼거 써야될때도 있겠죠? ㅎ
Favicon of http://7zelkova.tistory.com BlogIcon 성주 | 2009.04.29 10:51 신고 | PERMALINK | EDIT/DEL | REPLY
역시 형님 블로그랑 강민형님 블로그에 제가 원하는 자료들이 많아요
Favicon of http://www.iruis.net BlogIcon ☆~ | 2009.08.17 14:39 신고 | PERMALINK | EDIT/DEL | REPLY
Nunber나 String, RegExp같은 불변 객체는 new를 생략시엔 미리 생성 된 객체 또는 풀링을 이용하여 컴파일러 차원에서 값이 대입(결과적으로 new는 되지만 한번만)만 되도록 변형 되지만 Array라든지 Object, XML객체와 같은 값이 변하는 객체마저도 new를 않쓰는 경우 빨라진다는 것이 신기하네요. 값이 변하는 객체마저 속도가 빨라지는 근본적인 이유는 연구할만한 내용이네요.
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2009.08.19 10:42 신고 | PERMALINK | EDIT/DEL
연구하셔서 내용을 공유해주시면 많은 분들께 도움이 될 것이라 믿습니다 ;)
OneLove | 2009.09.03 16:18 신고 | PERMALINK | EDIT/DEL
전역메서드를 사용함으로..빠르겠죠
array = new Array() Array 클래스를 이용
array = [] 전역메서드를 이용
자세한 내용은 여기를 참조해보세요
http://help.adobe.com/ko_KR/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f3f.html#WS5b3ccc516d4fbf351e63e3d118a9b90204-7f1b
- 덧글 좀..(굽신굽신) : 장문의 덧글은 트랙백을 이용해주세요 ;^)
Name
Password
Homepage
Secret