블로그 이미지
'무른모'란 부드럽다라는 뜻을 가진 '무르다'라는 말과 도구, 연장을 뜻하는 '연모'라는 순 우리말의 합성어로 소프트웨어를 말합니다. seanhigher

카테고리

분류 전체보기 (161)
Blog srart (16)
Dev Center (94)
Real Life (13)
Mac life (21)
Naver life (17)
Total652,955
Today8
Yesterday77
어떤 플랫폼이던지 개발을 하기 위한 개발 환경을 구성하는 것은 가장 먼저 선행되어야 할 일이다. 안드로이드는 아이폰과 같이 어떤 특정 기기를 지칭하는 것이 아닌 어플리케이션이 실행하기 가능한 환경인 모바일 OS를 말하는 것이다. 안드로이드 OS에서 실행되는 어플리케이션을 만드는 것은 안드로이드 SDK 를 설치해야 비로소 가능한 것이다.





안드로이드 개발을 위한 준비.
안드로이드 OS 자바언어를 기반으로 하여 만들어졌다. 그렇기 때문에 안드로이드 어플리케이션을 개발하기 위해서는 자바 JDK 가 설치되어 있어야 한다. 안드로이드의 장점은 유연함이라고 할 수 있다. 자바를 기반으로 하기 때문에 자바를 능숙하게 다룰줄 아는 개발자라면 훨씬 더 쉽게 접근이 가능할 것이다. 또한 자바를 개발하는데 가장 많이, 그리고 유용하게 사용되는 이클립스를 동일하게 사용한다. 새로운 개발툴을 익히지 않아도 된다는 이점이 있다. 자바는 http://java.sun.com 에서 이클립스는 http://www.eclipse.org 에서 다운로드 받을 수 있다.


안드로이드 SDK 다운로드.
맥환경에서 JAVA는 이미 기본적으로 설치되어 있기 때문에 자바를 따로 설치할 필요는 없다. 이클립스는 설치할 필요없이 다운로드를 받아서 그대로 실행이 가능하기 때문에 어렵지 않다. 하지만, 더 확실하게 하고 싶다면, 이전의 '이클립스 설치하기' 포스팅을 참고하여 설치하도록 한다. 안드로이드 SDK 는 이클립스, JDT 플러그인, WST 의 구성으로 이루어진다. JDT 와 WST 는 이클립스에 기본적으로 포함되어 있기 때문에 따로 설치를 하지 않아도 된다. 우리가 설치해야 할것은 안드로이드 SDK 와 ADT 이다. ADT 는 플러그인의 형태로 배포되고, SDK 는 압축파일의 형태로 배포된다. 먼저 안드로이드 개발자 페이지에서 안드로이드 SDK 를 다운로드 받도록 하자. 안드로이드 개발자 사이트는 http://developer.android.com/ 이다.


그림1. 안드로이드 개발자 사이트

오른쪽의 'Download' 아이콘을 클릭하여 다운로드 페이지로 이동한다.


그림2. 다운로드 페이지

자신의 플랫폼에 맞는 SDK를 다운로드 받도록 한다. 압축파일로 되어 있는데 다운로드를 완료한 후 적당한 곳에 압축을 풀어 놓도록 한다.


안드로이드 ADT 플러그인 설치
안드로이드 ADT 플러그인은 안드로이드의 개발 환경을 통합해주어 더욱 효율적인 개발을 가능하게 해준다. JAVA가 설치되어 있고, 안드로이드 SDK를 다운로드 한 상태이어야 한다.


그림3. 이클립스 플러그인 설치

안드로이드 ADT 를 설치하는 것은 다른 플러그인을 설치하는 것과 별반 다르지 않다. 'Help' -> 'Install New Software' 를 선택한다.


그림4. 플러그인 설치 URL 입력

Install 창이 나타나면 오른쪽 위에 있는 'Add' 버튼을 눌러서 안드로이드 ADT 를 설치하기 위한 정보를 입력하도록 한다. 이름은 안드로이드 ADT를 구분하기 위함이기 때문에 어느것으로 해도 상관없다. Location 항목에는 'http://dl-ssl.google.com/android/eclipse' 를 입력하고 'OK' 버튼을 누르면 입력한 URL 에서 설치가능한 플러그인을 찾게 된다.


그림5. 업데이트 가능한 플러그인 항목

'Next' 버튼을 누르면 설치과정이 진행된다.


그림6. 라이센스 동의

라이센스에 대한 내용을 확인해 보고, 동의를 한 후 설치를 진행한다. 설치가 완료된 후에는 이클립스를 재시작하도록 해야 설치된 플러그인이 적용된다.


ADT 플러그인 업데이트.
안드로이드 SDK 와 ADT 를 다운로드 받고 설치를 완료했다면 이제 이것들이 설치되어 있다는 것을 이클립스에 알려주어야 한다.


그림7. 환경설정 메뉴

재시작한 이클립스의 Eclipse -> '환경설정' 을 선택한다.


그림8. 안드로이드 설정

이클립스의 전체적인 환경을 설정할 수 있다. 왼쪽의 목록을 보면 다양한 항목들에 대해서 환경설정을 선택할 수 있는데, 윗 부분의 안드로이드를 선택하도록 한다. 처음 실행하는 것이라면 위와 같은 메시지가 나올 것이다. SDK Location 이 제대로 설정되어 있지 않을때 나오는 메시지이다. 'OK' 를 눌러서 무시하고 'Browse...' 버튼을 눌러서 다운로드 받은 안드로이드 SDK 의 Location 을 설정해준다.


