반응형
<출처 : http://javaora.tistory.com/entry/Learning-the-JavaFX-Script-Programming-Language-Lesson-3-Using-Objects >

목차
- 객체란?
- 객체구(Object Literal) 선언
- 객체구 문법
- 인스턴스(Instance) 함수 호출

* 객체(Object)란?

객체란 무엇인가? 객체는 상태와 행동으로 구성된 개별의 소프트웨어 꾸러미이다. 간단히 말해 :

  • 객체의 상태는 자신의 변수를 나타낸다.
  • 객체의 행동은 자신의 함수를 나타낸다.
개념적으로 버튼, 체크박스, 레이블 같은 GUI 컴포넌트부터 보이지 않는 추상적 개념의 날씨 데이터, 재정 상태, 상품 등록 정보 등의 어떤것이든 객체로 만들어 낼 수 있다. 

Note : 좀 더 많은 정보를 알고 싶으면 자바 튜터리얼 의  "객체란 무엇인가" 를  보도록 하자.

* 객체구 선언(= 객체 생성, 인스턴스 생성)

JavaFX 스크립트 개발언어에서는 객체는 객체구(object literal) 로서 생성된다.(인스턴스를 생성한다. - 본 글에서 "객체를 생성한다"와 "인스턴스를 생성한다" 는 동일한 의미로 보면 된다.)


Address {
     street: "1 Main Street";
     city: "Santa Clara";
     state: "CA";
     zip: "95050";
}


위 예제는 가상의 주소록 애플리케이션에서 사용되는 Address 객체를 생성한다. 본 소스를 적당한 이름을 저장하고 컴파일 하면 다음과 같은 에러가 발생한다.
  

위 코드는 마치 자바 문법의 생성자와 비슷하며 다음과 같은 의미로 보면 된다.

new Address("1 Main Street", "Santa Clara", "CA", "95050");

그리고 위 에러는 참조해야할 Address 클래스가 존재하지 않아 발생한 문제이다.

위 Address.zip 을 다운받아 풀면 두개의 .class 파일과 하나의 AddressBook.fx 파일이 있다.(AddressBook.fx 는 위 코드와 동일한 내용이다.)

이제 다시 컴파일 해보자.


이젠 아무런 에러없이 컴파일이 될 것 이다.


* 객체구 문법 

객체구의 문법은 배우기 쉽고 직관적인 사용이 가능하다.

Address {
     street: "200 Pine Street",
     city: "San Francisco",
     state: "CA",
     zip: "94101",
}
Address {
     street: "200 Pine Street"
     city: "San Francisco"
     state: "CA"
     zip: "94101"
}
Address {
     street: "200 Pine Street",
     city: "San Francisco",
     state: "CA",
     zip: "94101",
}

위 코드에서 첫번째 단어 Address는 생성하려는 객체의 타입을 나타낸다. 중괄호 내부의 블럭은 객체의 내용을 정의하며, 변수들은 각각 객체의 멤버변수를 초기화 시킨다. 객체구를 선언할때는 인스턴스의 멤버변수를 콤마나 빈칸 또는 세미콜론으로 구분된다.

또한 아래와 같은 방식으로 생성된 객체를 변수에 할 당 할 수도 있다.

def addressOne = Address {
     street: "1 Main Street";
     city: "Santa Clara";
     state: "CA";
     zip: "95050";
}

def addressTwo = Address {
     street: "200 Pine Street";
     city: "San Francisco";
     state: "CA";
     zip: "94101";
}

또한 아래 코드와 같이 객체 내부에 다른 객체를 포함 시킬 수도 있다.

def customer = Customer {
     firstName: "John";
     lastName: "Doe";
     phoneNum: "(408) 555-1212";
     address: Address {
          street: "1 Main Street";
          city: "Santa Clara";
          state: "CA";
          zip: "95050";
     }
}

위 코드에서 Customer 객체는 원 address 라고 명명된 변수에 할당된 Address 객체를 포함한 몇가지 새로운 변수들을 가지고 있다. 내포된 객체(nested object) 구문은 일반적으로 많이 사용되는 형식이다.

아래 Customer.zip을 다운로드 받아 위에서 다운받은 Address.zip 과 같은 곳에 압축을 푼다. 그리고 위 코드를 적당한 이름으로 저장 후 컴파일 하면 제대로 컴파일 되는 것을 알 수 있다.


* 인스턴스(Instance) 함수 호출

JavaFX에는 함수(function)이 포함된  사용가능한 많은 클래스들이 있다. 일단 함수를 생성하는 방법은 다음 레슨에서 살펴볼 것이며, 이번엔 먼저 존재하는 함수를 어떻게 사용하는지에 대해 알아보자.

객체의 인스턴스 함수(instance function)는 객체명 다음에 마침표(.)를 붙이고 다음에 호출하기 원하는 함수명을 입력하여 호출한다.

def customer = Customer {
     firstName: "John";
     lastName: "Doe";
     phoneNum: "(408) 555-1212";
     address: Address {
          street: "1 Main Street";
          city: "Santa Clara";
          state: "CA";
          zip: "95050"; }
}
customer.printName();
customer.printPhoneNum();
customer.printAddress();

그 결과는 아래와 같다.

Name: John Doe
Phone: (408) 555-1212
Street: 1 Main Street
City: Santa Clara
State: CA
Zip: 95050

아마 위 코드를 보고 이런 의문을 갖게 될것이다.
"저 함수 이름은 어디서 온거지? 내가 객체속에든 인스턴스 변수나 함수명을 어떻게 한번에 알 수가 있겠어?"
만약 library나 클래스를 사용하고 싶다면, API 문서를 참고하면 된다. API 문서에는 객체들의 변수명과 함수명이 리스트업 되어 있다. API 문서를 참고하는 것만이 주어진 객체의 기능을 파악 할 수 있는 가장 확실한 방법이다.

+ Recent posts