2015년 2월 2일 월요일

배열의 이해 & 배열의 선언 & 다차원 배열

배열이란 비슷한 성격의 데이터를 쉽게 관리하기 위해서 묶어놓은 것을 말합니다. 배열에는 차원이 있는데 이것은 배열의 모습을 나타냅니다. 일반적으로 1차원 배열을 많이 사용하며 그 모습은 아래와 같습니다.

 0
 1
 2
 3
 4
 5
 6
 7
 ...
 n

 하나의 축(x축)만을 가지고 있어서 1차원 배열이라고 부릅니다. <배열의 상한값(n) - 배열의 하한값(0) + 1> 만큼의 저장공간이 생깁니다. 이 저장공간 모두에 정보를 저장 할 수 있습니다.
 2차원 배열은 아래와 같습니다.

0, 0
1 , 0
2, 0
3, 0
n, 0
0, 1
1, 1
2, 1
3, 1
n, 1
0, 2
1, 2
2, 2
3, 2
n, 2
0, 3
1, 3
2, 3
3, 3
n, 3
0, m
1, m
2, m
3, m
n, m

 두개의 축(x,y축)을 가지고 있습니다. <(상한값(n) - 하한값(0) + 1) * (상한값(m) - 하한값(0) + 1)> 만큼의 저장공간이 생기게 됩니다.
배열의 차원에는 제한이 없다고 보시면 됩니다. 3차원, 4차원, 5차원 .... n차원까지 과학적으로 어떤 모습인지 규명되지 않은 차원이라도 가능하며 그 크기 만큼 저장 공간이 늘어납니다. 하지만 실제로 쓰이는 것은 1차원, 2차원 배열입니다.

 배열은 변수와 컨트롤 모두에 적용 될 수 있습니다.
 배열이 변수에 사용될 때 보통 선언을 먼저하게됩니다. 이 때 변수 이름의 뒤에 차원의 크기를 적어줍니다.

ex) Dim A(0 to 10) as Long 'A라는 Long형 변수를 1차원 배열로 선언합니다. 하한값은 0, 상한값은 10입니다.
     Dim B(0 to 10, 0 to 10) as String 'A라는 String형 변수를 2차원 배열로 선언합니다. 1차원 배열의 하한값은 0, 상한 값은 10이며 2차원 배열의 하한값은 0, 상한값은 10입니다.
     Dim C as Long 'C라는 Long형 변수를 0차원 배열로 선언합니다. 0차원 배열은 배열로 취급되지 않습니다.


배열로 선언 된 변수를 사용 할 때에는 변수 이름 뒤에 배열 순서를 써주면됩니다.

 ex) Text1.Text = A(3) 'Text1에 1차원 A의 배열 중 배열 순서 3의 정보를 표시합니다.
       Temp = A(2, 5) 'Temp 변수에 2차원 A 배열 중 배열 순서 2, 5의 정보를 넣습니다.

이 사용법은 변수뿐만 아니라 컨트롤에도 적용됩니다.

 배열이 컨트롤에 사용 될 때에는 두가지 경우가 있습니다. 컨트롤이 디자인 모드에서 '정적으로' 생성되느냐, 코드를 통해 '동적으로' 생성되느냐 입니다.
 '정적으로' 생성될 때에는 여러개의 텍스트 박스를 같은 이름으로 지정하면 됩니다. 컨트롤에 이미 존재하는 이름을 부여하면 배열을 생성할지 물어봅니다. '예'일 경우 컨트롤의 이름 뒤에 배열 순서가 붙습니다. 제일 처음 그 이름을 가지고 있던 컨트롤이 배열 순서 0을 받게되며 이 순서는 바꿀 수 있습니다.
 '동적으로' 생성될 때에도 두가지 경우가 있습니다. 첫번째는 한번에 사용할 만큼 만드는 것이고 두번째는 필요할 때 마다 만드는 것입니다. 첫번째의 경우 변수의 선언과 마찬가지로 선언하여 생성하면 됩니다만 두번째의 방법에는 조금 신경을 써 주어야합니다. 만약 배열 순서가 같은 컨트롤을 중복해서 불러오려고 하면 에러가 나게됩니다.
(동적으로 객체 생성하기 = http://cafe.naver.com/gogoomas/346)
참고로 동적으로 생성한 객체를 삭제할 때, 디자인 모드에서 배치한 객체는 삭제 할 수 없습니다.

 배열이 사용되는 경우는 다양합니다. 컨트롤을 예로 들자면, 10개의 텍스트 박스의 내용을 A로 바꿀 때 이 텍스트 박스들이 모두 다른 이름을 가지고 있다면 텍스트 박스의 수 만큼 코딩해줘야합니다.


Text1.Text = A
Text2.Text = A
Text3.Text = A
...
(For Each를 사용하여 할 수도 있지만 속도가 느린편입니다)


 하지만 이 때 텍스트 박스들이 배열로 선언되어 있다면 For 문을 사용하여 간편하게 해결 할 수 있습니다.


 Dim i as Long
 For i = 0 to 9 '텍스트박스의 배열이 0 ~ 9라고 가정합니다.
     Text(i).Text = A
 Next i


 또한 표에서 각각의 셀의 위치를 표시할 때에도 사용되며 배열을 잘 사용하면 코딩량이 많이 줄어들며 가독성이 향상되고 처리 속도도 빨라질 수 있습니다. 특히 디자인 모드에서 컨트롤을 배열로 배치하면 각각 다른 배열(0차원 배열)로 배치 한 것 보다 용량이 줄어들게됩니다.



[출처] 배열이란? (고구마S) |작성자 고구마

댓글 없음:

댓글 쓰기