그림9. 안드로이드 SDK 가 있는 폴더

Location 은 파일을 선택하는 것이 아니고, SDK 가 있는 폴더를 선택해주면 된다. 'Apply' 버튼과 'OK' 버튼을 차례로 눌러서 적용하도록 한다.


AVD Manager 설치
이제 안드로이드 개발환경을 구축하는 마지막 단계에 이르렀다. SDK, ADT 는 안드로이드 개발을 도와주지만, 실제적으로 테스트를 해볼 수는 없다. AVD 는 개발하고 있는 안드로이드를 실행하고 테스트 할 수 있는 가상 머신을 만들어준다.


그림10. 안드로이드 ADT 플러그인을 설치한 후

차례대로 안드로이드 ADT 플러그인을 설치했다면 위의 아이콘이 생기는 것을 볼 수 있다. 이것을 클릭하도록 한다.


그림11. 안드로이드 SDK, AVD 매니져

왼쪽의 목록 중에서 'Available Package' 를 선택하여 설치 가능한 목록을 확인한 후 설치하도록 한다. 안드로이드OS 는 지금까지 2.1 버전까지 나와있다. 하지만, 각 버전별로 호완성 문제가 있고, 개발에 있어서 차이가 나기때문에 처음 개발을 할때 잘 선택하여야 한다.

'Dev Center > Android Dev' 카테고리의 다른 글

안드로이드 프로젝트 시작.  (0) 2010.05.09
안드로이드 SDK 설치하기.  (10) 2010.05.08
Posted by seanhigher

댓글을 달아 주세요

  1. 2010.05.29 01:15 엄세은  댓글주소  수정/삭제  댓글쓰기

    안드로이드 ADT 플러그인 설치 << 는 어디루 가야되나여 ㅠㅠ

    • 2010.05.31 19:31 신고 seanhigher  댓글주소  수정/삭제

      아~ ADT = SDK 라고 생각하시면 되요~ 안드로이드 SDK는 홈페이지에서 다운받아야 하고, 그걸 플러그인으로 설치하는 건 소프트웨어 업데이트에서 하시면 됩니다.
      'Help' -> 'Install New Software...'

  2. 2010.06.03 10:09 날고싶은곰  댓글주소  수정/삭제  댓글쓰기

    안드로이드 sdk까지 다운받았는데 ADT에서 저화면은 SDK를 실행시켰을때 나타나는 화면인가요?
    제가 실행시킨 SDK와는 다른듯해서요

    • 2010.06.03 19:11 신고 seanhigher  댓글주소  수정/삭제

      안드로이드 SDK 를 다운받으신 후에 위에 설명대로 플러그인을 설치하셔야지 위의 그림이 나오게 됩니다. 순서대로 하시면 어렵지 않게 설치하실 수 있을듯... 혹시 안된다면 다시 문의 주세요~ ^^

  3. 2010.06.30 01:16 신고 topi  댓글주소  수정/삭제  댓글쓰기

    안드로이드 SDK 설치하는 과정에서 안되는 분이 많은것 같아서 트랙백 걸어둡니다 ^^

  4. 2010.07.12 21:26 ㅋㅋㅋ  댓글주소  수정/삭제  댓글쓰기

    감사합니다 ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ

  5. 2010.07.18 19:48 플러그인추가  댓글주소  수정/삭제  댓글쓰기

    계속 이클립스가 sdk를 못 잡아내는 듯합니다..
    무슨 방법 없을까요... 지금 지우고 깔기 반복하고 있습니다...

    • 2010.07.19 18:04 신고 seanhigher  댓글주소  수정/삭제

      죄송합니다.. 정확히 어떤 문제인지 짐작이 되지 않네요... SDK 는 직접 다운로드를 받으시고, 그 디렉토리 경로를 설정해 주는 것인데... 그림8에서 적용이 안된다는 것인지, 그림9의 디렉토리를 찾을 수 없다는 것인지, 좀더 자세하게 알려주시길 바랍니다. ^^;

  6. 2010.09.14 13:32 myuniverse  댓글주소  수정/삭제  댓글쓰기

    JAVA를 이제 막 시작했는데... 안드로이드에 관심이 가더라구요 ㅎ 설치 방법을 찾고 있었는데.. 감사히 봤습니다~~~~

내가 가지고 있는 정보를 어디론가 보낸다던지, 가지고 있는 파일을 삭제한다는 것은 간단해 보일 수도 있는 작업이다. 하지만, 그 정보가 나의 모든 재산을 누군가가 가로챌 수 있는 정보라면? 내가 꼭 기억해야 할 사실을 삭제되어야 한다면? 매우 중요한 사항을 결정하게 될때, 그것을 다시한번 확인하게 해주는 것은 불의의 사태를 막는 하나의 방법으로 사용될 수 있다.



