까이면 무조건 삭제.. 영향력이나 내공보다는 자존심이다!!
질문)
까인 내답변)
배열의 개념은 하나의 객체에 같은 데이터 타입의 값을 다수 사용하기 위해 생성하는 겁니다.
- 1차원 배열은 ex2) 과 같이 단순히 같은 타입의 값을 한개의 주소에 열거해서 넣은 형태.
- 2차원 배열은 ex3) 과 같은 형태로 구성됩니다.
- 배열을 묶는 방법은 ex1) 과 같이 보통 2차원 단위에서는 각각의 배열이 어떤 조건에 의해
묶어지고, 1차원 에서는 그 각각의 묶음을 나열하는 겁니다.
ex1) String student[][] = { {"김", "1번", "180cm"}, {"이", "2번", "175cm"} };
ex2) String a0 = "1";
a0 라는 객체변수는 1 이라는 하나의 주소에, 한개의 값만을 가지게 됩니다.
ex3) String[] a1 = {"a-1" ,"a-2"};
a1 이라는 변수는 a1[0] 번째에 a-1 과, a1[1] 번째에 a-2 라는 값을 가지게 됩니다.
즉.. a1 이라는 배열변수는 하나의 객체(주소)에 다수의 값(메모리를 활당)을 배열의 갯수만큼 가지게 되는 겁니다.
아래는.. 1차원 배열과 2차원 배열을 생성과 실행결과를 보여주는 간단한 예제입니다.
색상과 굵기를 참조해서 봐주세요.
1. CLASS
public class arrangement_test_000 {
public static void main(String[] args) {
System.out.println("1차원 배열\n");
String[] arr0 = { "a-1", "a-2" }; // arr0[2]의 1차원 배열 생성
for(int i = 0;i < arr0.length;i++){ // arr0 의 배열갯수를 length 를 이용해서 받아옵니다.
System.out.println(i + ". arr0[" + i + "] : " + arr0[i]);
System.out.println("-----------------------------------------------------");
}
System.out.println("arr0 배열의 갯수 : " + arr0.length);
System.out.println();
System.out.println("\n2차원 배열\n");
// arr1[2][3]의 2차원 배열 생성
String[][] arr1 = { {"b-1", "b-2"}, {"c-1", "c-2"}, {"d-1", "d-2"} };
int l = 0; // arr1 갯수 카운트용 초기값.
// 2차원 배열이기 때문에 2개의 for문을 사용하여 값을 추출합니다.
for(int j = 0;j < arr1.length;j++){
for(int k = 0;k < arr1[j].length;k++){
System.out.println(j + ". arr1[" + j + "][" + k + "] : " + arr1[j][k]);
l += k; // arr1 갯수 카운트용.
}
System.out.println("-----------------------------------------------------");
l += j; // arr1 갯수 카운트용.
}
System.out.println("arr1 배열의 갯수 : " + l);
}
}
2. RUN
1차원 배열
0. arr0[0] : a-1
-----------------------------------------------------
1. arr0[1] : a-2
-----------------------------------------------------
arr0 배열의 갯수 : 2
2차원 배열
0. arr1[0][0] : b-1
0. arr1[0][1] : b-2
-----------------------------------------------------
1. arr1[1][0] : c-1
1. arr1[1][1] : c-2
-----------------------------------------------------
2. arr1[2][0] : d-1
2. arr1[2][1] : d-2
-----------------------------------------------------
arr1 배열의 갯수 : 6
배열의 구조는 위의 실행결과와 같은 형태를 가지게 됩니다.
-- 참고
String[][] a0 = new String[2][3];
String a1[][] = new String[2][3];
위의 배열 선언 방식은 모양만 다를뿐 차이가 없습니다.
채택된 답변)
String 자체가 1차원 배열이라고 하는 것은 보는 사람마다 다를수 있습니다.
일단 질문하신대로 String 자체가 1차원 배열이라고 보고 설명드리겠습니다.
String class의 내부를 충분히 설명하는 것은 초보자에게는 좀 어려울수 있습니다.
그래서 제가 아래 프로그램처럼 String class를 설명하기 쉽도록 StringZ class를 만들었습니다.
제가 만든 StringZ class는 제가 설명하고자 하는 부분에 대해서 최대한 String class와 비슷하게 만들어 보았습니다.
그러므로 일단 StringZ class가 String class라고 간주해 주세요.(아래 프로그램 첨부도 했습니다.)
아래 프로그램과 함께 제 설명을 읽으셔야 합니다.
StringZ class에는 char[] 로 선언된 value라는 instance 변수가 있습니다.
모든 문자는 char 에만 저장되므로 여러개의 문자를 정장하기 위해 char[] 1차 배열을 만든 것입니다.
이것만 생각하면 StringZ class 자체는 char 의 1차원 배열입니다.
다음은 StringZ[] szArr = new StringZ[2]; 로 StringZ[] szArr 1차원 배열을 생성했습니다.
한개의 문자 즉 char 를 기준으로 생각하면 StringZ class가 1차원 배열이므로 StringZ[] szArr은 2차원 배열이라고 할수 있습니다.
================================================================================
그러나 StringZ[] szArr 을 일반 적으로는 char의 2차원 배열이라고 부르지 않습니다.
굳이 따지자면 char의 2차원 배열 성격이 있지만 2차원 배열이라고 부르지 않습니다.
그냥 StringZ[] 는 StringZ class의 1차원 배열(char의 2차원배열이 아니고)이라고 부릅니다.
StringZ[][] 는 StringZ class의 2차원 배열입니다.
이런식으로 해야 배열의 정의와 동일한 개념이 되어 혼동되지 않습니다.
즉 StringZ class의 내부에 char[] 배열로 정의 되어 있는지 아니면 다른 것으로 정의 되어 있는지 따지지 않고 StringZ class는 그냥 단독으로 StringZ class입니다.
제 생각으로는 질문자분에게 설명한 분이 String[] arr 은 2차원 성격이 있다고 한 것을 2차원 배열로 잘못 오해 하지 않았나 생각합니다.
제가 지금까지 자바를 해오면서 String[] arr를 2차원 배열이라고 부른사람은 한번도 못 보았거든요.
(제가 많은 사람과 토론을 안해서 그런지는 모르지만,...)
아래는 첨부한 프로그램과 수행한 결과 화면입니다.
public class Test {
public static void main(String[]ar){
char[] s1 = new char[3];
s1[0] = 'A';
s1[1] = 'B';
s1[2] = 'C';
char[] s2 = new char[3];
s2[0] = 'X';
s2[1] = 'Y';
s2[2] = 'Z';
StringZ sz0 = new StringZ(s1);
StringZ sz1 = new StringZ(s2);
System.out.println("sz0="+sz0+", sz1="+sz1);
StringZ[] szArr = new StringZ[2];
szArr[0] = sz0;
szArr[1] = sz1;
for (int i=0; i<szArr.length;i++) {
System.out.println("szArr["+i+"]="+szArr[i]);
}
}
}
class StringZ {
final char[] value;
StringZ (char[] value) {
this.value = value;
}
public String toString() {
String s = "";
for (int i=0; i<value.length;i++) {
s = s + value[i];
}
return s;
}
}
질문에 도움이 되었으면 합니다.
'course > 지식인' 카테고리의 다른 글
[자바스크립트] 초간단 링크 클릭시 이미지 보여주기. (1) | 2016.02.29 |
---|---|
[툴] 이클립스 jvm 관련 에러가 날때.. (0) | 2016.02.25 |
[자바] 같은 디렉터리내의 동일한 타입의 파일들을 읽어들여 출력. (0) | 2016.01.29 |