본문 바로가기

동강의AS3.0 강좌

[Base] 7강 - 사용자 정의 클래스의 이해


자주 올린다고 했는데, 속도가 더디네요.ㅋㅋ 졸업 시즌이다 보니 친구들 졸업식에 갔다 오게 되고, 오늘은 친형 졸업식에 갔다 왔담니다;; 크헐...... 날씨도 많이 풀리고, 학기가 시작한다고 생각하니;; 머리에 쥐가 날꺼 같은;; 으악!!!!!  

오늘은 기초스터디를 하고 있는 것과 이어서 " 사용자 정의 클래스 " 에 대해 간단히 하는 방법을 알아 보고

"내가 만든 클래스를 사용한다" 라는 주제로 시작해 보겠습니다.   

우선 5강 동적 생성 부분에서 Linkage 로 객체를 정의 해서 Linkage Properties 창에서  Class 에 이름을 입력을 하는것으로 내가 스테이지에 그린 객체가 클래스로 정의 된다는 것을 알았습니다 

(잘 기억 안나시면 http://cafe.naver.com/flashactionscript/12025 되돌아 가보시는것도 좋습니다 )  

그럼 내가 클래스를 만들었는데, 그 클래스의 속성을 지정할수 없는가? 이 객체에 속성을 추가해 보고 싶다. 어떻게 해야 될까요?

단순 Frame 액션에서는 어떻게 하는지 감이 오셨을 것입니다. 제가 말하고 있는 건 Linkage 로 Circle 이라는 클래스를 만들었을때, 이 객체를 어떻게 사용하는지는 알겠는데, 속성을 어떻게 추가 할것인가 하는 것입니다.

어떻게 하시겠어요? Frame 액션에서는 이렇게 해 왔습니다.

 

 // circle frame 액션으로 적용
  1. var cir:Circle = new Circle();
  2. cir.x = 100;
  3. cir.y = 100;
  4. cir.alpha = 0.8;
  5. cir.width = 200;
  6. cir.height = 100;
  7. addChild(cir);
  8.  
  9. // 마우스 이벤트를 추가 하려면
  10. cir.addEventListener(MouseEvent.CLICK, fcirdownhandler);
  11.  
  12. function fcirdownhandler(event:MouseEvent):void
  13. {
  14.         trace("마우스 다운이랑께");
  15.        
  16.        
  17. }

 

지금부터 사용하고자 하는 사용자 정의 클래스는 위의 액션과 똑같은 작용을 합니다. 그런데 구지 클래스로 만들어서 사용하려고 하는가? 우선은 습관이라고 말해 드리고 싶습니다. 단순 100줄도 안되는 액션 코드에서는 자신이 알아 볼수 있다면 frame 액션에 때려 박고, 사용하셔도 상관없습니다. 하지만 코드가 500~ 1000줄 10000줄까지 가면 어떻게 하시겠어요? Ctrl + F 조낸 눌러 가면서 일일이 변수명 확인해서 사용하는게 좋을까요 ? 아님 클래스를 따로 만들어서 관리 하시는게  좋으시겠어요? 선택은 자유지만, 전 필수라고 생각이 됩니다. 그 밖에도 무궁 무진한 장점들이 있으니 절 믿고 따라와 보세욜.

이제 클래스 파일을 만들어 보겠습니다.

메뉴의 File - New - Actionscript File 을 클릭 하세요.

우선은 클래스를 만들기 위한 기본 구조 부터 익히겠습니다.

 
  1. package {
  2.        
  3.         import flash.display.MovieClip;
  4.         /* import 를 정의하는 부분 입니다.
  5.         import 란 이 package 안에서 사용되어질 다른 클래스들을 불러 오기 위한 부분입니다
  6.         C 에서는 include 라고 생각하시면 되겠고 자바랑은 똑같습니다.
  7.         보통 Flash fla 파일에서는 무비 클립과 같은 클래스들은 import 를 하지 않아도 사용이 가능하지만
  8.         여기에서는 import 를 해야 사용이 가능합니다. 아무 것도 없는 상태에서 하나하나 불러서 써야
  9.         사용할수 있는 것입니다
  10.         */
  11.        
  12.         public class Circle extends MovieClip{
  13. extends MovieClip 을 왜 해주는가? 구지 MovieClip 으로 안하고 Sprite로
  14. 하는 방법도 있지만 우선은 우리가 정의한 것이 MovieClip 이니 MovieClip
  15. 을 상속받아야 정의가 가능합니다.
  16.        
  17.                 // 클래스의 메인이 되는 부분 전역 변수를 여기에 선언합니다.
  18.                 public function Circle():void
  19.                 {
  20.                         /*
  21.                         클래스의 생성자 라는 부분입니다. 함수이름은 클래스 이름과 동일하게 작성해야
  22.                         이 해당 클래스의 생성자로 적용이 되게됩니다. 생성자란 무엇인가?
  23.                         사용자가 Circle 이라는 클래스를 만들었을때 바로 호출되는 부분입니다. 이 생성자에서
  24.                         이 클래스의 속성을 지정할수 있고, 처음으로 해야 되는 부분을 모두 여기에서
  25.                         정의하고 사용하게 됩니다
  26.                         */
  27.                          
  28.                         trace("생성");
  29.                        
  30.                 }
  31.                
  32.                
  33.         }
  34.        
  35.        
  36. }

 

그리고 클래스 파일명은 Document 파일및 fla파일을 저장한 같은 폴더 안에 클래스 이름과 같은 이름으로 저장합니다

(여기 에서는 Circle.as 입니다) 

그리고 전 시간에 만들어보았던 Document 클래스를 fla 파일에 연결 시켜 봅시다.

 
  1. package {
  2.        
  3.         import flash.display.MovieClip;
  4.                
  5.         public class CustomMain extends MovieClip
  6.         {
  7.        
  8.                 public function CustomMain():void
  9.                 {
  10.                         var cir:Circle = new Circle();
  11.                         addChild(cir);
  12.                        
  13.                 }
  14.                
  15.                
  16.         }
  17.        
  18.        
  19. }

 

// output

생성  

그동안 Document 클래스 사용법은 숙지 하셨지요? 기억 안나시면 6강으로...................
그럼 위의 frame 액션으로 추가 시켜 줬던 Circle 에 대한 속성은 어떻게 정의해 줄까요?? 아주 간단합니다.

 
  1. package {
  2.  
  3.         import flash.display.MovieClip;
  4.         import flash.events.MouseEvent;
  5.         public class Circle extends MovieClip {
  6.  
  7.                 public function Circle():void {
  8.                         trace("생성");
  9.                         this.x = 100;
  10.                         this.y = 100;
  11.                         this.alpha = 0.8;
  12.                         this.width = 200;
  13.                         this.height = 100;
  14.  
  15.                         this.addEventListener(MouseEvent.CLICK, fcirdownhandler);
  16.  
  17.  
  18.                 }
  19.                 public function fcirdownhandler(event:MouseEvent):void {
  20.                         trace("마우스 다운이랑께");
  21.  
  22.                 }
  23.         }
  24. }

 

여기서 this 란 Circle 이란 클래스 자기 자신의 의미 합니다. 그러니 자기 자신에게 속성을 추가해 주는것이지요. 정말 간단하죠? 지금까지 as 파일 2 개 fla 파일 1개가 생성되었습니다.  function 앞에 public 이나 private 로 정의를 하고 있는데, 우선은 모두 public 으로 해도 무방합니다. 클래스의 개념을 좀더 추가해 주면서 설명하도록 하겠습니다.   

어찌 파일이 좀 깔끔해 졌다 라는 것을 느끼고 계신가요??  이것으로 [Base 강좌] 에서 이론에 대한 부분중 큰 가닥은 잡은것 같습니다.  늘 하는 얘기지만 어렵다고 생각하시는 분들이 많으실꺼라 봄니다. 하지만 이게 3.0 의 아주아주아주 기초중에 기초 라는 점을 알아 두셨으면 좋겠습니다. 앞으로 엄청난 기능을 자랑하는 내장 클래스들과, 우수한 개발자들이 만들어 놓은 클래스를 활용할 수 있게 되기 위해서는 아직 갈길이 많이 남아 있습니다. 기초 부터 탄탄히 라고, 하나하나 스텝을 밟아 가시기 바람니다.   

앞으로는 실습을 중심으로 이론을 추가해 나아가면서 Base에 살을 붙여 나가도록 하겠습니다. 수고 하셨습니다.

다음 강에 뵙겠습니다. 안뇽~ 

 

역시 틀린 부분이나 질문 거침없는 답글 댓글 부탁드립니다. (해보기는 없습니다;;;;;  아싸! )