CodeClover

배열 활용한 자료 관리 본문

Backend/JAVA정리

배열 활용한 자료 관리

coding dew 2025. 6. 2. 17:08

배열

배열은 데이터들의 순차적인 집합의 모음으로 변수를 여러개 선언해야 하는 불편함을 해소 할 수 있는 방법이다. 

배열 선언 및 생성

//배열 선언과 생성 따로 진행
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