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


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


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 컨트롤 다루기 - 한줄 말하기 애플리케이션이다(전체보기 - 루비 코코아 프로그래밍).



6 Responses to “01 코코아와의 만남 - 난수 생성 애플리케이션”

  1. 재선아빠 Says:
    이제 코코아 개발자로 거듭나는 거야.. 가는거야 ㅠ
  2. “eskim” Says:
    (myRuby.net) 스프링노트 app라 참 기대되네요. 맥유저가 아닌 사람들을 위해 멀티플랫폼을 위해 wxRuby 사용은 어떠신지요? ^^;;
  3. deepblue Says:
    재선아빠// 콜!!
  4. deepblue Says:
    eskim// 회사에서 공식적으로 하는게 아니라, 개인 취미로 하는거라서요 ^^;;;; 윈도용 클라이언트는 천천히 준비하고 있습니다. 그 외 유닉스 계열은.. 음.. 또 좋은 해커분이 언젠가 만들어주시겠죠 :)
  5. 인사이트 Says:
    (myRuby.net) deepbule 님. 안녕하세요? 여름 프로젝트가 성공적으로 마무리되도록 '코코아 프로그래밍'이 유용하게 쓰였으면 좋겠네요.^^ 좋은 하루 보내세요~^^
  6. deepblue Says:
    인사이트// 책 정말 재밌게 잘 읽고 있어요. 요즘 너무 즐겁습니다. 감사합니다.

Leave a Reply

Website

Email