CodeClover
배열 활용한 자료 관리 본문
배열
배열은 데이터들의 순차적인 집합의 모음으로 변수를 여러개 선언해야 하는 불편함을 해소 할 수 있는 방법이다.
배열 선언 및 생성
//배열 선언과 생성 따로 진행
data_type[] arr; //배열 선언
arr = new data_type[배열크기]; //배열 생성
//배열의 선언과 생성 한번에 진행
data_type[] arr = new data_type[배열크기];
배열은 선언 → 생성을 진행 후 사용이 가능한데 배열의 선언과 생성은 위의 두가지 방식 선언과 생성을 따로 또는 함께 모두 가능하다.
new : 생성 즉, 초기화 한다고 표현한다. ( 자바에서는 new 라는 메서드 키워드를 만나면 다른 작업 중단 후 초기화 및 생성부터 진행한다고
배열_데이터 추가 / 수정 / 삭제 / 삽입
배열을 활용한 데이터 추가, 수정, 삭제, 삽입과 같은 다양한 방식으로 사용하기 위해서는 배열에 저장된 데이터의 개수를 저장하는 변수와 특정 위치의 요소를 출력하기 위한 변수를 선언해야 한다.
아래 코드에서 사용한 index , count는 각각 배열의 특정 위치를 저장하는 변수 = index / 배열에 저장된 요소의 개수를 저장하는 변수 = count 를 사용한다.
index값이 -1인 이유는 배열[N] 이라고 하면 인덱스는 0부터 N-1까지의 값을 갖는다. 따라서 index = 0; 이라고 표현하면 배열에 첫번째 값이 들어있는 상황으로 받아들여지기때문에 -1으로 표현한것이다.
import java.util.Scanner;
public class ArrayManager {
public static void main(String[] args) {
int[] final array = new int[100];
int index = -1; //배열의 특정 위치를 저장하는 변수
int count = 0; //배열에 저장된 요소의 개수를 저장하는 변수
Scanner sc = new Scanner(System.in);
System.out.println("***********배열 관리 프로그램*************");
while(true) {
System.out.println("--------------------------------------------");
System.out.println("1 추가 | 2 출력 | 3 조회 | 4 수정 | 5 삭제 | 6 삽입 | 0 종료 ");
System.out.println("-------------------------------------------");
System.out.print("실행할 메뉴 번호를 입력하세요. > ");
int menu = sc.nextInt();
switch(menu) {
case 1:
System.out.print("배열에 추가할 데이터를 입력하세요. >>");
int inputData = sc.nextInt();
array[count] = inputData;
count++;
break;
case 2:
System.out.print("배열의 데이터 출력 :");
for(int i=0; i<count; i++) {
System.out.print(array[i] + "\t");
}
System.out.println();
break;
case 3:
System.out.print("배열에서 찾을 데이터 조회 > ");
int searchData = sc.nextInt();
for(int i=0; i <count; i++) {
if(array[i] == searchData) {
System.out.println(i + "인 배열 위치에서 데이터를 찾았습니다.");
break;
}
}
break;
case 4:
System.out.print("수정할 위치 인덱스 값과 데이터 입력(예 : 2 30) > ");
index = sc.nextInt();
int updateData = sc.nextInt();
array[index] = updateData;
break;
case 5:
System.out.print("삭제할 위치 인덱스값 입력하기 >");
index = sc.nextInt();
int deleteData = array[index];
System.out.printf("%d 위치의 인덱스 데이터 %d 삭제하겠습니다.\n",index ,deleteData);
for(int i=index; i<count-1; i++) { //삭제하는 경우 삭제할 인덱스 바로 뒤의 인덱스 위치 부터 앞으로 한칸씩 이동
array[i] = array[i+1];
}
count--; //하나 삭제했으니까 반복문 종료 이후 count값 -1
break;
case 6:
System.out.print("삽입할 위치와 데이터 입력하세요(예: 2 30) > ");
index = sc.nextInt();
int insertData = sc.nextInt();
for(int i=count; i>index-1; i--) {//삽입하는 경우 배열의 제일 끝에서 부터 한칸씩 뒤로 이동
array[i] = array[i-1];
}
array[index] = insertData;
count++; //하나 추가(삽입)했으니까 반복문 종료 이후 count +1
break;
case 0:
sc.close();
System.out.println("배열 관리 프로그램을 종료합니다.");
System.exit(0);
}
}
}
}
위의 코드에서 생소하게 느껴질 수 있는 부분에 대해서 정리해보면 크게 데이터 삽입, 삭제가 있다.
● 데이터 삭제
배열에서 데이터를 삭제할 때는 삭제 데이터 바로 뒤의 데이터부터 시작해서 가장 마지막 데이터까지 앞으로 한 칸씩 복사하고 count 값을 감소시킨다.
int[] arr = new int[10];
int index = 5;
int count = 7;
arr = {2,3,5,7,8,1,4,0,0,0}
// 위의 arr 배열에서 index = 2인 데이터 5를 삭제하고 싶다면 ?
index = 2 인 5 바로 뒤에 있는 인덱스들 7,8,1,4의 인덱스 값들을 값 5 바로 뒤에 있는 7부터 앞으로 한칸씩 이동시킨다.
// index = 2인 값 5 삭제 후 결과 => count = 6 으로 -1 감소
arr = {2,3,7,8,,4,0,0,0,0}
● 데이터 삽입
배열의 중간에 데이터를 삽입할 때는 배열에서 데이터 값을 가지고 있는 맨 뒤 데이터부터 삽입하려는 인덱스 번호까지 차례대로 한칸씩 앞으로 이동하면서 데이터를 뒤로 한칸씩 이동해서 값을 삽입한다.
int[] arr = new int[10];
int index = 5;
int count = 7;
arr = {2,3,5,7,8,1,4,0,0,0}
// 위의 arr 배열에서 index = 2인 데이터 5를 삽입하고 싶다면 ?
index = 2 인 5 바로 뒤에 있는 인덱스들 7,8,1,4의 인덱스 값들을 제일 뒤에 있는 4부터 뒤로 한칸씩 이동시킨다.
// index = 2인 값 삽입 후 결과 => count = 8 으로 +1 값 증가
arr = {2,3,7,8,,4,0,0,0,0}
다차원 배열
다차원 배열은 배열 기호를 여러 개 사용해서 정의한 배열이다.
배열 생성
int[][] arr1 = new int[3][5];
배열을 생성할때는 위와 같이 타입 뒤에 [행][열]을 표현하는 대괄호 그리고 뒤에 각 [행][열]의 크기 선언해주면 된다.
이때, 배열기호가 앞에 있으면 더 큰 차원을 의미한다.
int[][] arr1 = new int[][10]; // (❌ 불가능 )
//앞의 더 큰 차원이 명시되지 않았기 때문에 에러가 발생하며 배열이 생성되지 않는다. )
int[][] arr2 = new int[5][]; // (⭕ 가능 )
따라서, 다차원 배열은 더 큰 차원을 반드시 명시한 후에 작은 차원의 크기가 정해질 수 있으므로 위의 배열 생성이 불가능한 경우를 반드시 알아두자!
배열 초기화
int[][] arr = {{1,2,3,4},{2,2,2,2},{3,3,3,3}}
위의 코드와 같이 같은 타입끼리 중괄호를 이용해서 묶어주면 초기화 된다.
이때, 배열의 행의 길이는 아래와 같이 각각 다른 행의 개수로서 가변 배열으로 초기화 가능하다.
int[][] arr = {{1,1,1},
{2,2,2,2},
{3,3,3,3,3}
};
다차원 배열에서 마지막 배열 처리 : 열의 길이 나타낸다.
length : 문자열에서는 메서드으로 사용되고 ( .length( 변수 ) ) , 배열에서는 속성으로 사용된다.( .length )
※ 인프런_기초부터 시작하는 자바 프로그래밍(자바전문자그룹) 강의 수강 후 정리한 내용입니다.
'Backend > JAVA정리' 카테고리의 다른 글
| 객체 지향 프로그래밍 (0) | 2025.06.13 |
|---|---|
| 자바 개요 (0) | 2025.05.30 |
| 제어문 정리 (3) | 2025.05.30 |