[Java] array(배열)

Date:     Updated:

카테고리:

태그:

java.png

array(배열)이란?

  • 동일한 자료형의 묶음(연속된 메모리 공간에 값을 저장하고 사용하기 위한 용도)이다
  • 배열은 heap 영역에 new 연산자를 이용하여 할당한다
  • 배열 사용이유
  • 만약 배열을 사용하지 않는다면 변수를 여러개 사용해야 한다
    1. 연속된 메모리 공간으로 관리할 수 없다(모든 변수의 이름을 사용자가 관리해야한다)
    2. 반복문을 이용한 연속 처리가 불가능 하다
package section01.array;

public class Application1 {
    public static void main(String[] args) {
        
        int num = 10;
        int num1 = 20;
        int num2 = 30;
        int num3 = 40;
        int num4 = 50;

        int sum = 0;

        sum += num;
        sum += num1;
        sum += num2;
        sum += num3;
        sum += num4;

        System.out.println("sum = " + sum);

        /* 배열의 선언 및 할당 */
        int[] arr = new int[5];

        /* 하나의 이름으로 관리되는 연속된 메모리 공간이고, 공간마다 찾아갈 수 있는 번호(인덱스)를 이용해 접근한다. */
        arr[0] = 10;
        arr[1] = 20;
        arr[2] = 30;
        arr[3] = 40;
        arr[4] = 50;

        /* 값을 대입할 떄도 반복문으로 사용할 수 있다. */
        for(int i = 0,value = 0; i < arr.length; i++ ) {

            arr[i] = value += 10;
        }

        /* 배열의 값을 누적해서 담을 변수 선언 */
        int sum2 = 0;

        /* 일반적인 변수처럼 사용할 수 있다. */


        sum2 += arr[0];
        sum2 += arr[1];
        sum2 += arr[2];
        sum2 += arr[3];
        sum2 += arr[4];

        System.out.println("sum2 = " + sum2);

        int sum3 = 0;

        for(int i = 0; i < arr.length; i++ ){
            sum3 += arr[i];
        }

        System.out.println("sum3 = " + sum3);



    }

}
  • 출력값
sum = 150
sum2 = 150
sum3 = 150

배열의 사용방법을 익혀 배열을 사용할 수 있다 -배열의 사용방법

  1. 배열의 선언
  2. 배역의 할당
  3. 배열의 인덱스 공간에 값 대입

배열의 선언

  • 자료형[] 변수명;
  • 자료형 변수명[];
package section01.array;

import java.util.Scanner;

public class Application2 {

    public static void main(String[] args) {
        
        /*선언은 stack에 배열의 주소를 보관할 수 있는 공간을 만드는 것이다.*/
        int[] iarr;
        char carr[];

        /*
        * 선언한 레퍼런스 변수에 배열을 할당하고 대입할 수 있다
        * new 연산자는 heap영엽에 공간을 할당하고 발생한 주소값을 반환하는 연산자이다.
        * 발생한 주소를 래퍼런스 변수(참조형 변수)에 저장하고 이것을 참조하고 사용하고 있기 때문에 참조자료형에라고 한다.
        * */


        /*
        * 배열을 할당 시에는 반드시 배열의 크기를 지정해주어야 한다.
        * */
       //iarr = new int[]; // 크기를 지정해주지 않아서 에러발생
        iarr = new int[5];
        carr = new char[10];

        /*위의 선언이랑 할당을 동시에 할 수 도 있다.*/
        int[] arr2 = new int[5];

         /*위의 선언이랑 할당을 동시에 할 수 도 있다.*/

        int[] arr = new int[5];
        char carr2[] = new char[10];

        /* heap 메모리는 이름으로 접근하는게 아니라 주소로 접근하는 영역이다.
        * stack에 저장된 주소로 heap에 할당된 배열을 찾아갈 수 있다.
        * */

        System.out.println("iarr = " + arr2);  //16진수 주소값
        System.out.println("carr = " + carr2);  //16진수 주소값


        /*
        * hashcode() : 일반적으로 객체의 주소값을 10진수로 변환하여 생선된 객체의 고유한 정수값을 반환한다
        * 동일객체인지 비교할 때 사용할 목적으로 쓰이며 동등 객체를 동일 객체 취급하기 위해 오버라이딩해서 사용한다.
        * */

        System.out.println("arr2 = " + arr.hashCode());
        System.out.println("carr2.hastCode() = " + carr2.hashCode());

        System.out.println("arr2의 길이 : " + arr2.length);
        System.out.println("carr의 길이 : " + carr2.length);

        Scanner sc = new Scanner(System.in);

        System.out.print("새로 할당할 배열의 길이를 입력하세요 : ");
        int size = sc.nextInt();

        double[] darr = new double[size];

        System.out.println("darr의 hashcode : " + darr.hashCode());
        System.out.println("darr의 길이 : " + darr.length);

        darr = new double[30];

        System.out.println("변경 후 darr의 hashcode : " + darr.hashCode());
        System.out.println("변경 후 darr의 길이 : " + darr.length);

        darr = null;

        System.out.println("darr.length = " + darr.length);

    }


}
  • 출력값
