메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

Jlet Programming의 시작(3) - Card 클래스

한빛미디어

|

2006-04-12

|

by HANBIT

6,120

제공: 한빛미디어 네트워크 기사

저자: 박건태, 김승엽
출처: Jlet으로 배우는 위피 프로그래밍(한빛미디어, 2005) 3장 중에서


Jlet Programming의 시작(1) - Jlet 응용프로그램 & Jlet 클래스
Jlet Programming의 시작(2) - Display 클래스

MIDlet을 경험해 본적이 있는 독자는 Canvas라는 클래스를 알고 있을 것이다. 위피에서 그 역할을 하는 것이 Card 클래스 이다.

자, 그럼 Card란 도대체 어떤 것인지 알아보도록 하자. 3.2절에서 액자의 역할을 하는 것이 Display 이고, 종이의 역할을 하는 것이 Card라고 했었다. 어쨌든 우리가 도화지가 있어야 무엇을 그리던지 할 것 아닌가? 그 역할을 하는 것이 Card클래스이다. 즉, 하얀 종이, 더 크게는 도화지, 캔버스지……확실하지는 않지만 그래서 MIDlet에선 Canvas라고 한 것 같다.

Card 역시 종이의 크기를 알 수 있는 getWidth(), getHeight() 메소드가 있다. 이제 이 백지 위에 잘 그려서 액자에 넣기만 하면 되는 것이다. 그런데 무엇으로 그릴 수 있을까? 그래서 준비된 붓이 있으니 그것이 바로 Graphics 클래스이다. 그 붓이 어디 있는지 한번 찾아보자.

Card클래스는 추상 클래스이기 때문에 paint(Graphics g)메소드를 반드시 구현해야 한다. 왜 paint메소드를 반드시 구현해야 하는지가 궁금할 것이다.

protected abstract void paint(Graphics g)

Card 클래스는 추상 클래스이다. 추상 클래스는 반드시 추상 메소드를 하나 이상 포함하고 있는데 추상 클래스를 상속 받으려면 반드시 추상 메소드를 재정의해야 한다. 위의 paint(Graphics g)메소드는 abstract로 선언 되어 있다. 그래서 반드시 구현해야 하는데, 앗! 여기에 붓이 있다! 그렇다. Graphics g를 매개 변수로 취하고 있다. 그렇다면 정답이 나온 것이다. 갑자기 Graphics클래스가 나오고 머리 속이 복잡하더라도 걱정하지 말자. 나중에 Graphics클래스에 관한 설명이 있을 것이다. 워낙 중요한 클래스라 좀 자세히 살펴봐야 하기에 잠시 미뤄두겠다.(Graphics클래스는 6장에서 자세히 다룬다.)

이제 종이 있겠다, 붓도 있겠다 잘 그려서 액자에 넣기만 하면 한 장의 멋진 프로그램이 될 것이다. 어떻게 넣을 것인가? Display 클래스의 public final void pushCard(Card c)가 있었다. 카드를 push! 하면 되는 것이다.

java.lang.Object
  |
  +--org.kwis.msp.lcdui.Card

Direct Known Subclasses: ProxyCard

public abstract class Card extends Object

[Card 클래스 계층도]

Card 클래스도 org.kwis.msp.lcdui 패키지에 있다. 그렇다면 역시 org.kwis.msp.lcdui.*를 import 시켜주면 될 것이다.

Card 클래스는 화면에 출력 될 수 있는 하나의 단위 클래스이다. 이 클래스는 화면에 출력할 수 있는 단위가 되며 한 화면은 여러 카드가 쌓인 스택으로 구성된다. 스택에 쌓인 여러 카드는 한 화면(Display)에 보여지며 한 카드는 여러 화면에 넣을 수는 없다. 카드는 앞서 살펴 봤듯이 화면상에서의 위치와 크기를 가지고 있으며, move나 resize메소드를 이용하여 그 위치나 크기를 변경할 수 있다.

카드는 사용자 입력을 받을 수 있는데 keyNotify, pointerNotify등 사용자에 의해서 불려지는 메소드가 있으며 모든 이벤트는 일단 스택 상위의 Card로 전달된다. 전달된 이벤트가 그 카드에서 처리를 한다면 위의 불려지는 메소드는 true를 돌려주며, 하위 Card는 이벤트를 받지 못한다. 그러나 반대로 false를 돌려주면 하위 카드에게 이벤트를 전달하며, 같은 식으로 이벤트를 받은 하위 카드는 true, false를 돌려준다. 이 과정은 맨 하위 Card까지 반복이 된다.

위의 개념을 아직 확실히 이해가 가지 않는다고 걱정할 필요는 없다. 지금은 단지 카드가 화면에 출력될 수 있는 하나의 단위 클래스라는 것만을 기억하자. 차후에 여러 예제소스를 다루다 보면 자연스레 알게 될 것이다.

이제 하나의 출력물을 위한 모든 준비가 끝났다. Card 클래스의 내부를 좀 살펴본 후 다음 절에서 첫 번째 Jlet프로그램을 만들어 보자.

[Card 클래스 주요 생성자]
public Card()
화면 크기만큼의 카드를 생성한다. 기본적으로 화면의 크기만큼의 카드를 생성한다. 이때 Display.getDefaultDisplay메소드가 돌려주는 Display의 크기로 잡힌다.
public Card(boolean bTrans)
화면 크기만큼의 카드를 생성한다. bTrans에 따라서 투명한 여부가 결정된다
public Card(Display d)
화면 크기의 카드를 생성한다.
public Card(int x, int y, int w,int h)
지정한 크기와 위치로 카드를 생성한다.
public Card(Display d, int x, int y, int w, int h)
지정한 display를 위해서 지정한 크기와 위치로 카드를 생성한다
public Card(Display d, int x, int y, int w, int h, boolean bTrans)
지정한 display를 위해서 지정한 크기와 위치로 카드를 생성한다.

매개변수
d        카드를 생성할 display.
x        Card의 display상에서의 x축 좌표
y        Card의 display상에서의 y축 좌표
w        Card의 폭

[Card클래스 주요 생성자]
protected abstract void paint(Graphics g)
Card의 내용을 그려준다. 응용 프로그램은 이 메소드를 꼭 구현해 주어야 한다.
public void repaint(int x,int y, int w, int h)
지정된 영역을 다시 그려준다.
public void repaint()
Card전체 영역을 다시 그려준다.
public void serviceRepaints()
repaint영역을 다시 그리고, 화면에 출력한다.
public boolean isShown()
Card가 화면에 보이는지 안 보이는지 여부를 돌려준다.

[핵심]
Card클래스는 화면에 출력 될 수 있는 하나의 단위 클래스 이다.
TAG :
댓글 입력
자료실