[1주차] Java 기초 예습 - (4)

서연·2025년 4월 11일

Java

목록 보기
4/36

1. 배열

  • 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

2. 배열의 선언과 생성

1. 배열의 선언

  • 배열을 다루기 위한 참조변수의 선언

2. 선언 방법

  • 타입[] 변수이름;
    • int[] age;
    • String[] name;
  • 타입 변수이름[];
    • int age[];
    • String name[];

3. 배열의 생성 : 실제 저장공간을 생성

3. 배열의 인덱스

  • 각 요소(저장공간)에 자동으로 붙는 일련 번호

    • 인덱스의 범위는 0부터 '배열길이 - 1'까지

      int[] age = new int[5];

      int beatitudoAge = age[3];
      배열 age의 4번째 요소의 값을 읽어서 beatitudoAge 변수에 저장

4. 배열의 길이와 초기화

1. 배열의 길이

배열이름.length

  • 배열의 길이 : int 타입 상수
  • int [] arr = new int[5] : 배열의 길이가 5인 int 배열
  • int len = arr.length; : arr.length의 값은 5이고 len 변수에 저장
  • 배열은 한번 생성되면 컴파일 후 실행되는 동안은 그 길이를 바꿀 수 없음

2. 배열의 한계점

  • 배열의 크기를 바꿀 수 없는 이유?
  1. new int[5];로 배열을 생성하면 int가 4byte이기 때문에 총 20byte를 저장하기 위한 연속적인 메모리 공간을 찾음
  2. 연속적인 공간을 찾아서 주소 배정
  3. 배정이 끝난 후 크기를 5가 아닌 10으로 늘려야 한다고 가정 했을 때 배정 받은 주소 뒤에 20byte를 추가적으로 배정해야 하는데 뒤에 연속적인 메모리 공간이 존재한다는 보장이 없음
    => 따라서 크기를 바꿀 수 없음
  • 배열의 크기가 부족할 때의 방법
    • 필요한 만큼 크기의 배열을 새롭게 만듦
    • 새로 만든 배열에 기존 배열의 값을 복사해서 저장

5. 배열의 초기화

  • 배열의 각 요소에 처음으로 값을 저장하는 것
  • 자동 초기화
  • 배열은 기본적으로 저장하려는 값의 타입의 기본값으로 자동 초기화함
  • 초기화 방법
    1. int[] num = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
    2. int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9};
      • new int 생략 가능

6. 배열 연습하기