액션시트와 경고창.
액션시트와 경고창은 그 근본이 크게 다르지 않다. 사용자로부터 지금 하고자 하는 사실이 확실한지를 확인해주는 역할을 하게 된다. 사용자의 입력을 받는 경우라면 버튼을 사용해도 되는데, 궂이 액션시트라는 것과, 경고창이 왜 필요할까? 그것은 선택을 받아야 하는 정보가 어플리케이션을 진행하는데 있어서 꼭 피요한 정보이기 때문이다. 만약 화장실을 가야 하는데 사용자가 남자인지, 여자인지 알려주지 않았다면 어디로 들어가야 할찌 모르고 고민을 하게 된다. 이럴땐, 액션시트를 열어서 '남자' 또는 '여자' 둘중에 선택할 수 있도록 만들어야 한다. 그리고 경고창은 매우 중요한 결정을 할 때 사용될 수 있다. 내가 내년까지 기억해야 할 정보를 깜빡하고 삭제하려고 한다면, 경고창을 보여주면서 그 기록에 대해 다시한번 확인시켜준다.


레이아웃 디자인하기.
새로운 프로젝트를 'alermTest' 란 이름으로 생성한다. 종류를 View-based Application 으로 선택한다. Resources 폴더 안에 있는 'alerm-TestViewController.xib' 파일을 더블클릭하면 인터페이스 빌더를 실행할 수 있다. 레이아웃은 매우 간단하다. 화면의 가운데에 'action' 이라는 버튼을 한개 가져다 놓고, 이름을 'action' 으로 바꾸어주면 끝이다. 인터페이스 빌더를 실행한 후, 라이브러리에서 버튼을 드래그 해서 뷰 영역으로 옮겨놓은 일은 어렵지 않을 것이다.


그림1. 인터페이스 디자인


아웃렛과 액션을 설정하는 간편한 방법.
아웃렛과 액션을 생성하기 위해서는 Xcode 창에서 각각의 소스코드를 입력해서 작성해 주어야 인터페이스 빌더의 화면에 나오게 되었다. 이렇게 직접 소스코드를 입력하는 것이 쉬운 방법일 수도 있겠지만, 더욱더 간단하게 마우스 클릭만으로도 아웃렛과 액션을 생성하는 것이 가능하다.


그림2. 인터페이스 빌더에서 액선, 아웃렛 선언.

라이브러리 윈도우를 보면 맨 위에 Library, Classes, Media 의 세가지 탭이 있는데 이중에 Classes 항목을 선택한다. 항목을 선택하면 바로 아래에 라이브러리들이 나오게 되는데 우리가 사용하게 될것은 ViewController 이므로 alermTestViewController 항목을 선택하도록 한다. 가장 아래부분에는 선택된 항목의 정보가 간단하게 나오게 된다. 먼저 액션을 추가하기 위해 가장 오른쪽의 'Actions' 항목을 선택한다. 아래의 '+' 버튼을 클릭하여 새로운 액션을 추가, 이름을 변경해준다. 아웃렛을 추가하기 위해서는 'Outlets' 항목으로 이동해야 한다. 액션을 추가할때와 마찬가지로 '+' 버튼을 클릭하여 새로운 아웃렛을 추가하고 이름을 변경하여 준다. 이것으로 새로운 액션과 아웃렛의 생성이 간단하게 마무리 되었다.


액션, 아웃렛 이어주기.
액션과 아웃렛을 선언만 한다고 해서 사용이 가능한 것은 아니다. 이것을 사용할 수 있도록 서로 연결해 주는 작업이 필요하다.


그림3. 아웃렛 연결.

'View' 윈도우에서 버튼을 선택한후, 'Connections' 윈도우를 연다. 아래쪽을 보면 'Referencing Outlet' 항목의 'New Referencing Outlet' 을 선택하여 아웃렛을 추가하도록 한다. 오른쪽에 있는 원에 마우스 커서를 가져가면 십자가 모양으로 변하게 되고, 그것을 끌어다가 메인 위도우의 File's Owner 아이콘으로 가져다 놓는다. 그러면 위의 그림과 같이 아웃렛으로 선택하 수 있는 항목이 나타나게 되는데, 이미 만들어 놓았던 아웃렛인 'actionButton'을 선택하도록 한다.


그림4. 액션 연결하기.

액션을 연결하는 방법도 아웃렛을 연결하는 것과 거의 동일하다. 단지 항목을 'New Referencing Outlet' 항목이 아닌, 'Events' 항목에서 선택을 한다는 것이 다르다. 버튼을 클릭하는 것이기 때문에 'Touch Up inside' 의 항목을 끌어다 File's Owner 아이콘에 가져다 놓는다. 그리고 선택할 수 있는 액션 항목이 나타나는데, 이전에 선언한 'actionsh' 액션을 선택하도록 한다.


인터페이스 빌더로 소스파일 생성.
아웃렛과 액션을 선언하고 연결하는 일을 마무리 지었다. 하지만, 이상태에서는 다시 Xcode 로 돌아가도 소스코드에는 변화가 없다. Xcode 의 내용이 인터페이스에 반영되기 위해서는 소스코드를 저장하기만 하면 바로 적용이 가능했지만, 반대로 인터페이스 빌더의 내용을 소스코드에 반영하기 위해서는 인터페이스 빌더가 소스코드를 작성하는 과정이 필요하다.


그림5. Write Class Files 작업.

alermTestViewController가 선택된 상태에서 맨 왼족 아래의 메뉴(톱니바퀴 모양) 버튼을 클릭하면 위와 같은 메뉴가 나오는것을 볼 수 있다. 윗부분의 'Write Updated Class Files' 버튼을 클릭하여 변경된 사항을 소스코드에 적용할 수 있다. 파일은 'alermTestViewContoller.m' 파일을 선택하고 'Replace' 버튼을 선택하여 새로운 내용으로 대체하도록 한다. 이제 소스코드를 보면 변경된 내용이 적용되어 있을 것을 볼 수 있다.


