Java에서 배열(Array) 선언과 활용 예제

안녕하세요, 여러분! 오늘은 자바의 기본 중의 기본, 바로 배열(Array)에 대해 함께 알아보는 시간을 가져보려고 해요. 프로그래밍을 하다 보면 데이터를 여러 개 저장해야 하는 경우가 정말 많죠? 이럴 때 바로 배열이라는 친구가 정말 유용하게 쓰인답니다. 마치 여러 개의 물건을 담을 수 있는 상자처럼 말이에요.

자바에서 배열을 어떻게 선언하고, 활용하는지 궁금하셨던 분들 많으시죠? 크기도 마음대로 조절하고, 원하는 값으로 초기화하는 방법까지 차근차근 알려드릴게요. 실제 자바 배열 활용 예시를 통해 바로바로 이해할 수 있도록 준비했어요. 게다가 실무에서 자주 사용되는 배열 메서드까지 쏙쏙 알려드릴 테니, 오늘 포스팅 놓치지 마세요!

 

 

배열 선언의 다양한 방법

자바에서 배열을 다루는 것은 프로그래밍의 기본 중 기본이라고 할 수 있죠! 마치 요리를 할 때 꼭 필요한 냄비나 프라이팬처럼 말이에요. 그런데 이 배열, 어떻게 선언하는지, 또 얼마나 다양한 방법이 있는지 궁금하지 않으세요? 지금부터 자바 배열 선언의 다양한 방법들을 꼼꼼하게, 그리고 재밌게 알려드릴게요~! 😄

자바에서는 배열을 선언하는 방법이 크게 세 가지가 있어요. 마치 요리 레시피처럼 말이죠! 첫 번째는 배열의 타입과 크기를 명시적으로 지정하는 방법이에요. 두 번째는 배열의 타입만 지정하고 초기값을 통해 크기를 정하는 방법이고요. 마지막으로 세 번째는 익명 배열을 사용하는 방법입니다. 각 방법의 특징과 장단점을 살펴보면서 어떤 상황에 어떤 방법을 사용하는 것이 효율적인지 알아볼게요!

1. 배열 타입과 크기 명시적 선언

이 방법은 가장 기본적이고 많이 사용되는 방법이에요. 마치 볶음밥을 만들 때 밥, 야채, 고기를 준비하는 것처럼, 배열의 타입과 크기를 미리 정해주는 방식이죠. int[] numbers = new int[5]; 와 같이 작성하면 정수형 데이터를 저장할 수 있는 크기가 5인 배열이 생성됩니다. numbers라는 이름의 배열은 0부터 4까지, 총 5개의 인덱스를 가지게 되는 거죠. 참 쉽죠? 😊 이 방법은 배열의 크기가 미리 정해져 있을 때 사용하면 아주 효율적이랍니다. 메모리 공간을 미리 확보해두기 때문에 나중에 배열의 크기를 변경할 필요가 없어 성능면에서도 유리해요! 👍

예를 들어, 학생 5명의 시험 점수를 저장해야 한다면 int[] scores = new int[5]; 와 같이 배열을 선언할 수 있겠죠? 각 인덱스에는 각 학생의 점수를 저장할 수 있어요. scores[0]에는 첫 번째 학생의 점수, scores[1]에는 두 번째 학생의 점수, 이런 식으로 말이죠. 만약 학생이 100명이라면? int[] scores = new int[100]; 처럼 크기를 100으로 바꿔주면 된답니다. 😉

2. 배열 타입만 지정하고 초기값으로 크기 설정

이 방법은 배열의 크기를 미리 알 수 없을 때 유용해요. 마치 냉장고에 있는 재료들을 보고 즉석에서 요리를 만드는 것과 같죠! String[] fruits = {"apple", "banana", "orange"}; 와 같이 초기값을 직접 지정하면 자바 컴파일러가 알아서 배열의 크기를 정해준답니다. 얼마나 편리한가요?! 🤩 이 예시에서는 fruits라는 문자열 배열이 생성되고, 크기는 초기값의 개수인 3이 됩니다. 각 요소에는 “apple”, “banana”, “orange” 값이 순서대로 저장되고요.

