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

목차
- 사퀀스(Sequence) 만들기
- Boolean Expression 과 시퀀스 만들기
- 시퀀스 아이템(Item) 접근하기
- 시퀀스에 아이템 인서트 하기
- 시퀀스의 아이템 삭제하기
- 시퀀스의 아이템 거꾸로 정렬 하기
- 시퀀스 비교하기
- 시퀀스 슬라이스(Slice) 사용하기

* 사퀀스(Sequence) 만들기

JavaFX에서는 앞서 배운 5개의 기본적인 데이터 타입 외에 추가적으로 시퀀스(Sequence)라 불리우는 데이터 구조(data structure) 를 제공한다. 시퀀스는 순서가 있는 List 객체(Ordered List) 를 나타내며, 시퀀스의 내부의 각각의 객체를 아이템(item) 이라 한다. 시퀀스는 대괄호([], bracket)를 사용하여 선언하며, 각각의 아이템은 콤마(,)로 구분한다.

var weekDays = ["Mon","Tue","Wed","Thu","Fri"];

선언된 시퀀스는 weekDays라 명명된 변수에 할당된다. 개별 아이템이 String 으로 선언되어 있어 우리가 "String 형식의 시퀀스(sequence of strings)"를 생성하려는 의도를 컴파일러는 알게 된다. 만일 시퀀스가 Integer들로 선언되었다면 컴파일러는"Integer 형식의 시퀀스"가 우리가 원하는 것임을 알게 된다.

물론 명시적으로 시퀀스의 아이템 형(type)을 지정 할 수도 있다. 형 지정 방식은 선언하는 변수명 다음에 콜론(:) 과 함께 원하는 데이터타입을 적어주고, 끝에는 대괄호를 사용한다.

var weekDays: String[] = ["Mon","Tue","Wed","Thu","Fri"];

시퀀스는 또한 다른 시퀀스를 포함한 중첩된 시퀀스를 만들 수도 있다.

var days = [weekDays, ["Sat","Sun"]];

이렇게 중첩된 시퀀스의 경우 컴파일러는 자동으로 내포된 시퀀스들의 아이템을 꺼내어 등가의 중첩없는(혹은 평평한, flatten) 시퀀스로 만든다.(위 와 아래의 표현은 동일하다.)

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];

또한 약식 표기법도 가능하다. 이는 순차적으로 증/감하는 숫자로 시퀀스를 구성하기 쉽게 해준다. 숫자 1 부터 100 까지로 구성되는 시퀀스를 생성하기 위한 방법은 아래와 같다.

var nums = [1..100];


* Boolean Expression 과 시퀀스 만들기

boolean expression 과 서술형 방식을 통해 기존의 시퀀스을 가지고 하위 서브셋(subset)을 구성하여 새로운 시퀀스를 선언 할 수도 있다.

아래 예에서 두번째 시퀀스는 첫번째 시퀀스에 기반을 두고 있으나 오직 숫자가 2보다 큰것만 포함하고 있다.

var nums = [1,2,3,4,5];
var numsGreaterThanTwo = nums[n | n > 2];
print();


결과 : [ 3, 4, 5 ]

var nums = [1,2,3,4,5];
var numsGreaterThanTwo = for (n in nums where n > 2) n ;
print();


결과 : [ 3, 4, 5 ]


* 시퀀스 아이템(Item) 접근하기

시퀀스의 아이템에 대한 접근은 인덱스(index)를 통해 접근하며, 인덱스의 시작은 0 이다. 사용방법은 먼저 시퀀스의 이름을 쓰고, 대괄호를 사용하며 그 안에 인덱스 값을 넣는다.

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];

println(days[0]);
println(days[1]);
println(days[2]);
println(days[3]);
println(days[4]);
println(days[5]);
println(days[6]);

그 결과는 다음과 같다.

Mon
Tue
Wed
Thu
Fri
Sat
Sun

또한 시퀀스의 크기를 구하기 위해 sizeof 키워드를 사용하며, 사용방식은 sizeof 다음에 시퀀스의 변수명을 적어준다.

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
println(sizeof days);

위 코드의 실행결과는 7 이다.