액션시트 델리게이트.
델리게이트는 다양한 객체와 클래스, 메소드들을 묶어서 다양한 행동을 확장해 주는 역할을 한다. 또, 액션시트와 경고창을 사용하기 위해서는 컨트롤러 클래스가 델리게이트를 사용해야 하는데, 'UIActionSheetDelegate' 라는 프로토콜을 따르도록 만들어 주어야 한다. 델리게이트를 선언해주기 위해서는 클래스명 다음에 '<UIActionSheetDelegate>' 를 추가해 주기만 하면 된다.

@interface alermTestViewController : UIViewController
<UIActionSheetDelegate> {
    IBOutlet id actionButton;
}



액션시트 추가하기.
액션을 통해서 무언가 실행이 되게 하기 위해서는 액션메서드를 구현하는 과정이 필요하다. 또한 액션시트가 닫힐때 이루어지는  액션 메소드도 필요하다.

@implementation alermTestViewController
- (IBAction)actionsh:(id)sender {
    UIActionSheet *actionSheet = [[UIActionSheet alloc]
                                  initWithTitle: @"Are you sure?"
                                  delegate: self
                                  cancelButtonTitle: @"No way!"
                                  destructiveButtonTitle: @"Yes, I' sure!"
                                  otherButtonTitles: @"second", @"third", nil];
    [actionSheet showInView: self.view];
    [actionSheet release];
}

위의 소스틑 액션시트를 만들어 준다. 액션시트는 UIActionSheet 클래스로 선언되어진다. 액션시트가 가지게 되는 다양한 인자가 있는데 첫번째로 'initWithTitle' 는 액션시트의 제목의 내용을 나타낸다. delegate 항목은 시트에 있는 버튼이 눌려졌을때 알려주는 역할을 하게 된다. self를 선언함으로 자기 자신을 호출하게 된다. 액션시트에는 취소하는 항목을 기본적으로 가지게 되는데, 'cancelButtonTitle' 는 이것을 설명하는 문구를 정하게 된다. 이와 반대로 'destructiveButtonTitle' 는 실행 버튼을 생성해주며, 사용될 문구를 정할 수 있다. 마지막에 있는 'otherButtonTitles' 는 더 추가되는 버튼을 표현하게 되는데, 마지막을 의미하는 'nil' 이 나타나기 전까지 여려개를 늘릴 수 있다. 액션시트에 대한 정의를 마무리 짓고, 'actionSheet showInView' 를 통하여 액션시트가 화면에 보여지도록 한다. 버튼을 누르면 나타나는 액션시트를 구현한 것이다.


경고창 추가하기.
경고창은 액션시트와 거의 비슷하다. 인자의형태나, 구성 또한 비슷하다. 단지 'UIActionSheet' 대신에 'UIAlertView' 를 사용한다는 것이 다르다. 다음의 소스를 위의 소스 다음에 추가하도록 한다.

- (void)actionSheet: (UIActionSheet *)actionSheet didDismissWithButtonIndex: (NSInteger)buttonIndex {
    if (buttonIndex != [actionSheet cancelButtonIndex]) {
        NSString *msg = nil;
        msg = @"You went OK.";
        UIAlertView *alert = [[UIAlertView alloc]
                              initWithTitle: @"Something was done"
                              message: msg
                              delegate: self
                              cancelButtonTitle: @"Paw!"
                              otherButtonTitles: nil];
        [alert show];
        [alert release];
        [msg release];
    }
}

'actionSheet: didDismissWithButtonIndex' 는 UIActionSheetDelegate 메소드 중 하나이다. 위의 소스에서는 이 메소드를 컨트롤러 자체로 설정하였기 액션시트의 버튼이 눌려짐과 동시에 실행이 되는 메소드가 되는 셈이다. 액션시트의 다양한 버튼중에서 어떤 버튼이 눌려졌는지 알기 위해서는 buttionIndex 의 인자를 통해 접근이 가능하다. 이번에 작성한 소스에서는 취소 버튼 외에는 특별히 인자를 구별할 필요가 없다. 그렇기 때문에 '[actionSheet cancelButtonIndex]' 만 확인을 해주면 된다. 나머지 인자는 액션시트의 인자와 동일한 역할을 하게 된다. 'message' 는 제목 이외에 추가적인 설명을 더해준다. 경고창의 경우에는 'self.view' 대신에 'show' 만을 사용했는데, 이것은 액션시트의 경우는 부모뷰에 연결되어 있는 것이고, 경고창은 독립적으로 사용되기 때문이다.


시뮬레이션.
액션시트와 경고창에 대한 작업이 모두 완료되었다. 이제 'Build and Run' 버튼을 눌러서 실행을 해보도록 하자.


그림6. 시뮬레이션

가장 왼쪽에 있는 화면은 맨 처음 어플리케이션을 실행했을 경우에 나타나게 되는 화면이다. 가운데 있는 버튼을 누르면 가운데 화면과 같은 액션시트를 보게 될 것이다. 액션시트에서는 "No way!" 버튼만 취소 버튼으로 설정해 두었기 때문에 모두 동일한 결과를 보여주게 되는데, 'Yes I'm sure!', 'second', 'third' 버튼을 누를경우엔 가장 오른쪽의 화면과 같이 경고창을 보여주게 된다. 'No way!' 버튼을 눌렀을 경우에는 다시 원래의 화면으로 돌아가게 된다.

