IT/JAVA

[무작정 기록] 배열

Alo_alex 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

 

 

 

 

 

∴  [참고자료] 변수의 기본형&참조형 타입 차이 이해하기

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EB%B3%80%EC%88%98%EC%9D%98-%EA%B8%B0%EB%B3%B8%ED%98%95-%EC%B0%B8%EC%A1%B0%ED%98%95-%ED%83%80%EC%9E%85

 

☕ 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("");
    }
}

 

 

반응형