티스토리 뷰

개발

[Java] 배열

호호홍얍얍 2022. 5. 14. 20:02

배열이란

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
  • 배열의 참조변수는 주소값을 저장하며, 실제 값을 저장하는 것은 아니다.
  • 배열의 선언 및 생성은: 타입[] 변수이름 = new 타입[길이] 와 같이 한다.

 

배열의 생성과정

  • int [] score
    • in형 배열 참조변수 score를 선언한다. 아직 데이터를 저장할 수 있는 공간은 마련되지 않았다.
  • score = new int[5]
    • 연산자 new에 의해서 메모리의 빈 공간에 5개의 int형 데이터를 저장할 수 있는 공간이 마련된다. 
    • 각 배열요소는 자동적으로 int의 기본값인 0으로 초기화된다. (String은 참조형 변수이므로, null값이 기본으로 초기화된다)
    • 대입 연산자 '='에 의해 배열의 주소가 int형 참조변수 score에 저장된다.

 

배열의 인덱스와 길이

  • 인덱스: 배열의 요소마다 붙여진 일련번호: 0~'배열길이-1'까지
  • 배열의 길이는 JVM이 별도로 관리한다.
  • 배열이름.length로 길이를 구할 수 있다.
  • 배열의 길이는 한 번 생성되면 변경할 수 없다. 따라서 배열이름.length는 상수다. - 배열의 길이를 변경하려면, 더 큰 배열을 생성하고 새로운 배열에 복사해야 한다.

 

배열의 초기화

  • int[] score = new int[] {50, 60, 70}; or int[] score = {50, 60, 70};

 

배열의 출력

  • 반복문으로 인덱스를 활용하여 출력할 수 있다.
  • Arrays.toString(배열이름) 메서드를 사용하면, [첫 번째 요소], [두 번째 요소] 와 같이 반환한다. - import java.util.*
  • 만약 배열 이름으로 바로 출력한다면, '타입@주소' 형식으로 출력된다. 이때 주소는 실제 주소가 아닌 내부 주소이다.
  • 예외적으로, char배열은 출력 시 각 요소를 그대로 출력한다.

 

배열의 복사

  • 배열 복사 시, 배열의 길이를 넉넉하게, 기존의 2배 정도 길이로 생성하는 것이 좋다.
  • 배열 복사 방법1. for문의 활용. 기존 값을 새 배열에 넣은 뒤, 기존 참조변수가 새로운 배열을 가리키게 한다.
    • 자신을 가리키는 참조변수가 없는 기존 배열은 더이상 사용할 수 없다. 이런 배열은 JVM의 가비지 컬렉터에 의해 자동적으로 메모리에서 제거된다.
  • 배열 복사 방법2. System.arraycopy() 활용. arraycopy()는 지정된 범위의 값을 한 번에 통째로 복사한다. 각 요소들이 연속적으로 저장되어 있다는 배열의 특성 때문에 가능한 것.
    • System.arraycopy(기존 배열명, 첫 번째 요소, 새 배열명, 복사될 첫 번째 위치, 복사할 길이)
    • System.arraycopy(num, 0, newNum, 0, num.length);

 

 

예제

카드 섞기

  • 중복된 값이 없는 배열을 먼저 생성하고, Math.random()으로 랜덤한 값(0~9 인덱스)을 생성하여 값을 바꿔준다.
  • 중복된 값이 없는 배열에서 값들의 위치만 바꾸는 것이므로 중복된 값이 나올 수 없다.
public class ch5_ArrayEx7 {
    public static void main(String[] args){
        int[] numArr = new int[10];

        for(int i=0; i<numArr.length;i++){
            numArr[i] = i;
            System.out.print(numArr[i]);
        }

        for(int i=0; i<numArr.length; i++){
            int n = (int)(Math.random() *10);
            int tmp = numArr[i];
            numArr[i] = numArr[n];
            numArr[n] = tmp;
        }

        for(int i:numArr){
            System.out.print(i);
        }
    }
}

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함