액션시트와 경고창은 사용자에게 어플리케이션을 사용하는데 있어서 조금의 강제성을 부여한다. 하지만, 이것은 조금더 원할한 상호작용을 위한 필수 요소라고 할 수 있다. 내가 말하지도 않은 사실을 상대방이 알고있을리 만무하다.

Posted by seanhigher

댓글을 달아 주세요

우리나라 농민들의 역사가운데에는 나라를 지키기 위해 목숨을 버리길 아까워 하지 않은 수많은 농민군들이 있었다. 끝까지 그 마음을 가지고 나라를 지킨 농민 지도자들과, 점점 간신들과 같은 마음을 갖게 되는 농민 지도자들도 생겨나기 마련이었다. 구름을 버서난 달처럼, 구름에 가리워 은은하게 비추어야 할 달이지만, 구름을 떠나 강하게 비치는 달이 생기기도 마련이다.



구르믈 버서난 달처럼
감독 이준익 (2010 / 한국)
출연 황정민, 차승원, 한지혜, 백성현
상세보기



나라를 지키고자 하는 마음가짐.
임진왜란이 일어나기 직전의 조선은 그 모습은 뜨거운 태양볕 아래에서 녹아가는 눈사람의 모습과도 같은 형상이었다. 뜨거운 태양을 가리지 않는다면 녹아가는 눈사람을 막을 방법이 전혀 없었다. 풍전등화의 시대를 바라보고 있던 정여립, 황정학, 이몽학 세사람은 더이상 이들을 바라보고만 있을 수는 없었다. 나라를 구하고자 하는 뜻있는 농민들을 모아 대동계를 만들어 호시탐탐 우리나라를 노리고 있는 왜군들을 막고자 했다. 하지만, 이들을 눈엣 가시와 같은 존재로만 보이는 관료들이었다. 동인과 서인의 당파 싸움에만 익숙해 있던 그들은 대동계조차 자신들의 당파로 끌어들이고자 했지만, 대동계의 수장이었던 정여립은 그들의 요구를 무시하고, 나라를 지키고자 하는 의만을 추구하였다. 결국 대동계의 최고 수장인 정여립은 동인과 서인의 무관심과, 음모로 인해 역적으로 몰리면서 안타까운 죽음을 맞이하게 된다. 그후 왜군의 위협은 점점 다가오고, 이몽학은 새로운 대동계의 수장으로 등극하여 대동계의 새로운 변혁을 이끈다...


전설적인 맹인 검객 황처사.
맹인으로 살아가면서 나라를 사랑하는 마음이 간절했던 황정학은 어떻게 나라를 구하는일에 도움을 줄 수 있을까 하며 살아왔다. 청각과 후각의 감각은 맹인이라는 단점조차 가려버릴 수 있을만큼 뛰어난 실력을 가지고 있었다. 침술과 검술은 일반인들조차 부러워할만한 실력의 소유자이다. 친구와 나라에 대한 의리 또한 곧기로 유명하다. 절실한 친구인 정여립이 역적으로 몰려 죽어버리고, 이몽학이 새로운 수장이 되자 대동계를 떠나게 된다. 그리고 정여립의 죽음에 의문을 품게 되는데...


꿈속의 삶을 사는 이몽학.
이몽학에게 있어서 대동계는 나라를 구하고자 함이 아니었다. 자신의 야망과 꿈을 펼칠 수 있는 기회였던 것이었다. 대동계는 이몽학에게는 새로운 힘으로 다가왔던 것이었다. 나라의 올바르지 못한 정치인들을 물리치고, 새로운 세상을 만들고 싶은 욕망이 있었다. 자신을 생명만큼 사랑해주는 여인조차 마다하고, 함께 대동계를 이끌었던 동료도 그의 길을 막을 수는 없었다. 그에게는 이 나라는 구해야 할 대상이 아닌 정복해야할 목적과 같은 곳이 되어 있었다.


개자식(견자), 개과천선하다.
세도가의 서자로 태어나 온갖 구박과 천대를 받으며 살아온 견자, 한가지의 사건이 그를 변하게 만들었다. 대동계의 야망가 이몽학은 그에게 목표가 된 것이다. 황처사의 도움으로 목숨을 구하고, 황처사의 눈의 역할을 하게 되었다. 황처사와 함께 이몽학을 죽이기 위한 일행이 된 것이다. 여정중에 만나게 된 이몽학의 여인 백지에 대한 특별한 마음이 생기고...


한남자만 사랑한 여인, 백지.
야망가 이몽학에게는 한 여인이 있었다. 백지. 한 남자에게 버림을 받아 슬픔으로 하루하루를 살아야했다. 그리고 그 슬픔은 분노가 되어 그녀를 괴롭혔다. 우연히 만나게 된 견자를 따라 나서며 다시 자신을 사랑했던 한 남자에게 돌아가려한다. 자신의 남자를 찾아간 여정의 끝은...


