Header

  1. View current page

    딥뿔이 자라나는 노트

Profile_image?t=1225424611&type=big
나를 바꾼 똑똑한 생활 습관, 스프링노트 - 여러분도 지금 시작해보세요!
38

01 코코아와의 만남 - 난수 생성 애플리케이션

스프링노트 서비스의 첫 버전을 오픈하고, 조금 후 내 노트에 '여름프로젝트'라는 페이지를 만들었었다. 이 프로젝트의 목적은 코코아 기반 스프링노트 클라이언트 애플리케이션을 만드는 것이었다. 처음에 의욕적으로 시작했지만, 익숙치 않은 여러가지에 주춤거리다가 기억에서 지워져버렸다(그 때 툴바 만드는 방법만 알았어도 프로토타입이라도 완성했을텐데...). 당시 가장 힘들었던 것은 코코아에 대한 개념 탑재가 되어있지 않아 문서를 봐도 통 뭐가 뭔지 감을 잡지 못했다는 점이었다. 


시간이 흘러 어느 날 인사이트 출판사에서 코코아 프로그래밍 책을 발간한다는 정말 기쁜 소식을 들었다. 그리고 루비 세미나에서 이 책의 역자 박진형님을 직접 만나 튜토리얼 강의를 듣는 호사를 누렸다.


cover/cover/899126834X_1.jpg


요즘 틈나는대로 코코아 프로그래밍 책을 읽고 있다. Objective-C도 코코아도 처음인데, 무척 재미있다. Objective-C는 문법이 약간 어색하기는 하지만, 여러 면에서 동적인 면이 강하고 루비와도 유사한 면이 많다. 코코아는 내가 본 어떤 GUI 프레임워크보다 예쁘고 완성도도 높은 것 같다. 책을 읽어나가면서 책의 예제 프로그램을 루비 코코아로 옮겨볼 생각이다. 그리고 잠시 내려놓았던 여름프로젝트를 다시 시작해야겠다. 벌써 가을인데 :)


내가 처음으로 만들어본 코코아 프로그램은 바로 2장에 나오는 난수 생성 프로그램이다. 혼자서 어려울 뻔 했는데, 다행히 진형님이 기고한 글이 있어서 어렵지 않게 따라해볼 수 있었다.


참고: 루비로 만드는 아름다운 데스크톱 애플리케이션, Part 1: RubyCocoa 첫걸음 떼기


루비 코코아 설치

먼저 루비 코코아를 설치하기 위한 조건을 알아보자.


  • Mac OS X 10.4.8 or later
  • Xcode SDK


조건이 충족되었다면 홈페이지에서 유니버설 바이너리를 내려받아 간단하게 설치할 수 있다.


그림_6.png


소스 코드를 통한 설치나 최신 개발 버전 설치에 대해서는 여기 잘 설명되어 있다. 루비 인터프리터를 다른 경로에 새로 설치했다면 소스 코드를 통한 설치가 수월할 것이다. 참고로 필자는 소스 코드를 통한 방법을 택했는데, 전에 설치한 루비 인터프리터가 --enable-shared 옵션 없이 컴파일되었던 관계로 루비까지 다시 설치해야만 했다. 


  1. $ ruby install.rb config
    $ ruby install.rb setup
    $ sudo ruby install.rb install


잘 설치되었는지 알아보기 위해 간단한 예제를 실행해보자. (예제 출처: RubyKr 세미나 후기 & RubyCocoa Code Snippet 2 )


  1. require ‘osx/cocoa’
    speech = OSX::NSSpeechSynthesizer.alloc.initWithVoice(nil)
    speech.startSpeakingString("Hello, RubyCocoa!")


스피커로 흘러나오는 인사가 잘 들린다면, 루비 코코아가 성공적으로 설치된 것이다.


난수 생성 프로그램


2장 시작해보자!에 나오는 난수 생성 프로그램이다.


그림_10.png

책과 루비 코코아 튜토리얼을 따라하니 어렵지 않게 완성할 수 있었다.


  1. require 'osx/cocoa'

    class Foo < OSX::NSObject
      ib_outlet :textField
      ib_action :generate
      ib_action :send
     
      def awakeFromNib
        OSX.NSLog "Foo is awakend!"
        @textField.setStringValue(Time.now.to_s)
      end
     
      def generate(sender)
        OSX.NSLog "Generate button is pressed!"
        @textField.setStringValue(rand(100).to_s)
      end
     
      def seed(sender)
        OSX.NSLog "Seed button is pressed!"
        srand(Time.now.to_i)
      end 
    end


전체 소스 파일: random_number_generator.zip


후기

  • 새로운 것을 해보니 무척 재밌다.
  • 텍스트메이트와 Xcode, 인터페이스 빌더를 오가는며 개발하는게 조금 불편했다.
  • 인터페이스 빌더에서 생각보다 많은 일이 이루어진다는 점이 가장 특이했다. 마우스를 드래그해서 아웃렛을 지정하는 모습이 지금은 재미있는데, 나중에는 귀찮을 것 같다.
  • Objective-C의 명명 규칙을 따르다보니, 다소 어색하고 기존 코드와도 조금 다른 루비 코딩을 하게 된다.


다음으로 만들어 볼 예제는 4장의 02 컨트롤 다루기 - 한줄 말하기 애플리케이션이다(전체보기 - 루비 코코아 프로그래밍).



Tags

History

Last edited on 10/02/2007 14:25 by deepblue

Comments (0)

You must log in to leave a comment. Please sign in.