본문 바로가기
프로그래밍 기초/Java

[Java] 배열: 개념, 선언 방법, 데이터 접근 및 초기화

by 제이투더문 2024. 6. 15.

 

 안녕하세요 작가 J입니다. 오늘은 배열의 개념과 선언방법, 그리고 배열 데이터 접근 및 초기화하는 방법들을 알아보겠습니다. 실제로 많은 양의 데이터를 효율적으로 관리하는데 중요한 것이 배열입니다.

 

▤ 목차

     

    자료구조의 필요성

     자료구조는 데이터를 효율적으로 저장하고 관리하기 위한 방법을 제공하는 중요한 개념입니다. 이를 통해 데이터에 대한 접근성과 처리 속도를 향상할 수 있습니다. 효율적인 자료구조 선택은 프로그램의 성능에 큰 영향을 미칩니다.

     

    (출처) 스마트인재개발원

     

     

    1. 배열의 개념과 필요성

     

     배열(Array)은 동일한 타입의 데이터를 연속된 메모리 공간에 저장하는 자료 구조입니다. 이는 여러 개의 변수를 사용하는 것보다 효율적이며, 반복문과 함께 사용하여 데이터를 효율적으로 관리할 수 있습니다.

     

    특징:

    • 동일한 타입의 데이터 저장
    • 연속된 메모리 공간 할당
    • 고정된 크기

    배열은 다음과 같은 상황에서 필요합니다:

    • 대량의 데이터를 처리할 때
    • 데이터의 순서가 중요할 때
    • 동일한 타입의 데이터를 그룹화해야 할 때

     

    2. 배열 선언 방법

     

    Java에서 배열을 선언하는 방법은 다음과 같습니다.

    // 1차원 배열 선언
    int[] array1;
    
    // 2차원 배열 선언
    int[][] array2;

     

     

    배열을 선언하면서 초기화하는 방법도 있습니다.

    int[] array1 = new int[5];
    int[][] array2 = new int[3][4];

     

     2차원 배열은 다음장에서 다룰 내용입니다. 눈으로만 확인하시고 넘어가주세요.

     

    배열의 크기를 지정하여 선언하면, 해당 크기만큼 메모리가 할당됩니다. 그만큼 알맞는 크기를 지정하는 게 중요합니다.

     

    특징:

    • 배열 선언 후 크기 지정 필요
    • 배열 크기 변경 불가

     

    3. 배열이란?

     

    배열은 고정된 크기를 가지며, 선언 시 지정된 크기는 변경할 수 없습니다. 각 요소는 인덱스를 통해 접근할 수 있으며, 인덱스는 0부터 시작합니다. 예를 들어, array1의 첫 번째 요소는 array1 [0]입니다.

     

    특징:

    • 0부터 시작하는 인덱스
    • 인덱스를 통한 요소 접근

     

    4. 배열 안의 데이터 접근 방법

     

    배열의 각 요소는 인덱스를 사용하여 접근합니다.

    int[] numbers = {1, 2, 3, 4, 5};
    int firstNumber = numbers[0]; // 첫 번째 요소
    int secondNumber = numbers[1]; // 두 번째 요소

     배열의 단건 데이터를 출력할 때 유용합니다.

     

    아니면, 반복문을 사용하여 배열의 모든 요소에 접근할 수도 있습니다

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

     배열의 모든 요소를 출력할 때 유용합니다.

     

     

    특징:

    • 인덱스를 통한 빠른 접근
    • 반복문을 통한 전체 요소 접근

     

    5. 배열 데이터 초기화

     

    배열은 선언과 동시에 초기화할 수 있습니다.

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

     

    또는 별도로 초기화할 수도 있습니다.

    int[] array1 = new int[5];
    array1[0] = 1;
    array1[1] = 2;
    // ...

     

    특징:

    • 선언 시 초기화 가능
    • 개별 요소 초기화 가능

     

    6. 배열의 크기

     

     배열의 크기는 선언 시 지정하며, 한번 지정된 크기는 변경할 수 없습니다. 배열의 크기를 확인하려면 length 속성을 사용합니다.

    int[] array1 = new int[5];
    System.out.println("배열의 크기: " + array1.length);

     

     

    특징:

    • 고정된 크기
    • length 속성으로 크기 확인

     

    실습

     

    (출처) 스마트인재개발원

     

     

    풀이 :

    import java.util.Random;
    
    public class Main {
    	public static void main(String[] args) {
    		Random rd = new Random(); // Random 객체 생성
    		
    		int[] array = new int[5]; // 1. 정수형 데이터 5개를 저장할 수 있는 배열 array를 선언하세요.
    		
    		// 배열 안의 모든 데이터를 임의의 값으로 초기화하세요.(1~100까지의 수)
    		array[0] = rd.nextInt(100) + 1;
    		array[1] = rd.nextInt(100) + 1;
    		array[2] = rd.nextInt(100) + 1;
    		array[3] = rd.nextInt(100) + 1;
    		array[4] = rd.nextInt(100) + 1;
    		
    		int cnt = 0; // 홀수의 개수가 몇개인지 출력하기 위한 변수 선언 및 초기화
    		
    		System.out.println("array에 들어있는 홀수는 ");
    		
    		for (int i : array) {
    			if (i % 2 == 1) { // i가 홀수면
    				System.out.print(i + " ");
    				cnt++;
    			}
    		}
    		System.out.println("이며, 총" + cnt + "개 입니다.");
    		
    	}
    }

     

     위 풀이에서 임의의 수이므로 Random을 생성해서 사용하였고, 반복문을 향상된 for문을 이용하였습니다. 향상된 for문은 배열을 반복하면서 수행하는데 유용합니다.

     

     

     

    (출처) 스마트인재개발원

     

     

    풀이 :

    import java.util.Random;
    
    public class Main {
    	public static void main(String[] args) {
    		Random rd = new Random(); // Random 객체 생성
    		
    		int[] array = new int[5]; // 1. 정수형 데이터 5개를 저장할 수 있는 배열 array를 선언하세요.
    		
    		// 배열 안의 모든 데이터를 임의의 값으로 초기화하세요.(1~10까지의 수)
    		for (int i = 0; i < array.length; i++) {
    			array[i] = rd.nextInt(10) + 1;
    		}
    		
    		
    		System.out.print("배열 안에 들어있는 값 : [");
    		for (int i = 0; i < array.length; i++) {
    			System.out.print(array[i]);
    			if (i != array.length - 1) {
    				System.out.print(", ");
    			}
    		}
    		System.out.print("]");
    		System.out.println();
    		
    		int maxNum = 0;
    		
    		for (int i = 0; i < array.length; i++) {
    			if (maxNum < array[i]) { // 배열안의 값이 최대값보다 크면 최대값을 배열안의 값으로 교체
    				maxNum = array[i];
    			}
    		}
    		
    		System.out.println("가장 큰 값은 " + maxNum + "입니다.");
    		
    	}
    }

     

     위 예제는 문제 풀이보다 출력이 더 힘든 것 같습니다. 이번엔 for문을 사용해서 배열의 각 index에 값을 random으로 넣었습니다.

     

     

    (출처) 스마트인재개발원

     

     

    풀이 :

    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		
    		int[] array = new int[5]; // 1. 정수형 데이터 5개를 저장할 수 있는 배열 array를 선언하세요.
    		
    		// 2. 배열 안의 데이터를 모두 입력 받으세요.
    		for (int i = 0; i < array.length; i++) {
    			System.out.print(i + 1 + "번째 입력 >> ");
    			array[i] = sc.nextInt();
    		}
    		
    		// 3. 입력한 점수를 출력하세요.
    		System.out.print("입력된 점수 : [");
    		for (int i = 0; i < array.length; i++) {
    			System.out.print(array[i]);
    			if (i != array.length - 1) System.out.print(", ");
    		}
    		System.out.print("]");
    		System.out.println();
    		
    		int maxScore = 0;
    		
    		// 4. 최고 점수와 최저 점수를 출력하세요.
    		for (int i = 0; i < array.length; i++) {
    			if (maxScore < array[i]) { // 배열안의 값이 최고값 보다 크면 배열안의 값을 최고값으로 교체
    				maxScore = array[i];
    			}
    		}
    		
    		System.out.println("최고 점수 : " + maxScore);
    		
    		int minScore = maxScore;
    		
    		for (int i = 0; i < array.length; i++) {
    			if (minScore > array[i]) { // 최소값이 배열안의 값보다 크면 최소값을 배열안의 값으로 교체
    				minScore = array[i];
    			}
    		}
    		
    		System.out.println("최저 점수 : " + minScore);
    		
    		// 5. 점수의 총합과 평균을 출력하세요.
    		int sum = 0; // 총합 변수
    		float avg = 0; // 평균 변수
    		
    		for (int i : array) {
    			sum += i;
    		}
    		
    		avg = (float) sum / array.length;
    		
    		System.out.println("총합 : " + sum);
    		System.out.println("평균 : " + avg);
    		
    		
    		
    	}
    }

     

     위 예제는 코드를 풀어서 진행했습니다. 처음 하시는 분들은 한꺼번에 처리하기보다 나눠서 처리하는 것을 추천드립니다.

     

     

    (출처) 스마트인재개발원

     

     

    풀이 :

    import java.util.Random;
    
    public class Main {
    	public static void main(String[] args) {
    		Random rd = new Random(); // Random 객체 생성
    		// 1. 정수형 데이터 5개를 저장할 수 있는 배열 array를 선언하세요.
    		int[] array = new int[5];
    		
    		// 2. 배열 안의 데이터를 모두 임의의 값으로 초기화하세요. (1~10까지의 수)
    		for (int i = 0; i < array.length; i++) {
    			array[i] = rd.nextInt(10) + 1;
    		}
    		
    		// 3. 단, 배열에 중복된 값을 제거해주세요.
    		for (int i = 0; i < array.length; i++) {
    			array[i] = rd.nextInt(10) + 1;
    			for (int j = 0; j < i; j++) {
    				if (array[i] == array[j]) {
    					i--;
    					break;
    				}
    			}
    		}
    		
    		// 4. 배열 안의 데이터를 모두 출력해주세요.
    		System.out.println("=====로또타임=====");
    		System.out.println("이번주 출력번호는요...!!두구두구두구!!!!");
    		for (int i = 0; i < array.length; i++) {
    			System.out.print(array[i] + " ");
    		}
    		
    	}
    }

     

     다른 부분은 어려운 것이 없지만, 중복 제거하는 부분이 머리를 조금 쓰셔야 됩니다.

     일단 처음으로 랜덤 추출한 숫자를 i 0번째에 넣어놓고 [i] 1 [j] 0, [i] 2 [j] 0, 1, [i] 3 [j] 0, 1, 2 이런 식으로 비교합니다. 그러다 배열에 중복된 값이 있으면 다시 i를 마이너스해 랜덤 숫자를 추출하게끔 만듭니다. 그 후에는 다시 똑같은 식으로 비교합니다. 이해가 잘 안 되시면 그림으로 그려보시는 걸 추천드립니다.

     

     

     

    (출처) 스마트인재개발원

     

     

    풀이 :

    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		
    		// 1. 문자형 데이터를 저장할 수 있는 배열 array를 선언 후 '수','박'으로 초기화하세요.
    		char[] data = {'수', '박'};
    		
    		System.out.println("====수박 게임 start~!====");
    		System.out.print("숫자를 입력하세요 >> ");
    		int num = sc.nextInt();
    		
    		for (int i = 1; i <= num; i++) {
    			System.out.print(i % 2 == 0 ? data[1] : data[0]);
    		}
    	}
    }

     

     이 문제가 왜 로또 추첨 뒤에 배치되었는지 모르겠지만, 로또보다 훨씬 난이도 쉬운 문제라고 생각합니다. 오랜만에 삼항연산자를 사용하여 출력하였습니다.

     

     

     

    마무리

     

    현업이 보는 배열의 필요성

     현업에서 배열은 매우 중요한 역할을 합니다. 데이터의 효율적인 관리와 처리, 알고리즘 구현, 메모리 관리 등의 이유로 배열이 필요합니다. 특히 대용량 데이터를 다룰 때, 배열은 빠른 접근 속도를 제공하여 성능을 향상시킵니다. 또한, 배열은 다른 자료 구조의 기초가 되며, 다양한 알고리즘의 기반이 되기도 합니다. 예를 들어, 정렬 알고리즘, 탐색 알고리즘 등에서 배열은 기본적인 데이터 구조로 사용됩니다.

     

     Java에서 배열은 매우 중요한 자료 구조로, 데이터의 효율적인 저장과 관리를 위해 필수적입니다. 배열의 개념, 선언, 초기화, 접근 방법을 이해하고, 배열의 크기를 적절히 관리하는 것이 중요합니다. 현업에서도 배열을 효과적으로 활용하여 성능을 최적화하는 것이 중요합니다.

     

     배열 파트는 데이터 접근이나 초기화 방식 부분이 기존의 변수와 달라 세부적으로 나뉘어 있습니다. 각각의 방법을 잘 익히셔서 배열을 다루는 데 익숙해지셨으면 좋겠습니다. 감사합니다!