한국 고전의 해학과, 액션이 곁들어진 멋진 영화!
최근들어 너무 과장된 홍보 영화만 봐서 그런지 실망스러운 영화를 많이 보게 되었다. 그러다 보게된 '구르믈 벗어난 달처럼'은 그동안의 실망감을 회복시켜주었다. 한국영화의 대들보와 같은 배우 황정민과 차승원이 함께 한 영화이기에 더욱더 많은 관심을 받았다. 그들은 역시나 관객들을 실망시키지 않았고, 영화를 보면서 울게, 웃게만들고, 감동을 주었다. 옛 조상들이 악극을 통해 보여주었던 해학과, 비유, 슬픔들이 그대로 묻어나 있으면서, 액션신들은 보는이들의 눈을 즐겁게 하기에 충분하였다.

Posted by seanhigher

댓글을 달아 주세요

변수의 사용범위를 결정하는것은 변수와 메모리의 사용을 확대하는 좋은 방법이다. 중복되어 변수를 사용하게 되는 경우, 원하지 않는 값이 저장되어 있거나, 유지해야 할 값들이 사라지는 것에 대해서 대비할 수 있다.



전역변수라고 모든곳에서 사용 가능한 것이 아니다.
일반적으로 전역변수라고 하면 함수가 아닌 곳에서와, 함수에서 사용가능한 것이라고 생각하기 쉽다. 물론 어느곳에서든지 동일한 값으로 사용이 가능한 전역변수이지만, 아무런 준비없이 사용가능한 것은 아니다.

<?
  $a = 100;

  function value_print() {
    echo "value of variable \$a is $a.";
  }

  value_print();
?>

위의 소스를 실행하면 원하던 결과 대신 다음과 같은 결과 값을 보게 될 것이다.

value of variable $a is .


위와 같은 결과가 나오는 이유는 함수 안에서의 $a 와 함수 안의 $a 는 서로 다른 변수로 인식이 되기 때문이다. PHP 는 특별히 변수를 선언하는 과정이 없이 변수를 사용하게 되는데, 이러한 특성이 함수안에서 적용되어 echo 안의 $a 는 이미 전역변수로 선언된 $a 와는 다른 새로운 변수로 선언되어 사용되기 때문에 아무것도 없는 'null' 값이 저장되는 것이다.


함수안에서 전역변수 사용하기.
그렇다면 함수안에서 전역변수를 사용하기 위한 방법은 없는 것일까? 함수 안에서 동일한 변수를 전역변수를 참조하도록 선언을 해주면 된다. 함수 안에서 전역변수를 선언하기 위해서는 global 키워드를 사용한다.

<?
  $a = 100;

  function value_print() {
    global $a;          // 전역변수 참조
    echo "value of variable \$a is $a.";
  }

  value_print();
?>

위의 소스를 실행하면 다음과 같이 생각했던 결과를 얻게 된다.

value of variable $a is 100.



$GLOBALS 연관 배열.
PHP 에서는 미리 $GLOBALS 라는 연관배열이 정의되어 있다. 만약 개발자가 전역변수를 참조하기 위해 global 키워드를 사용하게 되면 그 변수는 $GLOBALS 의 연관배열에 저장이 된다. 위와 같이 global $a 라고 선언한다면 $GLOBALS['a']라는 이름으로 저장되는 것이다.

<?
  $a = 100;

  function value_print() {
    echo "value of variable \$a is $GLOBALS['a'].";          // $GLOBALS 배열을 이용한 전역변수 참조.
  }

  value_print();
?>

위와 같은 방법으로도 사용이 가능하게 된다.

Posted by seanhigher

댓글을 달아 주세요

배열은 데이터를 저장하는데 있어서 매우 유용한 방법중의 하나이다. 데이터의 순서와 인덱스를 이용하여 같은 종류나, 묶어두어야 할 자료들을 손쉽게 구분이 가능하게 할 수 있다. 변수 형태의 구분이 없는 PHP 에서는 더욱더 유연하고 다양하게 배열의 변수를 사용할 수 있다.



Array 타입의 변수.
배열은 키(key)와 값(value)의 쌍으로 구성되어 있다. 배열을 구성하는 키는 정수형과 문자열로 표현이 가능하다. 특정한 문자열을 지정하지 않을 경우 '0' 부터 차례대로 키값을 가지게 되는데 이를 인덱싱 된 배열이라고 부른다. 배열의 키가 문자열의 형태로 된 첨자를 가지고 있다면 연관 배열이라고 한다.

<?
  $people[0] = "Betty";          // 인덱싱 배열(첫번째 원소)
  $people[1] = "Jane";          // 인덱싱 배열(두번재 원소)
  $people[2] = "Steven";       // 인덱싱 배열(세번째 원소)

  $people['man'] = "Charley";          // 연관 배열(key = 'man')
  $people['woman'] = "Grace";        // 연관 배열(key = 'woman')
?>

배열은 일반적인 변수형과는 근본이 다르다. 정수형, 실수형, 문자형과 같은 변수형은 기본적인 타입에 속하지만, 배열은 이 기본 형태의 데이터를 조금더 발전시킨 형태라고 할 수 있다. 또한, 키와 값이라는 쌍으로 이루어져 있기 때문에 일반적인 변수의 사용과는 조금은 다른 형태를 취하게 된다.

<?
  $subject = array(0 => "국어", 1 => "수학", 2 => "영어", 3 => "사회");
  $score = array('korean' => '89', 'math' => '93', 'society' => '87');
  $people = array('Betty', 'Jane', 'Steven');