만약 친구들의 이름을 저장하는 배열을 만들어야 하는데, 몇 명의 친구가 있을지 모른다면? 걱정 마세요! String[] friends = {"John", "Jane", "Mike", "Emily"}; 와 같이 초기값만 지정해주면 된답니다. 자바가 알아서 크기를 4로 만들어 줄 거예요. 😊 이 방법은 배열의 크기가 유동적일 때 특히 유용해요!

3. 익명 배열 활용

이 방법은 배열을 한 번만 사용하고 더 이상 사용하지 않을 때 사용하는 특별한 방법이에요. 마치 일회용 접시처럼 말이죠! new int[] {1, 2, 3, 4, 5} 와 같이 선언하면 이름 없이 바로 배열을 생성할 수 있어요. 이렇게 생성된 배열은 메서드의 인자로 전달하거나 다른 변수에 바로 할당할 수 있답니다. 임시적으로 배열을 사용해야 할 때 아주 유용하죠! 하지만, 한 번 사용하고 나면 다시 사용할 수 없다는 점을 기억해 두세요! 🤔

예를 들어, 특정 메서드에 정수형 배열을 인자로 전달해야 하는데, 이 배열을 다른 곳에서는 사용하지 않을 경우 method(new int[] {10, 20, 30}); 와 같이 익명 배열을 사용하면 코드를 간결하게 작성할 수 있어요. 참 똑똑한 방법이죠? 😉

자, 이렇게 자바에서 배열을 선언하는 세 가지 방법을 모두 알아보았어요. 각 방법의 특징과 장단점을 잘 이해하고 상황에 맞는 방법을 선택하는 것이 중요하답니다. 마치 요리할 때 재료와 상황에 맞는 조리 도구를 선택하는 것처럼 말이죠! 이제 여러분은 자바 배열 선언 마스터! 🎉 다음에는 배열을 어떻게 활용하는지 더 자세히 알아볼게요! 기대해 주세요~! 🤗

 

배열의 크기와 초기화

자, 이제 배열의 크기와 초기화에 대해 자세히 알아볼까요? 배열을 다루다 보면 크기와 초기화는 정말 중요한 부분이에요! 마치 집을 짓기 전에 몇 명이 살 건지, 어떤 방을 몇 개 만들 건지 정하는 것과 같다고 할 수 있어요. 크기를 잘못 정하면 나중에 골치 아파지잖아요~? 초기화도 마찬가지예요. 빈 방에 가구를 어떻게 배치할지 미리 생각해두는 것처럼 말이죠!

배열의 크기

자바에서 배열의 크기는 배열을 선언할 때 정해지고, 한 번 정해진 크기는 변경할 수 없어요. 마치 콘크리트를 부어 만든 벽처럼 고정되어 있다고 생각하면 돼요. 그래서 처음에 크기를 정할 때 신중해야 해요! 예를 들어, 학생 30명의 시험 점수를 저장할 배열을 만들려면 int[] scores = new int[30]; 처럼 크기를 30으로 지정해야겠죠? 여기서 int[]는 정수형 배열을, scores는 배열의 이름을, new int[30]은 크기가 30인 새로운 정수형 배열을 생성한다는 의미예요. 이렇게 하면 0부터 29까지, 총 30개의 요소를 가진 배열이 만들어져요!

배열의 초기화

초기화는 배열의 각 요소에 처음 값을 할당하는 것을 말해요. 새 집에 가구를 들여놓는 것과 비슷해요. 초기화를 하지 않으면 배열의 요소들은 기본값(정수형은 0, 실수형은 0.0, boolean형은 false, 참조형은 null)으로 채워져요. scores 배열의 경우, 모든 요소가 0으로 초기화되는 거죠. 하지만 원하는 값으로 초기화하고 싶다면 어떻게 해야 할까요? 몇 가지 방법이 있어요!