iarr = [I@41629346
carr = [C@6d311334
arr2 = 1747585824
carr2.hastCode() = 1831932724
arr2의 길이 : 5
carr의 길이 : 10
새로 할당할 배열의 길이를 입력하세요 : 30
darr의 hashcode : 455896770
darr의 길이 : 30
변경 후 darr의 hashcode : 1323165413
변경 후 darr의 길이 : 30
Exception in thread "main" java.lang.NullPointerException: Cannot read the array length because "darr" is null
	at com.ohgiraffers.section01.array.Application2.main(Application2.java:85)

배열이 초기화 되는 자료형별 기본값을 이해할 수 있다

  • 값의 형태별 기본값
  • 정수 : 0
  • 실수 : 0.0
  • 논리 : false
  • 문자 : \u0000
  • 참조 : null
public class Application3 {

    public static void main(String[] args) {

        int[] iarr = new int[5];

        System.out.println("iarr[0] = " + iarr[0]);
        System.out.println("iarr[1] = " + iarr[1]);
        System.out.println("iarr[2] = " + iarr[2]);
        System.out.println("iarr[3] = " + iarr[3]);
        System.out.println("iarr[4] = " + iarr[4]);

        for (int i = 0; i < iarr.length; i++) {
            System.out.println("iarr[" + i + "]의 값 : " + iarr[i]);
        }

        /* 자바에서 지정한 기본값 외의 값을 초기화하고 싶은 경우 블럭을 이용한다.
         * 블럭을 이용하는 경우에는 new를 사용하지 않아도 되며 값의 갯수만큼 자동으로 크기가 설정된다.
         * */

        int[] iarr2 = {11, 22, 33, 44, 55};
        System.out.println("iarr2.length = " + iarr2.length);

        for (int i = 0; i < iarr2.length; i++) { // 수정된 부분
            System.out.println("iarr2[" + i + "]의 값 : " + iarr2[i]);
        }

        int[] iarr3 = new int[]{11, 22, 33, 44};
        System.out.println("iarr3.length = " + iarr3.length);

        String[] sarr = {"apple", "banana", "grape", "orange"};

        for (int i = 0; i < sarr.length; i++) { // 수정된 부분
            System.out.println("sarr[" + i + "]의 값 : " + sarr[i]);
        }
    }
}

배열을 사용하는 예시를 이해하고 적용할 수 있다

  • 5명의 자바 점수를 정수로 입력받아서 합계와 평균을 실수로 구하는 프로그램을 만들어 보자
package section01.array;

import java.util.Scanner;

public class Application4 {

    public static void main(String[] args) {
       
        int[] scores = new int[5];

        Scanner sc = new Scanner(System.in);

        for(int i = 0; i < scores.length; i++){

            System.out.print(( i+1 ) + " 번 째 학생의 자바점수를 입력해주세요 : ");
            //1번째 부터 시작하기위해 i+1을 했다
            scores[i] = sc.nextInt();
        }

        double sum = 0.0;
        double avg = 0.0;

        for(int i = 0; i < scores.length; i++){

            sum += scores[i];

        }

        avg = sum / scores.length;

        System.out.println("sum = " + sum);
        System.out.println("avg = " + avg);



    }
}
  • 출력값
1 번 째 학생의 자바점수를 입력해주세요 : 20
2 번 째 학생의 자바점수를 입력해주세요 : 30
3 번 째 학생의 자바점수를 입력해주세요 : 40
4 번 째 학생의 자바점수를 입력해주세요 : 50
5 번 째 학생의 자바점수를 입력해주세요 : 60
sum = 200.0
avg = 40.0

배열을 사용하는 예시를 이해하고 적용할 수 있다

  • 랜덤한 카드를 한장 뽑아서 출력해보자
package section01.array;

import java.util.Random;

public class Application5 {
    public static void main(String[] args) {
        
        String[] cardNumbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10"};
        String[] shapes = {"JACK", "QUEEN", "KING", "ACE"};
        int randomShapeIndex = (int) (Math.random() * shapes.length);
        int randomCardNumbers = (int) (Math.random() * cardNumbers.length);// 강제 형변환을 사용한 랜덤한 인덱스 생성


        System.out.println("당신이 뽑은 카드는 " + shapes[randomShapeIndex] + " " + cardNumbers[randomCardNumbers] + " 입니다.");
    }

}
  • 출력값
당신이 뽑은 카드는 KING 5 입니다.

요약. 배열은 여러 데이터 요소를 하나로 모아서 저장하는 자료 구조입니다.

점점 재밌어지면서 복잡해지고 있다. 더 분발하자!!

Java 카테고리 내 다른 글 보러가기

댓글 남기기