본문 바로가기

언어/Java

배열

※ 배열(Array)

    동일 자료형의 데이터 묶음, Java에서의 배열은 무조건 다른 메모리를 참조하는 구조, 참조형,

    대표 자료구조의 한 형태, 생성 시 각 인덱스가 초기화된다

 

  - 배열 선언 방법

    : int[ ] arr; // int 배열타입의 arr 변수 선언
      int arr[];

     → 선언 후 생성을 해야 사용 가능!

 

  - 배열 생성
    : arr = new int[3]; // 배열 생성, 생성 시 각 방이 0값으로 자동 초기화
       여기서 new는 예약어이다.

        =는  연산자이며 대입을 한다.

       (arr이 3개짜리 방 갖는 구조가 아니라, 4byte의 메모리만 가지고있음.

       1000번지에 대한 정보값만 가지고 있음, 참조만 함)
       직접 값을 가지는게 아니라 자동 인덱스가 제공되는 참조형이다.

 

  - 읽는 법

    : int[] arr = new int[3]; // int배열타입의 arr이 선언되었음, arr 변수의 인덱스 크기는 3이다.

각 방은 인덱스라고 부르며 int[] arr은 int 타입의 0 값으로 자동 초기화, 참조형이기 때문에 메모리그림 표처럼 그리면 X

· 배열을 사용하게 되면 계산법이 단순해짐

    int score1 = 10;
    int score2 = 8;
    int score3 = 4;
    int totalScore = score1 + score2 + score3;

    위의 계산을 아래 배열로 변경 가능하다.

    int [] scoreArr = new int[3];
    scoreArr[0] = 10;
    scoreArr[1] = 8;
    scoreArr[2] = 4;
    totalScore = 0;
    for(int i = 0; i<3; i++){
        totalScore += scoreArr[i];
    }

※ float[] fArr = new float[2]; // 0.0값으로 자동 초기화
    boolean[] bArr = new boolean[2]; // false값으로 자동 초기화
    char[] cArr = new char[2]; // 유니코드의 null값(0x00)으로 자동 초기화 
    String[] sArr = new String[2]; // java의 예약어 null값으로 자동 초기화

    자바에서의 참조자료형은 직접 값을 갖는 자료형태가 X
    다른 메모리를 참조하는 구조
    참조형에는 null값 가능, null = 아무 값도 참조 하지않고있다는 뜻

 

※ 배열 길이 얻기 : length 필드 사용

    int [] scoreArr = new int[3]; 일 때
    sop(scoreArr.length); // 3, 배열의 인덱스 갯수만 반환
    sop(scoreArr[-1]); // 실행 시 ArrayIndexOutOfBoundsException 발생
    sop(scoreArr[3]); // 실행 시 ArrayIndexOutOfBoundsException 발생

    배열용 전용 클래스의 미리 설정되어 있는 멤버변수가 있는데, length는 그 중의 하나이며 배열의 필드이다.

    필드기 때문에 length();가 아니다.

※ 배열 초기화
    int [] scoreArr = new int[3]; int []arr2 = {1,2,5,7}; // 배열 선언, 배열 생성
    int [] scoreArr = new int[3]; sop(arr2.length); // 4
    int [] scoreArr = new int[3]; arr2[0] = 9; //이렇게 대입하면 값 변경 가능
    int [] scoreArr = new int[3]; arr2 = {10,20} // (X) 이렇게 초기화는 불가능
    int [] scoreArr = new int[3]; arr2 = new int[]{10,20};// 재초기화, 배열을 재초기화하려면 다시 한번 이렇게 써야함

 

※ 2차원 배열 //4차원 배열은 잘 사용 안함
    int [][] arrTwo = new int[3][2];
    arrTwo[0][0] = 1;
    arrTwo[0][1] = 2;
    arrTwo[1][0] = 3;
    arrTwo[1][1] = 4;
    arrTwo[2][0] = 5;
    arrTwo[2][1] = 6;
    sop(arrTwo.length); // 3
    sop(arrTwo[0].length); // 2

※ 2차원 배열 초기화
    int [][]arr3 = {{1}, {2,3}, {4,5,6}};
    sop(arr3.length); //3
    sop(arr3[0].length); //1
    sop(arr3[1].length); //2

 

※ 배열은 참조형이라 정보값이 출력된다

    sop(arr); 을 하면 정보값(10000번지 정보값)이 출력됨
    그래서 배열의 내용을 확인하려면 행, 열 배열을 돌면서 확인해야함
    sop(arr[행][열]);
    배열 초기화는 선언, 생성, 대입을 한꺼번에 하는 것
    재초기화는 꼭 new int[] {10,20} 이런 식으로 해야한다.

    int [][]arr3 = { {1}, {2,3}, {4,5,6}}
    위 아래 같은 말
    int [][]arr3 = new int[3][];
    arr3[0] = new int[1];
    arr3[1] = new int[2];
    arr3[2] = new int[3];

'언어 > Java' 카테고리의 다른 글

배열 예제  (0) 2023.07.26
이클립스 class 생성법  (0) 2023.07.26
반복문 4(do while)  (0) 2023.07.25
반복문 3  (0) 2023.07.25
반복문 2  (0) 2023.07.25