배열 초기화 방법 1: 선언과 동시 초기화

첫 번째는 배열을 선언하면서 동시에 초기화하는 방법이에요. 예를 들어, 1, 2, 3이라는 값을 가진 정수형 배열을 만들고 싶다면 int[] numbers = {1, 2, 3};처럼 중괄호 {} 안에 값들을 나열하면 돼요. 참 쉽죠?! 이 방법은 배열의 크기가 작을 때 유용해요.

배열 초기화 방법 2: 각 요소에 값 할당

두 번째는 배열을 선언한 후에 각 요소에 값을 할당하는 방법이에요. scores 배열의 0번째 요소에 90, 1번째 요소에 85를 저장하려면 scores[0] = 90; scores[1] = 85; 처럼 하면 돼요. 배열의 인덱스는 0부터 시작한다는 것을 잊지 마세요! 마치 아파트 호수가 101호부터 시작하는 것과는 다르게, 배열의 첫 번째 요소는 0번째예요. 30개의 요소를 가진 배열이라면 인덱스는 0부터 29까지입니다! 만약 배열의 크기를 넘어서는 인덱스에 접근하려고 하면 ArrayIndexOutOfBoundsException이라는 무시무시한 예외가 발생하니 조심해야 해요!

배열 초기화 방법 3: 반복문 사용

세 번째, 반복문을 사용하여 초기화하는 방법도 있어요. 예를 들어, 10개의 요소를 가진 배열을 1부터 10까지의 값으로 초기화하려면 다음과 같이 할 수 있어요.

int[] numbers = new int[10];
for (int i = 0; i < numbers.length; i++) {
  numbers[i] = i + 1;
}

numbers.length는 배열의 크기를 나타내는 거예요. 이렇게 반복문을 사용하면 배열의 크기가 커도 효율적으로 초기화할 수 있어요! 특히 배열의 크기가 크거나, 특정 패턴으로 초기화해야 할 때 아주 유용해요. 예를 들어, 100개의 요소를 가진 배열을 모두 0으로 초기화해야 한다면, 일일이 arr[0] = 0; arr[1] = 0; ... arr[99] = 0; 이렇게 하는 것보다 반복문을 사용하는 것이 훨씬 효율적이겠죠?

배열의 크기와 초기화, 이제 좀 감이 잡히시나요? 처음엔 어려워 보일 수 있지만, 몇 번 연습하다 보면 금방 익숙해질 거예요! 다음에는 더 재밌는 내용으로 찾아올게요! 기대해 주세요~! ^^

 

자바 배열 활용 예시

자, 이제 드디어! 배열을 어떻게 활용하는지 알아볼 시간이에요! 설렘 가득한 마음으로 예시들을 살펴보면서 배열 활용의 묘미를 느껴보도록 해요! 실제로 어떻게 코드를 짜고, 어떤 상황에서 유용하게 쓸 수 있는지 직접 확인해보면 감이 팍팍 오실 거예요!

1. 성적 관리 프로그램: 학생 성적 저장 및 평균 계산

학생 5명의 성적을 저장하고 평균을 계산하는 프로그램을 만들어 볼까요? 배열을 사용하면 각 학생의 성적을 효율적으로 관리할 수 있어요. 자, 코드로 한번 확인해 볼게요!


public class GradeManager {
    public static void main(String[] args) {
        int[] scores = new int[5]; // 5명의 학생 성적을 저장할 배열 선언
        scores[0] = 95;
        scores[1] = 88;
        scores[2] = 76;
        scores[3] = 92;
        scores[4] = 85;

        int sum = 0;
        for (int i = 0; i < scores.length; i++) { // 배열의 모든 요소에 접근
            sum += scores[i]; // sum에 scores[i] 값을 누적하여 더해요
        }

        double average = (double) sum / scores.length;  // 평균 계산! double로 형변환하는 것 잊지 마세요~
        System.out.println("학생들의 평균 성적은: " + average + "점입니다!");
    }
}

