본문 바로가기
JavaStudy

e.array

by nyamnmm 2024. 7. 8.
array

 

 

배열의 정의
  • 하나의 공간에 여러 개의 값을 담을 수 있는 개념, 대량의 데이터를 보관하고자 할 때 사용한다.
    (하나의 공간에 하나의 값을 담을 수 있는 변수와는 차이가 존재한다.)
  • "같은 자료형의 값"만 담을 수 있다.
    (int 배열에 char값을 담을 수 없다)
  • 인덱스(index)는 0부터 시작해 1씩 증가한다.
    → index[0] : 배열의 첫 번째 값
      index[1] : 배열의 두 번째 값
      index[2] : 배열의 세 번째 값
    ( = index[n]은 배열의 n+1번째 값.)

 

배열 선언
  • [표현법] 자료형[ ] 배열이름; or 자료형 배열이름[ ];
    int[ ] array;

 

배열 할당
  • 배열에 몇 개의 값들을 보관할건지 크기를 지정하는 과정.
  • 한 번 지정된 배열의 크기는 변경이 불가능하다.
    (배열의 크기를 변경하고자 한다면 다시 만드는 수 밖에 없다.)
  • [표현법] 배열명 = new 자료형 [배열의크기(길이)];
    ▷ array = new int[5];
  • 선언과 동시에 할당할 수도 있다.
    int[ ] array = new int[5];
  • 배열 할당 시의 값은 인덱스의 값과 별개이다.
    할당값은 "배열의 크기(몇 개나 들어갈지)"에 관한 것이고, 인덱스는 "배열에 담긴 값의 위치(어디에 들어갈지)"이다.

 

인덱스 초기화
  • [표현법1] 배열명[인덱스] = (대입할 값);
    ▷ array[0] = 1;
      array[1] = 2;
      array[2] = 3;
  • 위의 경우, 한 번에 여러 인덱스의 값을 대입하여 초기화하는 것은 불가능하다.
  • [표현법2] 자료형[ ] 배열이름 = { 대입할 값 };
    String[ ] strArr = {"가나다", "라마", "바사아자차카"};
  • 위처럼 선언과 동시에 값을 대입하면 배열 할당을 따로 해주지 않아도 되며,
    한꺼번에 모든 값을 입력(초기화) 가능하다.
  • 각 인덱스를 초기화하지 않아도 배열이 선언될 때, JVM이 기본값 (0 또는 null)으로 초기화를 진행한다.

 

배열 출력
  • 필요한 인덱스의 값만 불러오거나, 출력할 때는 배열이름[인덱스]; 을 사용한다.
    ▷ int num = array[0];
      System.out.println(array[1]);
  • 배열의 전체 값을 불러오거나, 출력할 때는 일반적으로 for문을 사용한다.
    ▷ for(int i = 0; i < array.length; i++) {
       System.out.println(array[i]);
      }
  • 배열이름.lenght : 배열의 길이를 정수값(int)으로 불러온다.
    (※ 배열의 길이와 인덱스는 같은 [ ]에 들어있지만 다른 값이므로, 조건식에 사용할 때 주의하도록 한다.)

 

package e.array;

public class Array {
	public static void main(String[] args) {
    	// 배열 선언, 할당
        int[] iArray = new int[10];
        
        // 인덱스 초기화
        iArray[0] = 1;
        iArray[1] = 2;
        iArray[2] = 3;
        iArray[3] = 4;
        iArray[4] = 5;
        iArray[5] = 6;
        iArray[6] = 7;
        iArray[7] = 8;
        iArray[8] = 9;
        iArray[9] = 10;
        
        // 배열 출력
        for(int i = 0; i < iArray.length; i++) {
        	System.out.printf("인덱스 %d의 값은 %d이다.\n", i, iArray[i]);
        }
    }
}

 

 


 

배열 복사
  • for문을 활용한 방법
    1. 원본 배열과 같은 크기의 새로운 배열을 선언.
      ▷ int[ ] copy = new int[origin.length];
    2. 반복문을 통해 원본 배열의 값들을 새로운 배열에 대입.
      ▷ for(int i = 0; i < copy.length; i++) {
         copy[i] = origin[i];
        }
  • clone( ) 사용
    int[] copy = origin.clone();
  • arraycopy( ) 사용
    : System.arraycopy(원본 배열, 복사 시작할 인덱스, 복사본 배열, 복사본 배열의 시작 인덱스, 복사할 개수);
    System.arraycopy(origin, 2, copy, 4, 3);
    → origin의 2번째 인덱스 값부터 5번째 인덱스까지의 값이 copy의 4번째 인덱스부터 순서대로 복사된다.

 

