Architecture & Pattern2008. 5. 25. 12:39

Model View Controller의 약자로서 개발할 때 사용하는 패턴중에 하나이다.

MVC_다이어그램

MVC모델은 크게 3가지 그룹을 나누어 구성한다.
1) view는 유저에게 보여지는 최종 단계로서 RIA로서는 Flex나 실버라이트..일반 웹개발 언어로서는  Jsp...등을 둘수 있다. 이들은 유저의 반응에 대응하여 원하는 데이터나 형식을 디자인하여 보여주는 역할을 하게한다.
이곳에서 처리하는 반응/명령을 Controller에서 실행하도록 한다.

2) Model은 여러가지 데이터를 추출하거나 편집한 그룹을 말한다.
가령 view에서 고객연령와 성별을 구분하는 챠트를 보여주고 싶다면
사이트의 고객 명단이 전체를 customerAge.as라고 하고 이는 고객의 나이를 가져올수있는 클래스를 만들고,
성별 데이터만 구분하는 sexDistinction.as라는 클래스를 만들어 각각 실행하는 여부를 따로 두어 필요시 마다 실행하도록 한다.

* 각각의 모델에 해당하는 클래스는 자신의 역할/수행에만 충실하고 발생된 결과를 controller르 통해 view에서 구현하도록 하는 것이다.

DTO 패턴 : MVC구조에서 데이터를 넘겨주는 객체들의 구조이며,
주로 한번에 여러 데이터를 전달하고자 할 때 사용한다.
    - VO : Value Object (MVC구조에서 데이터의 정보를 표현하는 객체)
    - DAO : Data Access Objec (데이타 테이블에 접근하여 수정/삭제/삽입/검색등을 하는 객체)

3) Controller는 View와 Model사이에서 실행과 관리를 담당한다.
가령 View에서 발생한 이벤트에 해당하는 실행을 Model에서 찾아 실행시키고 그 결과를 View에서 처리하도록 한다. 주로 우리가 흔히 만드는 Manager등이 이에 해당한다.
Posted by 버터백통

조건문은 명령문의 실행을 논리적 결정하에 선택적으로 실행하도록 한다.

1) if문 : 한 두가지 이상의 조건을 체크할때 실행한다. 하지만 두가지 이상일 때는
switch문을 실행하는 것이 좋다.

- 구조식
if( 검사식 ){
    명령문 //검사식을 만족하면 실행
}

검사식의 조건에 참이냐 거짓이냐의 여부가 명령문의 실행 여부를 관리하게 된다.

추가로 else라는 구문을 더해서 위의 검사식에 만족(true)를 못하면 다음 코드블럭의 명령문을 실행하게 한다.
if( 검사식 ){
    명령문
}else{
  
명령문 //위의 검사식을 만족 못할 시 실행
}


또는 else에 if구문을 추가해서 다시한번 검사를 하기도 한다.
if( 검사식1 ){
    명령문
}else if( 검사식2 ){
  
명령문 //위의 검사식1을 만족 못하고 검사식2를 만족할 때만 실행
}
위의 식에서 검사식1과 검사식2를 모두 만족(true)못하면 두명령문 모두 실행하지 않는다.

* 효율적인 조건문 체크
else if를 사용하여 첫번째 검사식이 만족하면 다음 검사식은 실행하지 않는다.
따라서 상호 베타적인 조건식에서는 여러개의 if문을 사용하기 보다는 else if 를 사용하는 것이
효율적이다.


마지막으로 if구문과 else if 그리고 esle문을 사용한다면 else로 마무리 하여야 문법상 오류가 없다.
if( 검사식1 ){
    명령문
}else if( 검사식2 ){
  
명령문
}else{
  명령문
}




2) switch문 : 여러개의 조건을 체크하기 위해서 사용한다.
 if문이나 else if를 추가해서 사용하는 것보다는 비교적 읽기 쉽고 간단해진다.

- 구조식
switch( 비교대상){
 
  case 검사식:
             명령문
    case 검사식:
             명령문
    case 검사식:
             명령문
   
default:
             명령문
}
비교대상에 사용된 변수나 값이 case문의 검사식에 만족하면 해당 명령문을 실행시킨다.