이 코드에서는 scores라는 정수형 배열을 생성해서 5명 학생의 성적을 저장했어요. scores.length를 사용해서 배열의 크기를 알아내고, for 반복문을 통해 모든 성적을 더하고 평균을 계산했답니다! 어때요? 참 쉽죠~?!

2. 로또 번호 생성기: 랜덤 숫자 생성 및 중복 제거

자, 그럼 이번엔 좀 더 흥미진진한 예시를 볼까요?! 바로 로또 번호 생성기! 1부터 45까지의 숫자 중에서 중복 없이 6개의 숫자를 랜덤으로 뽑아내는 프로그램이에요. 배열을 사용해서 뽑은 숫자를 저장하고 중복을 확인해 볼 거예요. 두근두근!


import java.util.Random;
import java.util.Arrays;

public class LottoGenerator {
    public static void main(String[] args) {
        int[] lottoNumbers = new int[6];
        Random random = new Random();

        for (int i = 0; i < lottoNumbers.length; i++) {
            int randomNumber;
            do {
                randomNumber = random.nextInt(45) + 1; // 1부터 45까지의 랜덤 숫자 생성
            } while (contains(lottoNumbers, randomNumber, i)); // 중복된 숫자가 있는지 확인!

            lottoNumbers[i] = randomNumber;
        }

        Arrays.sort(lottoNumbers); // 오름차순으로 정렬하면 보기 더 편하겠죠?
        System.out.print("이번 주 로또 번호는: ");
        for (int number : lottoNumbers) {
            System.out.print(number + " ");
        }
        System.out.println("입니다! 행운을 빌어요~!!");
    }

    // 배열에 특정 숫자가 이미 존재하는지 확인하는 메서드
    public static boolean contains(int[] arr, int number, int currentIndex) {
        for (int i = 0; i < currentIndex; i++) {
            if (arr[i] == number) {
                return true; // 중복 발견!
            }
        }
        return false; // 중복 없음!
    }
}

contains() 메서드는 배열에 같은 숫자가 있는지 확인하는 역할을 해요. do-while 문을 사용해서 중복된 숫자가 나오면 다시 랜덤 숫자를 생성하도록 했죠! Arrays.sort() 메서드는 배열을 정렬해주는 아주 편리한 친구랍니다.

3. 문자열 처리: 문자 배열 활용

String 클래스는 문자열을 다루는 데 유용하지만, 가끔씩 문자 배열(char[])이 필요할 때가 있어요. 예를 들어, 각 문자에 대한 연산을 수행하거나, 문자열의 일부를 수정해야 할 때가 있죠.


public class StringToArray {
    public static void main(String[] args) {
        String message = "Hello, World!";
        char[] charArray = message.toCharArray();  // String을 char 배열로 변환

        // 각 문자를 대문자로 변환해볼까요?
        for (int i = 0; i < charArray.length; i++) {
            charArray[i] = Character.toUpperCase(charArray[i]);
        }

        String upperCaseMessage = new String(charArray);  // char 배열을 다시 String으로 변환
        System.out.println(upperCaseMessage); // HELLO, WORLD! 출력!

        // 특정 문자를 다른 문자로 바꿔볼까요?
        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i] == 'L') {
                charArray[i] = '!'; // 'L'을 '!'로 변경!
            }
        }
       String modifiedMessage = new String(charArray);
        System.out.println(modifiedMessage); // HE!!O, WOR!D! 출력
    }
}

위 예시에서는 toCharArray() 메서드를 사용해서 String을 char 배열로 변환하고, 각 문자를 대문자로 바꾸거나 특정 문자를 다른 문자로 바꾸는 방법을 보여줬어요. 이처럼 문자열을 char 배열로 변환하면 각 문자를 자유롭게 다룰 수 있답니다!