?>

배열변수 '$subject' 같이 키가 숫자로 되어 있는 인덱싱 배열의 경우는 $subject[0], $subject[1] 과 같이 숫자의 첨자로 '국어', '수학' 과 같은 변수값에 접근 할 수 있다. '$score' 는 키가 문자열로 이루어져있는 연관배열은 'korean', 'math' 와 같이 문자열로 이루어진 첨자를 사용할경우엔 $score['korean'], $score['math'] 와 같은 방법으로 그 값인 89, 93 에 접근하여 사용할 수 있다. 만일 '$people' 와 같이 키를 선언하지 않은채로 데이터값만 갖는 경우에는 자동적으로 '0' 부터 차례대로 숫자키가 부여된 인덱싱 배열이 된다. 'Betty' 의 값에 접근하고자 한다면 $people['0']이 되며, 'Jane'에 접근하려고 한다면 $people['1'] 을 통해서 접근이 가능하게 된다.


배열을 사용하는 또 하나의 방법.
배열을 사용하게 될 경우에는 배열을 선언하면서, 그 값을 입력해 주어야 한다. 하지만, 그 값이 완전히 준비되어 있지 않을 경우에는 배열의 각 원소별로 값을 정해줄 수 있다.

<?
  $people[] = "Betty";
  $people[] = "Jane";
  $people[] = "Steven";
?>



배열의 배열, 다차원 배열
배열을 더 유용하게 만드는 것중 하나는 배열을 중첩하여 사용이 가능하다는 것이다. 물론 너무 많은 중첩을 하게 된다면 PHP를 해석하는 파서에 무리가 가겠지만, 적절한 중첩을 이용한 배열은 변수의 사용가능성을 수십, 수백배 배가 시켜준다. 배열을 중첩한 다차원 배열의 사용법은 일반적인 배열의 사용법과 같다. 단지, 배열의 값에 일반적인 값 대신 배열의 값이 들어간다는 것이 다를 뿐이다.

<?
  $people = array(
                 array('name' => 'Betty', 'sex' => 'female', 'age' => '24'),
                 array('name' => 'Jane', 'sex' => 'female', 'age' => '29'),
                 array('name' => 'Steven', 'sex' => 'male', 'age' => '28')
                 );
?>


위의 배열에서 steven 의 나이인 28 의 값에 접근을 하고 싶다면 $people[2]['age'] 와 같이 사용할 수 있다. 차수가 높아질수록 첨자가 하나씩 늘어나게 된다.

Posted by seanhigher

댓글을 달아 주세요

String 타입은 문자열의 집합이라고 할 수 있다. PHP 에서의 String 타입은 큰 따옴표와, 작은 따옴표의 종류에 따가 그 사용방법에 조금의 차이가 있다.


String 타입의 변수.
String 타입의 변수는 다음과 같이 선언될 수 있다.

<?
  $name = "Devist";
  $say = ' welcome to devist blog~ ';
?>


문자열 안에서 변수의 값을 출력하려면?
다양한 변수의형태를 통해서 값을 저장하고, 사용하였다. 하지만 변수라고 하는 값은 가변적으로 그 값이 출력되어 사용되어 질때 그 영향을 발휘하고, 필요성이 생기는 것이다.


큰 따옴표를 사용하는 String 변수.
큰 따옴표를 사용하는 변수안에서는 백슬래쉬 문자를 사용한 특수문자를 사용할 수 있다. PHP 는 스크립트 언어이기 때문에 HTML과 결합되어 사용되어 진다. 이렇게 HTML 태그과 결합되어 사용되면서 특수한 문자의 사용이나, 필요성이 많아지게 된다. 큰 따옴표 안에서 사용할 수 있는 특수 문자는 다음과 같다.

\n : 커서를 다음행으로 이동시킨다. 개행문자
\r : 커서를 현재 행의 맨 처음으로 이동시킨다.
\t : 커서를 탭만큼 이동시킨다.
\" : 큰 따옴표를 출력한다.
\\ : 백슬래쉬를 출력한다.
\$ : 달러문자를 출력한다.
\0 : NULL 값을 갖는다.

큰 따옴표를 사용한 스트링 변수는 그 안에서 사용된 변수의 값이 원래의 값으로 변환되어 나오게 되어 있다.

<?
  $age = 28;
  $say = "나의 나이는 $age살 입니다.";
  echo $say;
?>


위의 소스를 실행시키면 다음과 같은 결과가 나타나게 된다.

나의 나이는 28살 입니다.



작은따옴표를 사용하는 String 변수
작은 따옴표를 사용하는 변수의 경우에는 특수문자를 사용할 수 없게 된다. 큰 따옴표를 사용할때 가능하던 특수문자를 사용할 수 없지만, 특수문자들을 그대로 출력이 가능하게 된다. 하지만, 작은따옴표와 백슬래쉬의 두가지 특수문자만은 인식이 가능하다. 위의 소스를 작은따옴표를 이용하여 나타내면 다음과 같은 결과가 나타나게 될 것이다.

나의 나이는 $age살 입니다.


하지만 큰 따옴표를 사용하지 않고 작은따옴표만을 사용하여 나타내야 할 경우도 있을 것이다. 그럴 경우에는 어떻게 해야 할것인가? 스트링변수는 점 연산자형을 제공하고 있다. 각각의 문자열을 연결하기 위해 점(.) 연산자를 사용하여 이어주는 것이 가능하다.

