-
[무작정 기록] 배열IT/JAVA 2025. 4. 11. 09:10
배열(Array Type)
- 배열이란 같은 자료형의 기억 공간을 연속적으로 모아 놓은것을 말한다.
- 배열은 요소들을 일괄적으로 처리할 수 있기 때문에,
반복문을 활용하여 배열의 값을 하나씩 꺼내 사용하거나 수정 할 수 있다.- 예를 들어, 10명의 학생 점수를 저장하려면 10개의 변수를 각각 만들 필요 없이,
하나의 배열을 선언하여 사용할 수 있다.- 즉, 배열은 많은 변수가 필요할 때, 하나의 대표이름과 크기만 지정하여 효율적으로 관리 할 수 있는 자료구조이다.
배열 작성하기
기본형식
ex) int []student; // 배열선언 student = new int[30]; // 배열생성 int []student = new int[]; // 선언과 생성을 동시에 진행 // ----> 위와 같은 명령으로 student라는 대표이름으로 정수형 변수가 30 만들어 졌음. // ----> 이 30개를 "배열의 요소" 라고 한다.
※ 자바 배열의 핵심 개념
- 배열을 선언시 기호 []는 어디에 선언해도 문제없다. (그래도 가급적이면 동일한 위치에 두기)
- 배열로 선언시 타입을 지정하며, 지정된 타입외 정보가 오면 오류.- 배열은 인덱스를 사용하며, 인덱스는 0부터 시작한다.
(배열의 크기가 n이라면 사용할수 있는 배열의 인덱스는 0 ~ n-1)
- 배열은 선언함과 동시에 초기값을 가진다( 0 )
(배열의 크기는 초기화한 만큼 지정된다.)
// 상세 보기! int []student = new int[ 30 ]; // int = 데이터타입 // [] = 배열 선언 // student = 배열명 // new int = 해당 데이터 타입으로 선언 // 30 = 배열의 요소
메모리 할당
Stack 과 Heap은 자바에서 메모리를 관리하는 영역이다.
Stack 메모리 Heap 메모리 - 기본형 타입의 데이터가 저장됨
* 기본형 데이터(int, double 등)- 참조형 타입의 데이터는 Heap에 실제 값이 저장된다.
Stack에는 그 값을 가리키는 참조값(주소)이 저장된다.
* 참조형 데이터(String, 배열 등)
- 배열 처럼 참조형 변수는 값 자체가 아닌
주소값을 통해 Heap의 데이터를 조작한다.
- 즉, d[0] = 55; 처럼 값을 바꿔도 참조 주소(= Heap 위치)는
그대로, 단지 내용만 변경된다.예시
// ! 배열을 d[0] = 55; 이런식으로 중간에 값을 바꿔도 포트번호가 바뀌지 않고 해당위치의 값이 바뀐다. int a = 10; // Stack에 저장 int b = 2.0; // 오류! 2.0은 double로 int에 저장 불가 String c = "Hello"; // String은 참조형 -> Heap에 "Hello", Stack 에는 참조값 int d[] = {1,2,3}; // 배열은 참조형 -> Heap에 [1,2,3], Stack 에는 d 주소 저장 ** 메모리 ******************************* Stack Heap int a = 10 int b = 2.0 String c -- 참조 [포트번호 : nnnn] --> Hello int d -- 참조 [포트번호 : nnnn] --> 1,2,3
∴ [참고자료] 변수의 기본형&참조형 타입 차이 이해하기
☕ JAVA 변수의 기본형 & 참조형 타입 차이 이해하기
변수의 기본형 & 참조형 타입 변수(variable)란 데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미한다. 그리고 자바에서 말하는 데이터 타입(자료형)이란, 변수에
inpa.tistory.com
for each 반복문 (향상된 for문)
※ 중요 핵심 개념
- 배열의 요소 수만큼 반복
- 다중배열을 사용할 경우
ㄴ 1차원 배열의 집합으로 표현할때는 데이터 타입에 따라 'int []' 로 표현한다.
- 정수형 일차원 배열을 하나씩 꺼내어 오면 그건 정수형 변수이다.
for each문 작성하기
// 일차원 배열 for( 자료형 변수이름(별칭 같은것을 사용) : 배열이름 ){ 반복시킬 명령어(들); System.out.println(별칭이름+" "); // 배열안에있는 원소들을 하나씩 불러온다. } // 다중 배열 for( int [](자료형) row(별칭) : array(배열이름)){ 반복시킬 명령어 입력~ for( int item(2차 배열의 별칭) : row(1차 별칭의 배열이름) ){ 반복시킬 명령어 입력~ } }
다차원 배열과 정렬
2차원 배열
2차원 배열은 1차원 배열의 덩어리, 즉 묶음이다. (각 '행'이 하나의 1차원 배열)
// 4행 3열의 2차원 배열을 생성 (4개의 1차원 배열, 각 배열에 3개의 요소) // new int[행][열] int [][]b = new int[4][3]; <------------ 정수형 변수가 3칸 짜리 4줄 열 열 열 0 1 2 행 ┌─────────────┐ 0 │ [ ] [ ] [ ] │ 1 │ [ ] [ ] [ ] │ 2 │ [ ] [5] [ ] │ ← b[2][1] = 5 3 │ [ ] [ ] [ ] │ └─────────────┘
※ 2차원 배열의 중요 핵심 개념
- 2차원 배열은 1차원 배열들의 묶음이다.
ㄴ 즉, 행마다 하나의 1차원 배열이 존재함.
ㄴ 2차원 배열 = 배열의 배열- 배열의 행 개수는 '.length' 로 확인 가능.
ㄴ 즉 2차원 배열의 사이즈는 행만큼. -> int[3][4] a; a.length ----> 3
- 전체 원소의 수는 행의 수 * 열의 수
ㄴ 2차원 배열의 원소는 각 행에 들어있는 원소를 모두 합한 수.
- 선언함과 동시에 초기화 할 수 있다.
- 각 요소는 1차원 배열이다.
- 다차원 배열은 자료형이 같아야지만 한다.
ㄴ int[][] -> 모든 값은 int
ㄴ String[][] -> 모든 값은 String
3차원 배열
3차원 배열은 2차원 배열들을 여러개 묶은 것이다.
즉, '면(판)'을 가진 배열
int[][][] arr = new int[2][3][4]; → 2면, 3행, 4열 구조 → 내부적으로는 2개의 2차원 배열이고, 각 2차원 배열은 3개의 1차원 배열을 가지며, 각 1차원 배열은 4개의 정수형 값을 가짐. 면 0: [ [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0] ] 면 1: [ [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0] ] // 예시) arr[1][2][3] = 99; // 2번째 면, 3번째 행, 4번째 열에 값 저장
배열의 값 바꿔치기 (Swap)
서로 다른 위치의 값을 바꿀 때 temp 임시 변수를 사용
* temp 임시 변수 : 빈 배열을 하나 만들어 놓은 개념
// for each문을 사용한 배열의 바꿔치기 int[] numbers = {10, 20, 30, 40, 50}; // 바꾸기 전 출력 System.out.println("바꾸기 전: "); for (int num : numbers) { System.out.print(num + " "); } // 인덱스 1과 인덱스 3의 값 바꾸기 (20 <-> 40) int temp = numbers[1]; numbers[1] = numbers[3]; numbers[3] = temp; // 바꾼 후 출력 System.out.println("\n바꾼 후: "); for (int num : numbers) { System.out.print(num + " "); } -> 바꾸기 전 : 10 20 30 40 50 -> 바꾼 후 : 10 40 30 20 50
// 이중 for문을 사용한 배열의 바꿔치기 for(int i = 0; i < a.length; i++){ system.out.println(""); for(int j = 0; j < a.length; j++){ // i번째와 j번째 비교 // 오름차순 형태로 내림차순은 i, j를 반대로 입력하면됨 b = a[i]; // 0 = 2 a[i] = a[j]; // 2 = 3 a[j] = b; // 3 = 3 // 즉 b에 원값을 복사해 넣어놓고 // a의 값을 수정하면서 최종적인 값을 하나씩 b에 넣는다. System.out.println(""); } }
반응형'IT > JAVA' 카테고리의 다른 글
[무작정 기록] 제어문(선택문/반복문/기타) (0) 2025.03.14 [무작정 기록] 연산자 (0) 2025.03.11 [무작정 기록] 데이터 타입 (1) 2025.03.07 [무작정 기록] JAVA용어 정리 (0) 2025.03.07 [무작정 기록] 자바란? (0) 2025.02.12