이 외에도 배열은 정말 다양하게 활용될 수 있어요! 데이터 분석, 이미지 처리, 게임 개발 등등... 상상하는 거의 모든 곳에서 배열이 사용된다고 해도 과언이 아니에요! 이제 여러분도 배열을 자유자재로 활용해서 멋진 프로그램을 만들어 보세요! 화이팅!

 

실무에서 자주 사용되는 배열 메서드

후~ 드디어 실무에서 자주 사용되는 배열 메서드 파트에 도착했네요! 지금까지 배열 선언하고 초기화하는 것까지 배웠으니 이제 실제로 쓸 수 있는 강력한 도구들을 꺼내 볼 시간이에요. 마치 요리 재료 손질 다 끝내고 본격적으로 맛있는 요리 시작하는 기분이랄까요? ^^

자바에서 배열을 다룰 때, 정말 다양한 메서드들을 활용할 수 있어요. 그중에서도 실무에서 특히! 자주 사용되는 핵심 메서드들을 쏙쏙 뽑아서 알려드릴게요. 이것만 알아둬도 개발 효율이 200%는 올라갈 거예요~! (장담합니다!)

1. Arrays.copyOf() - 배열 복사의 정석!

배열을 다룰 때 가장 기본적이면서도 중요한 작업 중 하나가 바로 복사죠! Arrays.copyOf() 메서드를 사용하면 기존 배열의 내용을 새로운 배열에 복사할 수 있어요. 원본 배열은 그대로 두고 사본을 수정하고 싶을 때 정말 유용하답니다. 예를 들어, 길이가 5인 int 배열 originalArraynewArray에 복사하고 싶다면 int[] newArray = Arrays.copyOf(originalArray, 5); 와 같이 간단하게 해결할 수 있어요. 참 쉽죠? 게다가 copyOf() 메서드는 두 번째 인자로 새로운 배열의 길이를 지정할 수도 있어요! 만약 원본 배열보다 더 큰 배열을 만들고 싶다면, 길이를 늘려서 복사하면 된답니다. 늘어난 부분은 0으로 채워져요~ 신기하죠?!

2. Arrays.copyOfRange() - 원하는 부분만 쏙!

copyOf() 메서드의 업그레이드 버전이라고 생각하면 돼요! Arrays.copyOfRange() 메서드는 원본 배열의 특정 범위만 복사할 수 있도록 해준답니다. 예를 들어, 길이가 10인 originalArray에서 인덱스 2부터 7까지의 요소만 복사하고 싶다면 int[] newArray = Arrays.copyOfRange(originalArray, 2, 8);처럼 사용하면 돼요. 주의할 점은 두 번째 인자는 시작 인덱스, 세 번째 인자는 끝 인덱스 + 1 이라는 거예요! 헷갈리지 않도록 조심하세요~?

3. Arrays.sort() - 정렬 마법!

데이터를 다룰 때 정렬은 필수죠! Arrays.sort() 메서드는 배열의 요소를 오름차순으로 정렬해준답니다. 숫자든 문자든 상관없이 정렬해주니 얼마나 편한지 몰라요~! int[] numbers = {5, 2, 8, 1, 9}; 와 같은 배열이 있다면, Arrays.sort(numbers); 한 줄이면 짠! 하고 {1, 2, 5, 8, 9} 로 정렬된답니다. 정렬 알고리즘 공부하느라 머리 싸맬 필요 없이 간단하게 해결할 수 있어서 정말 좋아요! 게다가, 특정 범위만 정렬하고 싶다면 Arrays.sort(numbers, 1, 4); 와 같이 시작과 끝 인덱스를 지정해 줄 수도 있답니다. 정말 똑똑한 메서드죠?!

4. Arrays.binarySearch() - 숨바꼭질 끝판왕!