* 시퀀스에 아이템 인서트 하기

insert 키워드는 특정 값을 into 키워드 다음의 시퀀스로 값을 끼워넣는 역할을 한다. 이때 before 와 after 키워드를 사용하여 특정 위치를 지정 할 수 있다.
Note : 사실 시퀀스는 불변형(immutable)이다. 이는 한번 생성되면 그 값이 변하지 않는다는 뜻이다. 그래서 만약 시퀀스에 insert나 delete 작업이 이루어진다면, 새로이 시퀀스를 생성하고 주어진 작업을 처리하고 이를 변수에 재 할당하는 작업이 이루어진다.
var days = ["Mon"];
insert "Tue" into days;
insert "Fri" into days;
insert "Sat" into days;
insert "Sun" into days;

print(days);

이를 실행하면 아래와 같은 결과가 나온다.

[ "Mon", "Tue", "Fri", "Sat", "Sun" ]

before 키워드를 이용하여 insert 될 element의 위치를 지정해보자.

insert "Thu" before days[2];
print(days);

이를 실행하면 아래와 같은 결과가 나온다.

[ "Mon""Tue", "Thu", "Fri""Sat""Sun" ]

after 키워드를 이용하여 insert 될 element의 위치를 지정해보자.

insert "Wed" after days[1];
print(days);

이를 실행하면 아래와 같은 결과가 나온다.

[ "Mon""Tue", "Wed", "Thu", "Fri""Sat""Sun" ]


* 시퀀스의 아이템 삭제하기

delete 와 from 키워드를 이용하여 시퀀스로 부터 쉽게 삭제가 가능하다.

delete "Sun" from  days;
print(days);

이를 실행하면 아래와 같은 결과가 나온다.

[ "Mon""Tue", "Wed", "Thu", "Fri""Sat" ]

또한 인덱스를 이용한 삭제도 가능하다.

delete days[0];
print(days);

이를 실행하면 아래와 같은 결과가 나온다.

[ "Tue", "Wed", "Thu", "Fri""Sat" ]

시퀀스의 모든 아이템을 삭제하려면 delete 키워드 다음에 시퀀스 변수명을 넣으면 된다.

delete days; // Delete all data

주의할 것은 delete 키워드는 단지 시퀀스 변수 내의 아이템을 삭제하는 것이지 변수 자체를 삭제하는 것은 아니다.

* 시퀀스의 아이템 거꾸로 정렬 하기

시퀀스의 순서를 쉽게 바꿀 수 있다.

var nums = [1..5];
reverse nums; // returns [5, 4, 3, 2, 1]


* 시퀀스 비교하기

시퀀스는 비교 가능하며, 동일한 시퀀스는 그 길이와 아이템과 순서가 동일한 것을 의미한다.

var seq1 = [1,2,3,4,5];
var seq2 = [1,2,3,4,5];
println(seq1 == seq2); // true

seq1 = [1,2,3,4,5];
seq2 = [1,2,3,4,5,6]; // 아이템이 한가지 증가했다. 순서는 바뀌지 않았다.
println(seq1 == seq2); // false

seq1 = [1,2,3,4,5];
seq2 = [1,3,2,4,5];  // 아이템은 동일하나 순서가 바뀌었다.
println(seq1 == seq2); // false


* 시퀀스 슬라이스(Slice) 사용하기

seq 키워드를 사용하여 시퀀스 내의 아이템을 분할 가능하다.

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];

var weekend = days[5..6]; // ["Sat","Sun"] 인덱스 5 와 6 사이의 아이템을 가져온다.

var weekdays = days[0..<5];//["Mon","Tue","Wed","Thu","Fri"] 인덱스 0 과 4(=5보다 작은) 사이의
                                         // 아이템을 가져온다.

weekend = days[5..]; // ["Sat","Sun"] 인덱스 5 부터 끝까지의 아이템을 가져온다.

var days2 = days[0..<]; // ["Mon","Tue","Wed","Thu","Fri","Sat"] 인덱스 0부터 마지막보다 작은 사이의
                                  // 아이템을 가져온다.(마지막은 제외)

+ Recent posts