package e.array;

public class Array {
	public static void main(String[] args) {
		// origin
        int[] origin = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        
        System.out.println("========== origin ==========");
        for(int i = 0; i < origin.length; i++) {
        	System.out.print(origin[i] + "\t");
        }
        System.out.println("\n");
        
        // for문을 사용하여, 짝수만 복사하기
        int[] copy1 = new int[5];
        for(int i = 0, j = 0; i < origin.length; i++) {
        	if(origin[i] % 2 == 0) {
            	copy1[j++] = origin[i];
            }
        }
        
        System.out.println("========== 짝수만 복사하기 ==========");
        for(int i = 0; i < copy1.length; i++) {
        	System.out.print(copy1[i] + "\t");
        }
        System.out.println("\n");
        
        // clone()을 이용하여, origin을 전체 복사한 후,
        // 새 배열을 선언하여 arraycopy로 복사한 배열의 5번째 값부터 3번째 인덱스에 10번째 값까지 복사하기
        int[] copy2 = origin.clone();
        
        int[] copy3 = new int[copy2.length];
        System.arraycopy(copy2, 4, copy3, 3, 6);	// 'n번째 인덱스'와 'n번째 값'을 주의할 것
        
        System.out.println("========== clone + arraycopy ==========");
        for(int i = 0; i < copy3.length; i++) {
        	System.out.print(copy3[i] + "\t");
        }
	}
}

 


 

2차원 배열
  • 자료형이 같은 1차원 배열의 묶음으로, 배열 안에 다른 배열이 존재한다.
  • 할당된 공간마다 인덱스 번호가 두 개 부여된다.
    • 앞 번호 : 1차원 배열 인자 (행)
    • 뒷 번호 : 1차원 배열의 index 값 (열)
  • [표현법] 자료형[ ][ ] 배열명 = new 자료형[n][m];
    ▷ String[ ][ ] array = new String[2][3];
    → length가 3인 1차원 배열이 2개 들어있는 2차원 배열
  • 대입 시에는 인덱스 번호 두 개를 모두 써야 한다.
    ▷ String[0][0] = "ABCED";
      String[0][1] = "FGHI";
  • 선언과 동시에 할당할 때는 { { }, { } } 식으로 묶어준다.
    ▷int[ ][ ] intArr = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10} };
  • 1차원 배열의 참조 변수 묶음 먼저 생성할 수도 있다.
    (1차원 배열의 길이가 일정치 않을 때 주로 사용한다.)
    ▷ char[ ][ ] chArr = new char[3][ ];
      chArr[0] = new char[3];
      chArr[1] = new char[5];
      chArr[2] = new char[2];

 

package e.array;

public class Array {
	public static void main(String[] args) {
    	// 2차원 배열 이해하기
		String[][] strArr = new String[3][3];
        
        String[0][0] = "(1행 1열)";
        String[0][1] = "(1행 2열)";
        String[0][2] = "(1행 3열)";
        
        String[1][0] = "(2행 1열)";
        String[1][1] = "(2행 2열)";
        String[1][2] = "(2행 3열)";
        
        String[2][0] = "(3행 1열)";
        String[2][1] = "(3행 2열)";
        String[2][2] = "(3행 3열)";
        
        for(int i = 0; i < strArr.length; i++) {
        	for(int j = 0; j < strArr[i].length; j++) {
            	System.out.print(strArr[i][j] + "\t");
            }
            System.out.println();
        }
        System.out.println();
        
        // 1차원 배열의 길이가 다른 2차원 배열 이해하기
        char[][] chArr = {
        	{'가', '나', '다', '라', '마', '바', '사', '아', '자', '차', '카', '타', '파', '하'},
            {'아', '야', '어', '여', '오', '요', '우', '유', '으', '이'}
        };
        
        for(int i = 0; i < chArr.length; i++) {
        	for(int j = 0; j < chArr[i].length; j++) {
            	System.out.print(chArr[i][j] + "\t");
            }
            System.out.println();
        }
	}
}

 

'JavaStudy' 카테고리의 다른 글

d.loop  (1) 2024.07.05
c.control  (0) 2024.07.04
b.operator  (0) 2024.07.03
a.basic  (1) 2024.07.01