5. 배열

한승록·2023년 4월 11일
0

자바 기초

목록 보기
9/21
post-thumbnail

1) 배열의 기본 특성

'배열'은 하나의 '자료형' 으로 취급하며 String과 같이 'Reference Type'에 속합니다.
'배열'의 사용은 같은 자료형의 여러 데이터를 묶어서 연속된 메모리 공간에서 관리하는 형식으로 활용됩니다.

또한 '배열''Reference Type'(참조형 타입) 이므로 직접 출력하면 출력이 불가능 합니다.
		// 배열은 Reference Type이다
		
		int[] arr1 = { 4, 8, 2, 7, 6 };
		int[] arr2 = new int[5];
		
		// 그렇기 때문에 직접 출력하면 정상적으로 나타나지 않는다
		System.out.println(arr1);
		
		System.out.print("arr1 : ");
		for (int i = 0; i < arr1.length; i++) {
			System.out.print(arr1[i] + " ");
		}
		System.out.println();

<※ 결과는 다음과 같습니다.>




2) 배열의 선언 및 객체 생성

'배열의 선언''자료형[] 변수명' 혹은 '자료형 변수명[]' 두 가지의 형태로 가능합니다.
'배열의 객체 생성'크기를 정하거나 요소를 삽입하는 방법 둘 중 하나를 택할 수 있습니다.
	int[] arr; 					// 배열 선언 1 번째 방법
    int arr[];					// 배열 선언 2 번째 방법
    
    
    arr = new int[3];				// 1.객체 생성(크기를 기입)
    arr = new int { 1, 2, 3 };		// 2.객체 생성(요소를 삽입)
    arr = new int[3] { 1, 2, 3 };	// 불가능한 객체생성 방식




3) index와 배열의 길이(length)

'배열'에 저장된 데이터를 모두 출력하기 위해서는 'index'를 활용하여 'for 문'을 통해 출력하게 됩니다.

또한 '배열의 크기'를 이용하여 '배열'을 반복문 안에서 통제할 수 있습니다.
배열이 반복문 등으로 제어가 가능한 이유는 'index(인덱스)'와 'value(값)'을 1 : 1로 대응하여 '맵핑'되어 저장되기 때문입니다.
		// index (목차, 순번)	
        System.out.println("배열에 데이터 저장했을 경우 >>> ");
		int[] arr = { 1, 2, 3, 4, 5 };
		//			  0  1  2  3  4 => 'index'
		
		for(int i = 0; i < arr.length; i++) {	// arr.length는 배열의 길이
			System.out.println(arr[i]);
		}
        
        // 변수를 각각 선언하여 데이터 저장
        int n1 = 1, n2 = 2, n3 = 3, n4 = 4, n5 = 5;
		
		System.out.println("개별 변수를 선언하여 각각 데이터 저장했을 경우 >>> ");
		System.out.println("n1 = " + n1);
		System.out.println("n2 = " + n2);
		System.out.println("n3 = " + n3);
		System.out.println("n4 = " + n4);
		System.out.println("n5 = " + n5);
		System.out.println();

<※ 결과는 다음과 같습니다.>

보시다시피 결과 값은 같은데 코드는 간결해지고 유지보수가 쉬워지는 효과가 발생하게 됩니다. 그렇기 때문에 모든 값에 변수를 각각 선언하여 값을 저장하고 출력하는 행위보다 효율적입니다.





4) 동일한 자료형의 저장

앞선 '배열의 선언' 에서 선언 시 '자료형'을 지정하기 때문에 해당 자료형의 데이터만 저장이 가능합니다.
따라서 다른 자료형을 저장하고 싶다면 '형변환'이 이루어져야 합니다.
		int length = 5;
		String name;	// 문자열로 이름을 입력받기위한 변수 선언
		String sAge;	// 문자열로 나이를 입력받기위한 변수 선언
        
		String[] names = new String[length];	// 문자열 배열 선언
		int[] ages = new int[length];			// 정수형 배열 선언
		Scanner sc = new Scanner(System.in);
		
		for(int i = 0; i < names.length; i++) {
			System.out.print("이름 입력 : ");
			name = sc.nextLine();				// 이름을 문자열로 입력받음
			names[i] = name;					// 문자열 배열에 이름을 저장
			
			System.out.print("나이 입력 : ");
			sAge = sc.nextLine();				// 나이를 문자열로 입력받음
			ages[i] = Integer.parseInt(sAge);	// 정수형 배열에 나이를 형변환하여 저장
		}
		System.out.println();
		
		for(int i = 0; i < ages.length; i++) {
        	// 문자열 서식문자와 정수형 서식문자로 출력
			System.out.printf("%s는 %d살입니다\n", names[i], ages[i]);
		}
		System.out.println("끝");
		
		sc.close();

<※ 결과는 다음과 같습니다.>




5) 배열의 초기화

'배열의 초기화' 를 하지 않는다면 각각의 '자료형'에 맞는 0 또는 null값으로 초기화 됩니다.
만약 배열의 요소'null' 이라면 연산을 수행할 수 없습니다.
		// 배열의 원소는 초기화하지 않으면 자료형에 맞는 0값으로 초기화 된다
        
        int[] arr1 = new int[5];
		System.out.println("정수형 arr1 : " + Arrays.toString(arr1));
        
		boolean[] arr2 = new boolean[5];
		System.out.println("arr2 : " + Arrays.toString(arr2));
		
		double[] arr3 = new double[5];
		System.out.println("arr3 : " + Arrays.toString(arr3));
		
		String[] arr4 = new String[4];
		System.out.println("arr4 : " + Arrays.toString(arr4));
        
		arr5[0] = "짱구";
		arr5[1] = "유리";
		arr5[2] = "수지";
		
		System.out.println("arr5 : " + Arrays.toString(arr5));
        
        // 만약, 배열의 원소가 null이라면 연산을 수행할 수 없다
		// NullPointerException
        
        for (int i = 0; i < arr5.length; i++) {
			System.out.printf("%s, %d\n", arr5[i], arr5[i].length());
		}

<※ 결과는 다음과 같습니다.>

profile
개발 학습

0개의 댓글