이진 탐색 알고리즘을 구현하는 건 생각보다 복잡하죠? 하지만 Arrays.binarySearch() 메서드를 사용하면 정렬된 배열에서 특정 값을 찾는 것이 놀랍도록 쉬워진답니다! 예를 들어, 정렬된 numbers 배열에서 숫자 8을 찾고 싶다면, int index = Arrays.binarySearch(numbers, 8); 와 같이 하면 돼요. 만약 찾는 값이 배열에 있다면 해당 값의 인덱스를 반환하고, 없다면 음수 값을 반환해요. 이진 탐색의 시간 복잡도는 O(log n)이기 때문에, 데이터 양이 많을수록 그 진가를 발휘한답니다! 검색 속도가 엄청나게 빨라진다는 거죠~!

5. Arrays.fill() - 배열 채우기 달인!

배열의 모든 요소를 특정 값으로 채우고 싶을 때, Arrays.fill() 메서드가 딱이에요! int[] array = new int[10]; 와 같이 길이가 10인 배열을 만들고, Arrays.fill(array, 7); 을 실행하면 배열의 모든 요소가 7로 채워진답니다. 특정 범위만 채우고 싶다면 Arrays.fill(array, 2, 5, 7); 와 같이 시작과 끝 인덱스를 지정해주면 돼요. 인덱스 2부터 4까지 7로 채워지겠죠? 배열 초기화가 이렇게 간단해질 수 있다니, 정말 놀랍지 않나요?!

6. Arrays.equals() - 배열 비교는 이제 그만!

두 배열이 같은지 비교하는 작업, 생각보다 귀찮죠? 하지만 Arrays.equals() 메서드를 사용하면 두 배열의 내용을 간편하게 비교할 수 있어요. int[] array1 = {1, 2, 3};int[] array2 = {1, 2, 3}; 가 있다면, boolean isEqual = Arrays.equals(array1, array2); 를 실행하면 isEqual 변수에 true가 저장된답니다. 만약 두 배열의 길이나 내용이 다르다면 false를 반환해요. 배열 비교, 이제 더 이상 고민하지 마세요~!

7. Arrays.asList() - 배열을 List로 변신!

배열을 List로 변환해야 할 때가 종종 있죠? Arrays.asList() 메서드를 사용하면 배열을 List로 간편하게 변환할 수 있어요. String[] array = {"apple", "banana", "orange"}; 와 같은 배열이 있다면, List<String> list = Arrays.asList(array); 한 줄이면 List로 변환 완료! List의 다양한 메서드를 활용하고 싶을 때 정말 유용하답니다. 배열과 List 사이를 자유롭게 넘나들며 개발하세요~!

자, 이렇게 실무에서 자주 사용되는 배열 메서드들을 쭉~ 살펴봤어요. 어때요? 생각보다 간단하고 강력하죠?! 이 메서드들을 잘 활용하면 코드가 훨씬 깔끔해지고 개발 시간도 단축할 수 있답니다. 앞으로 자바 배열 다룰 때 이 친구들을 꼭 기억해 주세요! 다음에는 더 재미있는 내용으로 찾아올게요! 기대해 주세요~!

 

자, 이렇게 오늘은 자바 배열에 대해서 알아봤어요! 어때요, 참 쉽죠? 처음엔 배열 선언하는 다양한 방법들이 조금 헷갈릴 수도 있지만, 직접 코드를 작성하고 실행해 보면 금방 익숙해질 거예요. 배열은 프로그래밍에서 정말 기본적이면서도 중요한 부분이니까요. 크기 지정하는 것도 잊지 마시고요! 다양한 활용 예시들을 통해서 배열이 얼마나 유용한지도 느껴보셨으면 좋겠어요. 실무에서 자주 쓰이는 메서드들도 잘 기억해두면 코딩할 때 정말 편리하답니다. 다음에는 더 재미있는 주제로 찾아올게요! 그때까지 열심히 코딩하며 실력을 갈고닦아 봐요! 궁금한 점이 있다면 언제든 댓글 남겨주세요.

 

Leave a Comment