1. 배열의 출력

  • int[] iArr = { 100, 95, 80, 70, 60 };
    • System.out.println(iArr);
      => 배열을 가리키는 참조변수 iArr의 값을 출력, [I@14318bb와 같은 형식의 문자열이 출력
    • for (int i=0; i<iArr.length; i++){
      ㅤㅤㅤㅤㅤSystem.out.println(iArr[i]);
      }
      => 배열의 요소를 순서대로 하나씩 출력
    • System.out.println(Arrays.toString(iArr));
      => 배열 iArr의 모든 요소를 출력, [100, 95, 80, 70, 60]이 출력

2. 종합과 평균

class Arrays3_2 {
    public static void main(String[] args) {
        int sum = 0; // 총합을 저장
        float avg = 0f; // 평균을 저장

        int[] score = {100, 40, 33, 50, 77, 29};

        for (int i = 0; i < score.length; i++) {
            System.out.println("score[" + i + "] = " + score[i]);
            sum += score[i];
        }

        avg = sum / (float) (score.length); // 계산결과를 float 타입으로 얻기 위해 형변환

        System.out.println("총합 = " + sum);
        System.out.println("평균 = " + avg);
    }
}

3. 최댓값과 최솟값

class Arrays3_3 {
   public static void main(String[] args) {
       int[] score = {65, 97, 88, 43, 33, 91, 28};

       int max = score[0]; // 최대값을 배열의 첫 번째 값으로 초기화 한다.
       int min = score[0]; // 최소값을 배열의 첫 번째 값으로 초기화 한다.

       for (int i = 0; i < score.length; i++) {
           if (score[i] > max) {
               max = score[i];
           } else if(score[i] < min) {
               min = score[i];
           }
       }

       System.out.println("최대값 = " + max);
       System.out.println("최소값 = " + min);
   }
}

7. String 배열

1. String 클래스

  • String 클래스 : char[]와 메서드를 결합한 것
  • 기본형처럼 사용이 가능한 참조형
    • String str = "행복";
    • String str = new String("행복");
  • 문자열을 많이 사용하기 때문에 특별하게 만들어진 클래스
  • String 클래스는 내용을 변경할 수 없음
  • String 클래스의 주요 메서드

2. String 배열의 선언과 생성

  • String[] name = new String[3];
    • 3개의 문자열을 담을 수 있는 배열을 생성
    • 참조형이기 때문에 기본값 null로 초기화
 class Arrays4_2 {
    public static void main(String[] args) {
        String[] strArr = {"축구", "야구", "골프", "테니스"};
        System.out.println("Arrays.toString(strArr) = " + Arrays.toString(strArr));
        
        String[] strArr2 = new String[4];
        System.out.println("Arrays.toString(strArr2) = " + Arrays.toString(strArr2));
    }
}

8. 2차원 배열

  • 테이블 형태의 데이터를 저장하기 위한 배열

1. 2차원 배열의 선언과 생성

  • int[][] score = new int [4][3];
    • 4행 3열의 2차원 배열 score가 생성
  • score[0][0] = 88;
    • 배열 score의 1행 1열에 88을 저장

2. 2차원 배열의 초기화

  • int[][] score = new int[][]{{}, {}, {}, {}};
  • int[][] score = {{}, {}, {}, {}};

9. Array

1. 문자열 비교와 출력

  • equals(), toString()
    • 2차원 배열일 때는 deepEquals(), deepToString()을 씀
 class Arrays6_1 {
    public static void main(String[] args) {
        int[] num = {0, 1, 2};
        int[][] score = {
                {88, 35, 100},
                {84, 60, 55},
                {100, 99, 72},
                {33, 54, 77}
        };

        System.out.println("Arrays.toString(num) = " + Arrays.toString(num));
        System.out.println("Arrays.deepToString(score) = " + Arrays.deepToString(score));
        System.out.println();

        String[][] strArr1 = {
                {"AAA","BBB","CCC"},
                {"aaa","bbb","ccc"},
        };
        String[][] strArr2 = {
                {"AAA","BBB","CCC"},
                {"aaa","bbb","ccc"},
        };

        // 1 차원 비교에는 equals
        System.out.println("Arrays.equals(strArr1[0], strArr2[0]) = " + Arrays.equals(strArr1[0], strArr2[0])); // true
        System.out.println("Arrays.equals(strArr1[1], strArr2[0]) = " + Arrays.equals(strArr1[1], strArr2[0])); // false

        System.out.println("Arrays.equals(strArr1, strArr2) = " + Arrays.equals(strArr1, strArr2)); // false

        System.out.println();
        // 다차원 비교에는 deepEquals
        System.out.println("Arrays.deepEquals(strArr1, strArr2) = " + Arrays.deepEquals(strArr1, strArr2)); // true
    }
}

2. 배열 복사

  • copyOf(), copyOfRange()

    class Arrays6_2 {
       public static void main(String[] args) {
           int[] arr = {0,1,2,3,4};
           System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
           
           System.out.println();
           // copyOf
           int[] arr2 = Arrays.copyOf(arr, arr.length);
           System.out.println("Arrays.toString(arr2) = " + Arrays.toString(arr2));
           int[] arr3 = Arrays.copyOf(arr, 3);
           System.out.println("Arrays.toString(arr3) = " + Arrays.toString(arr3));
           int[] arr4 = Arrays.copyOf(arr, 7); // 범위가 넘어가는 복사는 초기화값이 들어간다.
           System.out.println("Arrays.toString(arr4) = " + Arrays.toString(arr4));
    
           System.out.println();
           // copyOfRange
           int[] arr5 = Arrays.copyOfRange(arr, 2, 4);
           System.out.println("Arrays.toString(arr5) = " + Arrays.toString(arr5));
           int[] arr6 = Arrays.copyOfRange(arr, 0, 7);// 범위가 넘어가는 복사는 초기화값이 들어간다.
           System.out.println("Arrays.toString(arr6) = " + Arrays.toString(arr6));
       }

3. 정렬

  • sort()

    class Arrays6_3 {
      public static void main(String[] args) {
         int[] arr = {3, 1, 8, 5, 9, 2, 10, 7, 6, 4};
          System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
          System.out.println();
    
          Arrays.sort(arr); // 오름차순으로 정렬됩니다.
          System.out.println("sort");
          System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
      }
    }

0개의 댓글