티스토리 뷰

Java

자바의 1차원 배열

Alledy 2019. 4. 25. 17:03

배열(Array)

  • 배열이란: 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것.
  • 배열의 생성

    // 타입 [] 변수이름 = new 타입[길이];
    int[] score = new int[5]; // 5개의 int값을 저장할 수 있는 배열 생성
    

    자바스크립트와 다르게 길이를 먼저 정해서 생성한다. 배열은 한번 생성하면 길이를 변경할 수 없다. int 배열을 만들면 각 요소는 int의 default값인 0으로 초기화된다. (eg. score[4] == 0)

    score이라는 (참조)변수는 각 배열의 값을 저장하고 읽어올 수 있는 주소값을 가진다.


  • 배열 초기화

    int[] score = new int[]{ 50, 60, 70, 80, 90 } // 이때 배열의 길이는 필요x
    int[] score = { 50, 60, 70, 80, 90 } // new int[] 생략 가능
    

    for문으로 넣어도 되지만 넣고자 하는 값에 일정한 규칙이 없어 for문을 사용할 수 없는 경우 위처럼 간단히 초기화 가능하다.

     

  • 배열의 출력

    import java.util.*;
    
    int[] arr = { 1, 2, 3, 4, 5 }; // 스퀘어브라켓 아닌 컬리브라켓
    System.out.println(Arrays.toString(arr));
    

    for문으로 출력할 수도 있지만, 위처럼 더 간단하게 Arrays.toString 메소드를 사용해서 출력할 수 있다.

    만약 arr 자체를 출력한다면 타입@내부주소값이 출력된다. (eg. I@15db9742) 그러나 char 배열의 경우에는 예외적으로 그 자체를 출력해도 배열의 요소가 출력된다.

    char[] ch = {'A','B','C'}';
    System.out.println(ch); // print ABC    
    

 

  • enhanced for(for each)

    for(변수선언 : 배열) {} // 배열의 타입과 같은 변수타입 선언
    
    int[] nums = {1,2,3,4,5}
    int sum = 0;
    for(int data : nums) {
        System.out.print(data); // print 12345
        sum += data;
    }
    System.out.print(sum); // print 15 
    

    자바스크립트의 forEachfor of구문과 같다.

 

  • 배열의 복사

    배열의 길이를 더 길게 하고 싶다면? 배열의 길이는 변경 불가하므로 더 큰 배열을 생성하려면 기존의 배열을 복사하여 큰 배열에 넣어줘야 한다.

     

    • for문으로 복사하기
    int[] arr = new int[5];
    ...
    int[] tmp = new int[arr.length *2];
    for(int i = 0; i < arr.length ; i++) {
        tmp[i] = arr[i];
    }
    arr = tmp; // 참조변수 arr이 새로운 배열을 가리키게 한다.
    

    결국 참조변수 arr과 tmp는 같은 배열을 가리키게 된다. 즉 배열 arr과 tmp는 이름만 다르고 같은 배열이다. 그리고 전에 arr이 가리키던 배열은 더 이상 사용할 수 없게 된다. 왜냐하면 자신을 가리키는 참조변수가 없는 배열은 사용할 수 없기 때문이다. 더 이상 쓸모없게 된 배열은 JVM의 가비지컬렉터에 의해 자동적으로 메모리에서 삭제된다.

     

    • System.arraycopy()로 복사하기
    System.arraycopy(arr, 0, tmp, 0, arr.length); // arr[0]에서 tmp[0]으로 arr.length개의 데이터 복사
    

    위 코드에서 숫자부분은 복사를 시작할 인덱스를 나타낸다.

'Java' 카테고리의 다른 글

객체지향언어, 메서드, 생성자  (0) 2019.04.29
자바의 2차원 배열  (0) 2019.04.26
자바의 입출력  (0) 2019.04.24
조건문  (0) 2019.04.24
자바의 특징, 변수 등  (0) 2019.04.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함