ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [무작정 기록] 배열
    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

     

     

     

     

     

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

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

     

     

    반응형

    'IT > JAVA' 카테고리의 다른 글

    [무작정 기록] 제어문(선택문/반복문/기타)  (0) 2025.03.14
    [무작정 기록] 연산자  (0) 2025.03.11
    [무작정 기록] 데이터 타입  (1) 2025.03.07
    [무작정 기록] JAVA용어 정리  (0) 2025.03.07
    [무작정 기록] 자바란?  (0) 2025.02.12

    댓글

Designed by Tistory.