* switch문은 만족된 case가 실행되면 switch문 본체에서 현재 만족된 case문 하단의 모든 case문이 실행하게 된다(default 포함)
switch( 비교대상){
 
  case 검사식:
             trace(1)
    case 검사식:  -> 만족
             trace(2)
    case 검사식:
             trace(3)
   
default:
             trace(4)

}
두번째 case에서 만족하게 되면 하위 모든 case가 실행하게 된다.
따라서 이를 방지하기 위해서는 break를 사용하여 실행을 중지하여야 한다. 주로 break는 마지막 실행문에서는 사용하지 않는다. 검사식이 마지막에서 실행할 때에는 이미 하위의 case가 없으므로 생략해 주는 것이 좋다.


가령 변수 a="flash"라고 할때 아래 명령문중에서 trace("플래시")가 실행하게 된다.
var a:String = "flash"
switch(a) {
    case "100" :
           trace("문자 100");
           break;
   
case "flash" :
           trace("플래시");
           break;
    case "플래시" :
           trace("flash");
           break;
    default :
           trace("다시 시도하여 주세요!");
}
위에서 변수 a의 값을 비교대상으로 지정하고 그 값을 각 case문에서 비교하게된다.
변수a의 값은 "flash"이므로 case "flash"에서 만족하게 되어 빨간색 부분이 실행하게 된다.


3) 삼항연산자 : 한 문장에서 조건 체크와 명령문을 만들어 사용한다.
변수명 = 조건식 ? 실행문1 : 실행문2;
조건식에 만족하면 " : " 왼쪽의 실행문1이 실행하고 만족하지 않으면 실행문2가 실행한다.

var a:Number = 10;
a == 10 ? trace("변수 a는 10이다") : trace("변수 a는 10이 아니다")
위와 같이 코딩하였을 때 a의 값은 10이므로 앞의 조건식을 만족하여 좌항(빨간색)의 명령문이 실행한다.

Posted by 버터백통

플랙스도 다른 언어와 마찬가지로 값을 비교하기 위해서는 등호/부등호를 사용하여 같은지 여부를 Boolean값으로 반환을 한다. 
이러한 등호/부등호 연산자는 값을 비교하기전에 두 값을 같은 데이터타입으로 변환시키고 서로의 값을 비교한다.
가령 10 == "10"은 서로 다른 데이터 타입이지만 반환은 true를 반환한다. 이는 엄격하지 않은 환경에서 실행하였을 때 데이터 타입을 같은 타입으로 변환 비교 분석하므로 데이터 타입조차 우선 비교하기 위해서는 strict모드를 사용한다.

우선 비교적 엄격하지 않은 환경에서 값을 비교시
a:Number = 10
b:String = "10"
trace( a == b ) //출력:true
위의 코드는 true를 반환한다. 보다 정확한 검사를 하고 싶으면 엄격(strict)한 비교연사자를 사용한다.
a:Number = 10
b:String = "10"
trace( a === b ) //출력:false
엄격한 비교연산자 "==="이나 "!=="을 사용하여 데이터 타입조차 체크한다면
위의 결과값은 false를 반환하게 된다.

하지만 기본적으로 플랙스빌더의 컴파일러는 default가 strict를 사용하고 있으므로
a:Number = 10
b:String = "10"
trace( a == b ) //출력:false
는 false를 반환하게 된다. 이는 strict한 조건을 체크하기 때문에 값의 비교에 앞서
데이터 타입을 먼저 체크하고 이를 반환하게 되는것이다.

또한 데이터 타입 검사는 is연산자를 통하여 수행하기도 한다.
a:int = 10
if( a is int ){
    trace("Int !!")
}
결과는 콘솔에 "Int !!"를 출력한다.

액션스크립트는 데이터 타입에 따라 서로다른 검사방법으로 조건을 체크한다.
* 기본 데이터 타입 : String , number , int , Boolean...
* 복합 데이터 타입 : object , Sprite , Array , ByteArray , BitmapData..
기본 데이터 타입의 검사방식은 그들의 값을 비교하게 된다.
var a:Numbar = 10;
var b:Number = 10;
trace( a == b ) // 출력 : true

그러나 복합 데이터 타입의 그들의 참조(reference)로 비교하게 된다.
var a:Array = ["a","b","c"];
var b:Array = ["a","b","c"];
trace( a == b ) // 출력 : false

var a:Array = ["a","b","c"];
var b:Array = a
trace( a == b ) // 출력 : true
결국 복합데이터 타입은 같은 참조를 가지고 있을 때에만 동일하게 취급된다.

Posted by 버터백통