자바 다차원 배열과 가변 배열에 대해 알아보자
2025. 1. 31. 13:00ㆍJAVA
728x90
반응형
안녕하세요. 진득 코딩입니다.
저번 시간에는 여러 변수들을 쉽게 다룰 수 있는 배열에 대해 알아보았습니다.
이번 시간에는 이러한 배열들을 좀 더 다채롭게 사용할 수 있는 다차원 배열과 가변 배열에 대해 살펴보도록 하겠습니다.
다차원 배열
- 2차원 이상의 배열, 즉 다차원(multi-dimensional) 배열도 선언해서 사용할 수 있습니다.
- 메모리의 용량이 허용하는 한, 차원의 제한은 없습니다.
- 다만 주로 1, 2차원 배열이 사용되므로 2차원 배열만 잘 이해하고 나면 3차원 이상의 배열도 어렵지 않게 다룰 수 있습니다.
2차원 배열의 선언과 인덱스
- 2차원 배열을 선언하는 방법은 1차원 배열과 같지만 괄호[ ]가 하나 더 들어갑니다.
선언 방법 | 선언 예 |
타입[ ][ ] 변수이름; | int[ ][ ] score; |
타입 변수이름[ ][ ]; | int score [ ][ ]; |
타입[ ] 변수이름[ ]; | int [ ] score[ ]; |
- 3차원이상의 고차원 배열의 선언은 대괄호[ ]의 개수를 차원의 수만큼 추가해 주면 됩니다.
- 2차원 배열은 주로 테이블 형태의 데이터를 담는데 사용됩니다.
- 만일 4행 3열의 데이터를 담기 위한 배열을 생성하려면 다음과 같이 코드를 작성해 주면 됩니다.
2차원 배열의 index
- 2차원 배열은 행(row)과 열(column)로 구성되어 있기 때문에 index도 행과 열에 각각 하나씩 존재합니다.
- '행 index'의 범위는 '0~행의길이-1'이고 '열 index'의 범위는 '0~열의 길이-1'입니다.
- 2차원 배열의 각 요소에 접근하는 방법은 '배열이름[행 index][열 index]입니다.
- 만일 배열 score를 생성하면, score[0][0]부터 score[3][2]까지 모두 12개(4X3=12)의 int값을 저장할 수 있는 공간이 마련됩니다.
- 각 배열 요소에 접근할 수 있는 방법은 아래의 그림과 같습니다.
- 배열 score의 1행 1열에 100을 저장하고, 이 값을 출력하려면 다음과 같이 코드를 작성해 주면 됩니다.
2차원 배열의 초기화
- 2차원 배열도 괄호 { }를 사용해서 생성과 초기화를 동시에 할 수 있습니다.
- 다만, 1차원 배열보다 괄호 { }를 한번 더 써서 행별로 구분해줍니다.
- 이때 다음과 같이 행별로 줄 바꿈을 해주면 가시성을 높일 수 있습니다.
- 2차원 배열은 '배열의 배열'로 구성되어 있습니다.
- 즉, 여러 개의 1차원 배열을 묶어서 또 하나의 배열로 만든 것입니다.
- 2차원 배열의 행의 개수와 열의 개수를 알기 위한 코드는 각각 다릅니다.
- 예를 들어 score라는 2차원 배열의 행의 개수를 알기 위해서는 score.length를 사용합니다.
- 열의 개수를 알기 위해서는 score[해당 열 번호].length를 사용합니다.
행의 개수: (배열의 이름).length
열의 개수: (배열의 이름)[해당 열 번호].length
- 만일 for문을 이용해서 2차원 배열을 초기화한다면 다음과 같이 코드를 작성합니다.
- 위 코드는 2차원 배열 score의 모든 요소를 10으로 초기화합니다.
- 2차원 배열 score의 모든 요소의 합을 구하고, 출력하는 예제입니다.
- 향상된 for문으로 2차원 배열의 모든 요소를 읽어오는 방법을 살펴볼 수 있습니다.
- 2차원 배열 score의 각 요소는 1차원 배열이므로 for문을 두 개 사용해서 출력해야 합니다.
- 5명의 학생의 세 과목 점수를 더해서 각 학생의 총점과 평균을 계산하고, 과목별 총점을 계산하는 예제입니다.
가변 배열
- 2차원 이상의 배열을 '배열의 배열'의 형태로 처리한다는 사실을 이용하면 보다 자유로운 형태의 배열을 구성할 수 있습니다.
- 2차원 이상의 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고, 추후에 각기 다른 길이의 배열을 생성함으로써 고정된 형태가 아닌 보다 유동적인 가변 배열을 구성할 수 있습니다.
- 예를 들어 '5X3' 길이의 2차원 배열 score를 생성하는 코드를 작성할 때는 다음과 같이 작성합니다.
- 위 코드를 다음과 같이 표현할 수 있습니다.
- 위 코드와 같이 2차원 배열을 생성하면 다음과 같이 각 행마다 다른 길이의 배열을 생성할 수 있습니다.
- 이때 가변 배열의 행의 길이는 같지만 열의 길이는 각각 달라지는 것을 알 수 있습니다.
- 가변 배열 역시 중괄호 { }를 이용해서 다음과 같이 생성과 초기화를 동시에 하는 것이 가능합니다.
다차원 배열의 활용
- 배를 상대방이 알지 못하게 배치한 다음, 번갈아가며 좌표를 불러서 상대방의 배의 위치를 알아내는 게임을 간단히 하여 만든 예제입니다.
- 2차원 byte배열 shtpBoard에는 상대방의 배의 위치를 저장합니다.
- 0은 바다이고, 1은 배가 있는 것입니다.
- 입력받은 좌표 x, y에 저장된 값이 1이면, board[x][y]에 'O'를 저장하고, 1이 아니면 'X'를 저장합니다.
- 5X5 크기의 빙고판에 1~25의 숫자를 차례로 저장한 다음에, Math.random()을 이용해서 저장된 값의 위치를 섞습니다.
- 사용자로부터 숫자를 입력받아서 일치하는 숫자가 빙고판에 있으면 해당 숫자를 0으로 바꿉니다.
- 수학에서 두 개의 행렬(matrix) m1과 m2가 있을 때, 이 두 행렬을 곱한 결과인 행렬 m3를 출력하는 예제입니다.
- 두 행렬의 곱셈이 가능하려면, 배열 m1의 열의 길이와 배열 m2의 행의 길이가 일치해야 합니다.
- 영단어를 보여주고 단어의 뜻을 맞추는 예제입니다.
- words[i][0]은 문제이고, words[i][1]은 답입니다.
- words[i][0]을 화면에 보여주고, 입력받은 답은 tmp에 저장합니다.
- 그다음에 equals()로 tmp와 words[i][1]을 비교해서 정답인지 확인합니다.
이번 시간에는 2차원 배열과 가변 배열에 대해 알아보았습니다.
눈에 보이지 않는 테이블 형태의 배열을 생각해서 코드를 작성하는 것은 너무 머리 아프기도 하고 어렵기 때문에 종이에 적으면서 코드를 작성하거나 배열을 만드는 것을 추천합니다.
이번 포스팅은 여기까지입니다.
궁금하신 사항이나 문의하실 사항은 댓글로 남겨주시면 열심히 답글 달도록 하겠습니다.
끝까지 봐주셔서 감사합니다.😊
728x90
반응형
LIST
'JAVA' 카테고리의 다른 글
자바 메서드와 JVM의 메모리 구조에 대해 알아보자 (0) | 2025.02.04 |
---|---|
객체지향언어 자바의 객체와 클래스를 알아보자 (0) | 2025.02.03 |
자바 String 배열에 대해 알아보자 (0) | 2025.01.30 |
자바 배열에 대해 알아보자 (2) | 2025.01.29 |
자바 반복문 while문에 대해 알아보자 (0) | 2025.01.06 |