[자바] 배열(Array)

Gammi·2022년 10월 5일
0

JAVA

목록 보기
8/35
post-thumbnail

📂 배열(Array)


  • 같은 타입 데이터 여러 개를 하나의 변수로 다루는 메모리 공간



🗒 배열의 특징


  • 같은 타입 데이터만 저장 가능

  • 기본 데이터타입, 참조 데이터타입 모두 배열로 사용 가능

  • 여러 변수에 해당하는 메모리 공간이 연속된 공간에 차례대로 생성됨

    -> 한 번 생성된 배열은 크기 변경 불가능

  • 선언, 생성, 초기화의 3단계 과정을 거쳐 사용


  • 데이터 저장 공간은 배열의 데이터타입에 해당하는 기본값으로 자동으로 초기화

    (byte, short, int = 0, long = 0L, float = 0f, double = 0.0
    char = '\u0000' 또는 0, boolean = false, String =null)


  • 배열 생성 시 각 공간에 해당하는 인덱스가 자동으로 부여됨

    -> 0 ~ (배열크기 -1)

  • 배열의 변수명을 사용하여 배열에 접근 가능(인덱스 필요)

  • 배열의 크기는 배열명.length 속성을 통해 알 수 있음





< 배열 선언 및 생성 기본 문법 >

데이터타입[] 배열명 = new 데이터타입[배열 크기];
데이터타입 배열명[] = new 데이터타입[배열 크기];

  • 데이터타입 뒤에 []를 붙여 배열임을 표시

  • 선언된 배열의 변수는 참조형 변수로 취급됨

    -> int는 기본형, int[]는 참조형


  • new 키워드를 사용하여 배열 공간 생성

  • 데이터타입 뒤 []안에 생성할 배열의 크기를 명시

    -> 생성되는 배열의 주소값을 선언된 배열 타입 변수에 저장

  • 생성된 배열에는 자동으로 인덱스 번호 부여됨


int[] scores = new int[10];
int scores[] = new int[10];

int s_size = score.length; // 배열의 크기 구하기
System.out.println(score[9]);
System.out.println(scores[s_size - 1]);
// 위와 같은 코드
// 배열의 제일 마지막 인덱스를 표시

< 배열 접근 기본 문법 >

변수명[인덱스]

  • 변수명에 해당하는 배열공간에 접근 후 인덱스에 해당하는 데이터 저장 공간에 접근

< 배열 선언, 생성, 초기화를 한꺼번에 수행하는 문법 >

데이터타입[] 배열명 = {데이터1, 데이터2, ... , 데이터n};
데이터타입[] 배열명 = new 데이터타입[] {데이터1, 데이터2, ... 데이터n};

int[] num = {10, 20, 30, 40, 50};
int[] num2 = new int[] {10, 20, 30, 40, 50};

< 반복문을 사용한 배열의 모든 인덱스 접근 >

for(int i = 0; i < 배열명.length; i++) {
	배열명[i]
}

< 배열의 주소값 변경 >

int[] a = {1, 2, 3};
int[] b = {4, 5, 6};
a = b; // b를 a에 대입
  • 기존에 a가 참조하던 [1, 2, 3]은 버리고 b가 참조하던 [4, 5, 6]을 참조하게 됨

  • 기존의 [1, 2, 3]은 불필요한 메모리 공간이 되어 Carbage Collector에 의한 정리대상이 됨

    -> 더이상 필요없는 메모리공간은 자동으로 정리됨





📂 2차원 배열


  • 1차원 배열 여러 개를 묶음으로 관리하는 배열

  • 행과 열로 이루어진 테이블 구조와 유사한 구조





< 2차원 배열 선언, 생성, 초기화를 한꺼번에 수행하는 문법 >

데이터타입[][] 배열명 = {
                {값1, 값2, ..., 값n},
                {값1, 값2, ..., 값n},
                ... 생략 ...
                {값1, 값2, ..., 값n}
};
  • 앞에 대괄호가 행, 뒤에 대괄호가 열을 나타냄
  • 행 먼저 생성 후 열 생성 가능
int[][] arr2 = new int[3][]; // 행이 3개인 2차원 배열 생성
		
arr2[0] = new int[2];
arr2[1] = new int[3];
arr2[2] = new int[1];
// 행마다 열의 개수 다르게 할 수 있음
		
arr2[0][0]=1; arr2[0][1]=2;
arr2[1][0]=3; arr2[1][1]=4; arr2[1][2]=5;
arr2[2][0]=6;

//============================================================

int[][] arr3 = new int[2][]; // 행이 2개인 2차원 배열 생성

arr3[0] = new int[] {1, 2, 3}; // 초기화까지 한 번에 수행
arr3[1] = new int[] {4, 5}; 

< 2차원 배열 크기 >

  • 행 크기 : 배열명.length
  • 열 크기 : 배열명[행번호].length

< 반복문을 사용한 2차원 배열의 모든 인덱스 접근 >

for(int i = 0; i < 배열명.length; i++) {
  for(int j = 0; j < 배열명[i].length; j++) {
    배열명[i][j]
  }
}





✔ 2차원 배열 출력


📌 기본 출력

int[][] arr = {
			{1, 2},
            {3, 4},
            {5, 6}
};

System.out.println(arr[1][0]);

📌 반복문을 통한 모든 인덱스 출력

for(int i = 0; i < arr.length; i++) {
  for(int j = 0; j < arr[i].length; j++) {
    System.out.println(arr[i][j]);
  }
}

🔗 참고

< 2차원 배열의 열 크기 알아내기 >

위에서 말했듯이 2차원 배열의 경우 행마다 다른 열 크기를 가질 수 있기 때문에 각각의 행마다 열의 크기를 알아낼 수 있다.

배열명[행번호].length

profile
개발자가 되었어요⭐️

0개의 댓글