1. 배열 선언하기 & 레퍼런스

자바의 배열을 선언하는 방법은 두 가지로 나뉜다.

자료형 배열명[] = {값1,값2,값3...}; 형태로 쓴다. i.e. int score[] = {80,70,90,100,60,80,90,70};
자료형 []배열명 = {값1,값2,값3...}; 
형태도 가능하다. int[] score = {80,70,90,100,60,80,90,70};

자바의 배열은 파이썬이나 스위프트와 달리 배열 내에 실제 값이 저장되지 않는다. 데이터가 들어있는 공간의 주소값을 저장(레퍼런스)한다.

위 배열은 단지

int score[0] = 80;
int score[1] = 70;
int score[2] = 90;
int score[3] = 100;
. . . .

이런 변수 여러개를 한 번에 선언하고 그 주소를 묶어놓은 것 뿐이다. 따라서 선언한 후 사용은 그냥 일반 변수 사용하듯이 하면 된다.

따라서, System.out.println(score[0]); 을 하면 score라는 배열이 주소를 저장한 score[0] 변수의 값 80을 출력하지만 System.out.println(socre); 을 하면 [I@7de26db8 같은 메모리 주소(레퍼런스)를 반환한다. 자바에서 @가 포함된 값이 출력된다면 그것은 레퍼런스 값이라는 의미.

public class lecture1 {
	public static void main(String[] args) {
		
		// 공간 10 짜리 임의의 배열을 선언한 후 합 구하기.
		int[] arr = {3,7,2,8,9,12,3,53,12,10};
		int arrSum = 0;
		
		System.out.println(arr[2]);		// int arr[2] = 2; 와 같으므로 2를 출력.
		System.out.println(arr);		// 배열 자체는 값을 저장하지 못하기 때문에 '[I@7de26db8'와 같은 메모리 주소를 출력.
		
		for(int i = 0; i < arr.length; i++) {	//.length로 배열의 길이를 반환.
			arrSum += arr[i];			// 일반 변수 사용하듯 하면 된다.
		}
		
		System.out.println(arrSum);		// 119 출력.

	}

}

따라서 파이썬이나 스위프트에서 사용하던 것처럼 배열 자체를 보고 싶을 때는 다른 방법을 사용해야한다.

 

파이썬이나 스위프트처럼 배열을 모두 출력하기
(배열 인덱스를 이용해 for문을 돌려 프린트 할 수도 있지만 자바 배열의 문제로 인해 이미 내장 함수가 들어있어서 그것을 사용하면 된다.)

import java.util.Arrays;
import java.util.Scanner;

public class lecture1 {
	public static void main(String[] args) {

		// Arrays.toString 사용
		int arr3[] = {34,12,1,6,65,28,10};
		
		System.out.println(Arrays.toString(arr3));
		System.out.println("");
		
		// foreach문 사용. 딕셔너리 사용하듯이 사용한다.
		for (int value:arr3) {		// arr3 배열에 하나씩 접근해!!
			System.out.println(value);	// value를 변수로 로직을 구성한다.
		}
		
	}

}


결과 : 

Arrays.toString을 사용한 출력
[34, 12, 1, 6, 65, 28, 10]

foreach문을 사용한 출력
34
12
1
6
65
28
10

Arrays.toString은 파이썬에서 리스트 출력하듯이 값을 반환한다.

foreach문은 딕셔너리의 값을 하나하나 for을 돌려 뽑아내듯이 반환한다.

 

2. 빈 배열 선언하기

자바 배열의 특징은 다음과 같다.

자바는 배열을 생성할 때 크기를 고정한다.
배열의 크기는 int의 범위를 넘지 못 한다.
배열에는 동일한 타입의 데이터만 들어갈 수 있다.

따라서 빈 배열을 생성할 때는 반드시 메모리에 주소를 할당하기 위해 크기를 정해 초기화를 해야한다. 하드디스크를 사면 그냥 사용할 수 없고 포맷을 해줘야 사용할 수 있는 것과 비슷하다.

 

1 ) 배열 생성과 동시에 크기를 할당해 초기화.

int testArray[] = new int[10]; : 비어있는 공간 10개짜리 배열을 선언하고 초기화한다.

2) 선언만 하고 나중에 초기화. (하드디스크를 사서 달아만 두고 나중에 사용할 때 포맷하는 것과 같다.)

int testArray[]; : 배열을 선언하지만 초기화는 하지 않는다.

testArray = new testArry[10]; testArray라는 배열을 공간 10개를 만들어 초기화한다.

 

import java.util.Arrays;
import java.util.Scanner;

public class lecture1 {
	public static void main(String[] args) {
		
		// 사용자로부터 값 5개를 입력 받아 배열로 만들고 합 구하기.
		Scanner s = new Scanner(System.in);
		
		System.out.println("정수 5개를 입력하겠습니다.");
		
		int[] arr2 = new int[5];		// 공간을 미리 만들어줘야한다.
		int arrSum = 0;
		
		
		for (int i = 0; i < arr2.length; i++) {
			System.out.println((i+1) + "번째 숫자를 입력해주세요.");
			arr2[i] = s.nextInt();
			arrSum += arr2[i];
		}
        System.out.println("");
		System.out.println("입력한 숫자는 다음과 같습니다.");
		System.out.println(Arrays.toString(arr2));
		System.out.println("입력 받은 값 5개의 합은 " + arrSum + "입니다.");
	
	}


결과 : 

정수 5개를 입력하겠습니다.
1번째 숫자를 입력해주세요.
60
2번째 숫자를 입력해주세요.
55
3번째 숫자를 입력해주세요.
89
4번째 숫자를 입력해주세요.
945
5번째 숫자를 입력해주세요.
121

입력한 숫자는 다음과 같습니다.
[60, 55, 89, 945, 121]
입력 받은 값 5개의 합은 1270

 

 

+ Recent posts