Study/Actionscript 3.02009. 2. 19. 21:12
ImageLoader라는 클라스를 만들어 외부 이미지를  load하는 과정을 해 보았다. 다음은 새로 만든 클라스(ImageLoader)의 전용 이벤트를 만들어 주고 이벤트 처리를 간소화 하여 그 효율성을 더욱 증가시키는 방법을 알아보도록 한다.

과정은 다음과 같다.
1.ImageLoaderEvent 생성 (package: timo.event  name:ImageLoaderEvent  superClass:Event)
2.ImageLoader 수정
3.ImageLoaderTest2 생성

***ImageLoader와 ImgeLoaderTest의 변화 양상을 비교해보면 이해하는 데 도움이 된다.






2.ImageLoaderTest2
1) 자신이 만든 class ( ImageLoader) 에 전용 이벤트를 만들어 주어 임의의 문자열("aaa", "yahoo")로 데이터 관련 정보를 주고 받는 것이 아닌 "이벤트 형식"으로 정보를 주고 받도록한다.

<이벤트 기본 틀>
     var aaa: AAA = new AAA();    
     aaa.addEventListener( AAAEvent.aaa,  onComplete  );
     aaa.loader.load("./aaa.jpg");

function onComplete (e:AAAEvent): void
{
//완료
}

아래와 같이 ImageLoaderTest1에서 작성했던 ImageLoaderText1 코딩을


ImageLoaderText2에서는 "이벤트 기본 틀"에 맞춰 변경한다.
 <이벤트 기본 틀>
     var  imgLoader: ImageLoader = new ImageLoader();
     imgLoader.addEventListener( ImageLoaderEvent.COMPLETE, onComplete );
     imgLoader.load( "./aaa.jpg" );
 
     function  onComplete( e: ImageLoaderEvent ): void
     {
         // 완료...
     }
즉 "aaa"와 같은 문자열 대신에 전용 "이벤트"를 써서 코딩하면 보다 깔끔하고 효율적인 데이터 처리가 가능하다.
(기존 이벤트의 기본 틀과의 통일성 유지, 임의의 문자열을 때문에 발생가능 한 "검색/확인/오류와 관련한 문제점" 방지)



아래와 같이 ImageLoaderTest1에서 작성했던 ImageLoader 클라스 코딩을


이와같이 변경한다. 이것은 코드를 단순화 시킨 것으로 실무에서는 아래와 같은 형식으로 많이 쓴다.




Posted by chacolina
Study/Actionscript 3.02009. 2. 19. 16:19
1.ImageLoaderTest1

1) src 폴더에 img폴더를 만들고 그 안에 "aaa.jpg"파일을 저장한다.
2) ImageLoader class 만들기(package: timo.display,  name: ImageLoader,  superClass:Sprite) 단, 상속클라스 이외의 모든 이름은 취향 것 지정한다.  (로더가 이미지를 불러들이고 이미지로더는 메인 도큐먼트에게 데이터가 도착했음을 알려준다.)
3) ImageLoaderTest document 만들기 (name: ImageLoaderTest,  superClass:Sprite)
(이미지로더로부터 받은 데이터를 직접 활용한다.)

원리는 다음과 같다.



