자바/자바 입문 공부일지

자바 기초 공부 일지 20. 1차원 배열, int [] 배열, 배열의 디폴트 초기화 (수정중)

Tomitom 2022. 10. 28. 17:54
반응형

 

 

배열은 자료의 구조 중 하나로, 동일한 타입의 데이터를 연속적으로 저장하여 하나의 변수 속에 묶어서 관리하는 자료 구조 입니다. 파이썬의 리스트라고 생각하시면 좋을 것 같아요. 

 

배열의 자료는 기본 자료를 토대로 만드는 참조 자료입니다. 

 

int [ ] ref = new int [5];

 

길이가 5개 짜리의 배열을 int 자료형으로 참조한다는 뜻이에요. 

int [ ] -> int 형으로 이루어진 배열을 참조한다는 의미입니다. int 형 배열은 그 자체가 객체 입니다. 

배열을 만들 때에는 칸수를 정해서 만들기 때문에 최초 선언한 값으로 고정됩니다. 

예제를 보면 보다 더 쉽게 알 수 있습니다. 

 

int [ ] ref = new int [5];

 

ref[0] = 7;   // 값의 저장 : 첫 번째 요소

ref[1] = 8;   // 값의 저장 : 두 번째 요소 

ref[2] = 9;   // 값의 저장 : 세 번째 요소 

ref[3] = 10;   // 값의 저장 : 네 번째 요소

ref[4] = 11;   // 값의 저장 다섯 번째 요소 

 

int num = ref[0] + ref[1] + ref[2] + ref[3] + ref[4] ; // 값의 참조

 

참조변수 int[ ] ref에 길이가 length가 5인 배열 인스턴스를 새롭게 생성합니다. 

int [ ] ref = 

7 8 9 10 11

 

각 값에 할당되는 공간, 배열에 인스턴스를 저장하는 것을 Box 인스턴스라고 합니다. 

하단의 예시로 어떻게 사용되는지 확인해볼게요. 

 

	
		int[] ref1 = new int [3];
		
		double[] ref2;
		ref2 = new double[5];
		
		System.out.println(ref1.length);
		System.out.println(ref2.length);


int[] ref1 = new int [3];

 

int[] ref1 배열 객체는 int 3개의 배열을 받는 값을 받습니다.  

이것은 선언과 동시에 배열 대상의 참조변수 값을 초기화를 한 것입니다. 

 

double[] ref2;
ref2 = new double[5];

 

ref2 객체는 double 5개의 배열을 받는 값을 받습니다.

우선 double 의 배열은 ref2 라는 선언을 하고 

그 뒤에 ref2 가 몇 개의 배열을 받는지 배열 대상의 참조변수 값을 초기화를 했습니다. 

System.out.println(ref1.length);
System.out.println(ref2.length);

 

각 배열의 길이를  출력합니다. 

 

 

배열은 그 자체로 객체에 해당하기 때문에 참조 값으로 저장이 될 수 있습니다. 

 

public static void main(String[] args) {

   int[] ar = {1, 2, 3, 4, 5, 6, 7};   // 배열 ar 의 초기화 

   int sum = sumOfAry(ar);    // int 인수 sum 에게 배열의 참조 값 전달

   ....

}

 

static int sumOfAry(int[] ar) {    // 배열 ar을 sumOfAry 에서 참조 

   int sum = 0;

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

      sum += ar[i];

   return sum;

}

 

static int[] makeNewIntAry(int len) {

   int[] ar = new int[len];

   return ar;

}

 

이렇게 배열의 참조 값을 반환하는 것도 가능합니다. 

이번에는 문자열의 배열을 반환해볼게요. 

		String[] words = new String[3];
		words[0] = "아메리카노";
		words[1] = "카페라떼";
		words[2] = "자몽에이드";
		
		System.out.println("1번째 요소는 : " + words[0]);

String[] words = new String[3]; 은 세 개의 배열을 가지고 제로 베이스로 시작하기 때문에 

0, 1, 2 가 각 배열의 메모리 값이 됩니다. 

 

이렇게 하나하나씩 지정해주면 코드가 길어지고 시간이 많이 들기 때문에 오류가 발생할 수도 있으므로 

반복문을 활용해서 한 번에 배열에 넣어주는 것을 해볼게요. 

아래의 예제를 참고해주세요. 

		String[] words = new String[3];
		words[0] = "아메리카노";
		words[1] = "카페라떼";
		words[2] = "자몽에이드";		
		
		for(int i = 0; i < words.length; i++) {
			System.out.printf("%d번째 요소는 : %s\n", i+1, words[i]);

 

 

for 반복문으로 i에는 초기값을 0 으로 주고, i가 words에 주어진 배열의 길이만큼(주어진 객체의 메모리 수만큼이겠죠. 우리가 각각의 메모리칸에 값을 넣어주어야 하니까요.) 1씩 커지며 반복하도록 반복문을 작성합니다. 

그럼 배열의 길이만큼 반복되며 각 f 열의 자리에 알맞은 값이 들어가겠죠. 

 

길이 정보를 반환하는 length 에 대해서 간단하게 짚고 가자면 

System.out.println(words.length);  와 

System.out.println(words[3].length(); <- 라고 하는 메소드가 있습니다. 

 

System.out.println(words.length);  의 경우에는 word에 있는 배열의 길이를 반환하여 주는 것이고 

System.out.println(words[3].length(); 의 경우에는 word 의 3행 속에 있는 자료의 길이를 반환해주는 것입니다.

이것은 이후에 2차원 배열의 자료 조회에서 사용됩니다. 

 

 

하단의 예제는 배열의 디폴트 초기화에 대한 예제입니다. 

package day15;

public class Board {

	public static void main(String[] args) {
	
		int[] ref = makeArray();
		System.out.println(ref.length);
		showArray(ref);
		
		}
	
	public static void showArray(int[] arr) {
		for(int i = 0; i < arr.length; i++) {
			System.out.printf("%d", arr[i]);
		}
	}
	
	public static int[] makeArray() {
		int[] ref = new int[5];
		return ref;
	}

}

 

 

 

반응형