<?
  $age = 28;
  $say = '나의 나이는'.$age.'살 입니다.';
  echo $say;
?>


스트링 변수는 문자열을 출력하기 위한 변수이기때문에 매우 중요한 변수이고, 자주 사용되어진다. 하지만, 큰 따옴표와 작은따옴표의 사용에 대해서 잘 구분하여 사용하지 않는다면 생각지도 못한 결과를 얻게 될 수도 있을 것이다.

Posted by seanhigher

댓글을 달아 주세요

프로그래밍 언어에 있어어 변수는 매우 중요한 요소이다. 변수가 없다면 프로그래밍이라는것 자체가 성립되지 않을 것이다. PHP 에서의 변수는 다른 프로그래밍 언어와는 차별된 유연성을 가진다. 이러한 사실 또한 PHP 를 매력적으로 만드는 요소이다.



이름만 봐도 변수인지 알 수 있다.
PHP 의 변수는 개발자가 아닌 어느 누가 봐도 단번에 변수 인지 알 수 있다. PHP 의 모든 변수 앞에는 '$' 표시가 포함되기 때문이다. 이름을 저장하기 위해 'name' 라는 이름을 가진 변수를 사용하고 싶다면 '$name' 라고 쓰면 된다.

<?
  $name = "무른모 공방";
  $address = "http://devist.tistory.com";
?>



아무거나 다 되는 변수!
PHP 에서의 변수 사용은 고민을 할 필요가 없다. 변수의 형태를 선언할 필요가 없기 때문이다. C 언어나 자바같은 경우는 변수를 사용하기 전에 사용하고자 할 데이터가 어떤 형태를 지니는지 곰곰히 생각해 봐야 했다. 하지만, PHP 에서는 그런 고민이나 걱정은 하지 않아도 된다. PHP 파서가 다 알아서 해주기 때문이다.

<?
  $number = 1028;
  $character = "ABC";
?>



형변환 함수? 그런거 몰라도 된다.
C나 자바같은 프로그래밍 언어에서는 문자의 형태로 받아진 숫자를 숫자의 형태로 바꾸기 위해서 다양한 함수들을 사용해야 했다. 이런 부분을 해결하기 위해 작성해야 할 코드도 적지 않은 부분을 차지하였고... 하지만, PHP 에서는 형 변환 함수에 대해서 공부해야 할 필요가 없다. 변수 자체에 형태를 선언해주지 않기 때문에 문맥의 상황에 맞추어서 자동으로 형변환이 이루어지게 된다.

<?
  $a = 100;
  $b = "이백";
  $b = 200;
  $sum = $a + $b;
?>


$a 는 100이라는 숫자를 받으므로 숫자형태의 데이터를 저장하는 변수가 된다. $b 는 "이백"이라는 문자를 받는 문자형 변수가 된다. 다음 줄에서 $b 는 200 이라는 숫자를 입력받게 된다. 200 이라는 숫자를 받았다고 해서 숫자형이라고 단정지을 수는 없기 때문에 여전히 문자형을 갖게 되지만, 다음줄에서 $b는 계산을 하기 위한 변수로 사용이 되기 때문에 그 순간부터 문자형에서 숫자형 변수로 형태가 바뀌게 되는 것이다.


PHP 언어의 변수형
PHP 에서는 변수의 형태를 파서가 자동으로 선언해주고, 변환해 주지만 어떠한 타입의 변수를 선언해 주는지에 대해서 알아볼 필요는 있다. 내가 입안에서 씹고 있는 음식이 무엇으로 만들어졌는지 모르는것과 아는 것에는 큰 차이가 있다.
boolean : true 와 false 값을 갖는 데이터 형이다.
interger : 정수의 값을 갖는 데이터 형이다. 시스템마다 저장할 수 있는 범위에 차이는 있지만, C 언어의 long 타입과 같다고 할 수 있다.
float : 부동소수값, 또는 실수의 값을 갖는 데이터 형이다.
string : 문자형태의 값을 갖는 데이터 형이다. C 나 JAVA 의 경우는 문자 하나와 문자열을 구분지어 사용하는데, PHP 에서는 문자와 문자열을 다르게 보지않고 동일한 형테의 데이터 형으로 본다.
array : 연관된 자료들의 집합을 나타낸다. C 나 JAVa 와는 다르게 한 배열에 속해있는 자료들의 형태가 같지 않아도 사용이 가능하다.
object : 오브젝트 타입의 클래스 객체를 참조하기 위한 변수 타입이다.
resource : mysql 이나 oci 와 같은 함수를 통해 연결된 데이터이터베이스 등 특별한 함수의 반환값이나, 외부 자원을 가리키는데 사용 가능한 데이터 타입이다.
null : 아무런 값도 갖지 않는 데이터 타입이다.




'Dev Center > PHP start' 카테고리의 다른 글

Arrary 타입 변수 사용하기.  (0) 2010.05.03
String 타입의 변수 사용하기.  (0) 2010.05.02
PHP 의 변수.  (0) 2010.05.01
timezone 설정하기.  (0) 2010.04.30
PHP 에 무슨 문제라도??  (0) 2010.04.29
HTML 과 PHP 함께 사용하기.  (3) 2010.04.27
Posted by seanhigher

댓글을 달아 주세요

최근에 달린 댓글

글 보관함