ImageLoader 클래스는 무엇을 상속받을까?
load의 기능이 필요한 경우는 두가지 (소송시 변호사가 되거나 변호사를 고용한다 (전자는 상속 후자는 가지는 것 )
1.loader를 상속 받는다 .... is a 관계  (내가 ~이다 )
2.loader를 하나 가진다 .... has a 관계  (내가 ~을 가진다 )
*******상속은 하나 밖에 못받기 때문에  has a가 더 유연하다  필요에 따라 여러개 가져올 수 있으므로 **********







Posted by chacolina
Study/Actionscript 3.02009. 2. 16. 20:29
Array에 대한 연습을 해봅니다.

Package      Top Level
Class           Public dynamic class Array
Inheritance Array --> Object


일반정의
배열 : 배열하다 --> 나열하다 ---> 줄세우기 ::: 개수가 많을 경우, 쉽게 컨트롤 하기 위해 사용한다.
배열의 각 성분 --> 원소 :: 원소의 구분은 컴마

오늘 알아야 할 핵심문법
trace(arr.length);                     배열의 길이  
trace(arr.join());                      각 원소를 연결하여 하나의 문자열로 만들기
trace(arr.join("-"));                 각 원소를 "구분자"로 연결하여 하나의 문자열로 만들기
arr[4]="코끼리";                    배열 추가하기
arr.push("당나귀");                배열 마지막에 배열 추가하기
var arr2:Array=str.split("-");  "구분자"로 문자열을 분리하여 배열로 만들기










===========================

Posted by chacolina
Study/Actionscript 3.02009. 2. 16. 20:02
유고나카무라 홈페이지에서 볼 수 있는 Type을 구현해봅니다.
(복수 문자간의 이동)


핵심원리
1. start type(임의의 시작문자)과 final type(최종적으로 보여주고자 하는 문자열)을 지정한다. ( 우리는 "-"와 "superman"로 합니다.)
2. superman의 각 문자를 배열을 이용하여 저장한다.
3."--------" =>"superman" (목적-->종착 ) 두 문자를 유니코드로 변경한다.

3. 각 문자에 순차적으로 deley를 주어 단계적으로 변환하도록 한다.
(0번째 배열의 이동시작 x초 후 1번째 배열 이동시작 ) 즉 ("-"=>"s"
, "-"=>"u","-"=>"p" 의 이동이 x초 간격으로 일어난다.)
4. 유니코드를 다시 문자열로 변화해서 화면에 표시

** 하단의 debugging 결과를 보면 순차적으로 코드이동이 있음을 확인 할 수 있다.

==================================
http://www.yugop.com/








Posted by chacolina
Study/Actionscript 3.02009. 2. 16. 19:29
유고나카무라 홈페이지에서 볼 수 있는 Type을 구현해봅니다.
(단일문자간 이동)

핵심원리
1. start type(임의의 시작문자)과 final type(최종적으로 보여주고자 하는 문자열)을 지정한다. ( 우리는 "-"와 "z"로 합니다.)
2."-" ---->"z" (목적-->종착 ) 이동을 하려면 꼭 숫자값이 필요하므로 각 문자를 유니코드로 변경한다. ("-" ---->"z"를 35 ----> 99 로..)
(50-->1000와 같은 순자값은 순차적으로 이동하면 되지만 문자열은 숫자체계로 바꿔줘야 한다.)
3. 35부터 1씩 증가시키면서,99까지 이동하도록 코딩.
4. 유니코드를 다시 문자열로 변화해서 화면에 표시 (35에 이어 36을 읽으면 다시 36을 해당 문자열로 변환하여 화면에 표시한다.)



==================================
http://www.yugop.com/





Posted by chacolina
Study/Actionscript 3.02009. 2. 15. 21:20
URLLoader 클래스는 URL에서 텍스트, 이진 데이터 또는 URL 인코딩된 변수 형식으로 데이터를 다운로드합니다. 이것은 텍스트 파일, XML 또는 동적 데이터 기반 응용 프로그램에서 사용되는 기타 정보를 다운로드할 때 유용합니다.


Package : flash.net
Class : public class URLLoader
Inheritance : URLLoader - EventDispatcher - Object


URLLoader : 주문자
데이터가 도착하고 나면, 주문자의 손에 데이터가 들어간다. ...urlLoader.data
1. Data가 도착하면 먼저 complete로 받고
2. urlLoader. data로 도착한 Data가 들어간다.
3.URL 경로명에는 URLRequest가 들어간다.
4.URLRequest는 택배아저씨정도로 이해하면 된다.
5.3.0에서는 URL을 연결할 경우 항상 URLRequest로 링크를 걸어준다.
(참고) 이미지를 로드할 때는 Loader, 데이터를 로드 할 때는 URLLoader를 쓴다 비교하여 공부해본다.

       




Posted by chacolina
Study/Actionscript 3.02009. 2. 15. 19:07
XML은 쓰기쉽기 때문에 많이 사용. 웹 2.0 데이터 통신은 XML을 위주로 하므로 잘 알아두어야 합니다.


E4X : EmacScript for XML ---->.(dot)으로 서술하는 방식을 말한다.
(데이터기반 프로젝트인 경우 이 방식으로 제작하지 않으면 웹상에서 쓰기 불편하다.)

**'플렉스는 기본적으로 XML 파서와 XML 을 처리할 수 있는 E4X(ECMAScript for XML) 와 같은 편리한 API 를 제공하므로 XML 로 리턴되는 데이터는 쉽게 처리하여 화면으로 보여줄 수 있다.'

- 예제로 배우는 Adobe 플렉스 2

**'E4X 를 사용하면 XML 을 마치 일반적인 오브젝트를 다루듯 사용할 수 있다. 다음과 같이 오브젝트의 속성에 접근하는 방식과 유사한 방식으로 각 요소 노드에 접근할 수 있다.'
- Flex 3 Knoehow Bible

XML의 특징

1. 노드(node), 엘리먼트(element ) : <노드명>값</노드명>

2. 최상위노드는 1개만 존재해야 한다..
3. 같은 노드명이 중복되면, 배열처럼(XMLList) 처리한다. (실제 배열은 아니나 배열처럼 처리하는 것이다. 이를 XMList라 함)
4. <font  size='20'>호랑이</font> 에서 size는... attribute라 한다.


XML 표기법

var  xml: XML = new XML:
var  xml: XML = <main> 

두 표현 모두 가능하다.




==========================
*E4X란?
*The E4X approach to XML processing
*
Flash.xml
==========================








Posted by chacolina
Study/Iphone_SDK2009. 2. 15. 03:22
아이튠즈 미국계정 만들기(1) (미국계정생성) 클릭
아이튠즈 미국계정 만들기(2) (한국카드결제) 클릭

우리나라 계정으로는 사용상 제약이 많기 때문에 미국계정을 사용하는 것이 좋다.
문제없이 미국계정을 만들려면 몇가지 단계가 필요한데 위의 블로그를 방문하면 상세하게 기술되어있다.
Posted by chacolina
Study/Maxmsp&jitter2009. 1. 27. 16:50
Study/Iphone_SDK2009. 1. 13. 17:52

OOP의 3개의 기둥  Encapsulation , Inheritance , Polymorlphism

1. Encapsulation - 클래스 내부의 정보를 외부에서 감춘다
2. Inheritance - 상속, 중복된 코드를 최대한 제거한다.
3. Polymorphism - 중복제거를 위해서 상속을 받았는데 , 파생된 클래스는 같은 이름의 메소드로 다른 행동을 하고 싶다.


1. Encapsulation
캡슐화의 최대의 목적은 클래스의 내부의 내용이나 구현을 외부에게 감추어라, 이다.  왜? 클래스 내부의 구현을 외부에 감추어야 할까? 클래스란 실세계 오브젝트가 추상화된 개체이다.
집 이라는 클래스 개체에 '출입문번호'라는 개체가 있을때 , 그 집에 사는 사람(클래스 내부의 멤버)는 출입문 번호를 알아야할 필요가 있지만, 대한민국의 모든 사람이 우리집의 출입문 번호를 알게 된다면 , 우리집이 안전해 지지 않는다.

하지만, 클래스는 다른 클래스와 이야기를 할 필요가 있다. 예를 들어 친구가 집에 놀러 왔는데 나는 밖에 있다. 친구는 우리집 '출입문번호'를 알고 있을 필요가 없지만, 집에 들어가서 기다리라고 말할때에는 친구에게 번호를 가르쳐 줄수가 있어야 한다.
이럴때에 인터페이스의 한가지 인 public 한정자로 외부에 정보를 공개하는 것이다.

다시 정리를 하자면, 클래스에서 일을 하기 위해서는 멤버변수(field)가 있어야 하며, 기본적으로 private으로 사용한다. (C#에서 한정자를 정의 하지 않으면 기본값이 private인 이유가 바로 이 때문이다.)
외부에 정보를 공개해야할 필요가 있다면 public 한정자의 property의 get, set을 이용하여, 외부에 노출하면 된다.

그럼, 행동(method)의 경우에는 어떨까, '나'라는 클래스가 있을 때 , '화장실에간다' 라는 메소드가 있다고 가정하자, '화장실에간다'라는 method를 외부에서는 알필요가 없다, 나의 내부의 행동을 정의 하는 것을 private 한정자로 외부로 부터 감춘다.
외부에서 '나'에게 말을 걸어야 할 필요가 있다면, 이는 public method로 선언 되어야 할 것이다.

클래스 내부의 메소드들 사이에서도 서로가 알아야할 필요가 없다면, 서로가 모르게 하는 것이 내부 구현의 수정에 더욱 용이하다.


2. Inheritance
여러개의 객체를 정의하다보면 , 거의 같은 멤버변수와 멤버메소드를 가지는 클래스가 생겨 날 수 있다.
이런 경우에 중복(duplicate) 코드가 많이 생성되게 되며, 이는 나중에 유지관리 하게 될대, 또는 구현이 변경될 때 장애물이 된다.
이런 경우를 제거하기 위해 중복 변수나, 메소드를 상속으로 생성한다.
상 속을 이용하면 클래스의 일관성 유지에도 도움이 된다.  주의할 점, 상속은 코드 중복을 제거하고, 구조를 일관성 있게 가져가는 중요한 도구이지만, 파생관계가 명확하지 않은 객체에 상속을 적용하면, 관리할수 없을 정도로 복잡성이 높아진다.
상속을 사용할때에는 생각보다 많은 검토가 필요하다.

3. Polymorphism
 다형성은 같은 형태의 객체가 여러가지 형태의 모습으로 작동한다, 는 뜻이다. 언뜻 이해하기가 어려운데, 부모 클래스가 있고, 상속을 받아 구현된 클래스들이 있다면, run-time 시에 인스턴스를 서로 교환해서 일을 할수가 있다.
이를 외부에서 볼때에는 같은 클래스 인스턴스로 보이는 녀석이 다른 녀석으로 바뀌어 있는 것이 된다.

class Car{
protected int speed;
public void Start()
{
 //시동을 건다.
}

public void Stop()
{ // 시동을 끝다.}

// 기본 Car 클래스는 속도가 5씩 증가 된다.
public void SpeeedUp(){ speed+=5;}

}


//상속 받은 SportsCar 는 속력이 10씩 증가한다.
class SportsCar:Car
{
public new override SpeedUp(){ speed+=10;}
}

//상속 받은 Truck은 속력이 2씩 증가한다.
class Truck:Car
{
public new override SpeedUp(){ speed+=2;}
}

SportsCar와 Truck은 speed 멤버와 , Start(), Stop()을 명시적으로 코딩하지 않았지만  Car로 부터 상속받음으로써 명시적으로 코딩한 것과 같다.

하지만 빠른 스포츠카는 SpeedUp()이 실행될때 Car로 부터 생성된 인스턴스와는 다르게 속력이 10씩 증가하며, 느린 Truck은 가속페달을 밟을 때 2씩 증가 한다.


이처럼 위의 3가지는 OOP를 구현하는 강력한 도구이다. 이 도구를 적절하게 이용하는 방법은 계속되는 포스트에서 알아보자 ^^

Posted by chacolina