배열

Mia Lee·2021년 11월 15일
0

JAVA

목록 보기
34/98
package array_statement;

public class Ex1 {

	public static void main(String[] args) {

		/*
		 * 배열(Array)
		 * 
		 * < 배열 선언 기본 문법 >
		 * 데이터타입[] 변수명;
		 * 데이터타입 변수명[];
		 * => 배열 선언만 했을 경우 데이터 저장 불가!(메모리에 실제 배열 공간이 생성되기 전이므로)
		 * => 배열이 생성된 주소값을 저장하는 변수 선언(힙 영역 주소값을 저장하는 변수)
		 * 
		 * < 배열 생성 기본 문법 >
		 * 변수명 = new 데이터타입[배열크기];
		 * => 메모리(Heap)에 실제 데이터 저장이 가능하도록 공간을 할당 받음
		 * => 생성된 Heap 공간의 메모리 주소값을 해당 변수에 저장
		 *    (앞으로 해당 변수에 저장된 주소값을 참조하여 배열에 접근)
		 * 
		 * < 배열 선언 및 생성을 동시에 수행하는 문법 >
		 * 데이터타입[] 변수명 = new 데이터타입[배열크기];
		 * 
		 * < 배열 접근 기본 문법 >
		 * 변수명[인덱스]
		 * => 해당 변수에 저장된 주소값(배열)에 접근하여 지정한 인덱스 위치의 데이터에 접근
		 * 
		 * < 배열 초기화(저장) 기본 문법 >
		 * 변수명[인덱스] = 데이터; 
		 * 
		 * < 배열 선언, 생성, 초기화를 동시에 수행하는 문법 >
		 * 데이터타입[]  변수명 = {데이터1, 데이터2, .... 데이터n };
		 * => 배열 크기를 지정하지 않아도 데이터 갯수만큼의 배열이 자동으로 생성됨
		 *    (단, 배열 내의 데이터가 모두 준비된 경우에만 가능한 문법)
		 *    
		 * < 배열 크기 조회 >
		 * 배열명.length 속성 사용하여 크기 전달받을 수 있음
		 * => 출력문에 배열명.length 전달 또는 변수에 배열명.length 저장
		 * 
		 */
		
		// 학생 5명의 점수를 저장하는 변수 사용 시
		int score1 = 80, score2 = 60, score3 = 70, score4 = 100, score5 = 10;
		
		// 합계를 구하려면
		int sum = 0;
		sum += score1;
		sum += score2;
		// ... 생략 ...
		sum += score5;
		// => 대량의 데이터를 일반 변수로 관리하기엔 부적합하다!
		//    따라서, 배열을 통해 여러개의 데이터를 하나의 묶음으로 관리!
		
		//int형 정수 3개를 저장하기 위한 배열 변수 arr을 선언
		// 배열 선언 : 데이터타입[] 변수명;
		int[] arr; // int형 정수 저장을 위한 배열 공간의 이름을 arr로 선언
//		arr = 5; // 오류 발생!
		// => 주의! 아직 정수를 저정할 수 있는 메모리 공간 생성 전이므로 배열에 데이터 저장은 불가능!
		
		// 배열 생성 : 변수명 = new 데이터타입[배열크기];
		arr = new int[3];
		// => 실제 데이터 저장이 가능한 메모리 공간 3개가 연속적으로 생성됨
		// => 이 때, 배열이 생성되면 자동으로 배열 내부 공간의 데이터가 기본값으로 초기화 됨!
		
		System.out.println("배열 arr에 저장된 값 : " + arr);
		// => 실제 배열 데이터가 아닌 배열이 위치한 주소값을 출력
		
		// 배열의 각 인덱스에 접근하여 저장된 데이터 출력
		System.out.println("배열 arr의 0번 인덱스 : " + arr[0]);
		System.out.println("배열 arr의 1번 인덱스 : " + arr[1]);
		System.out.println("배열 arr의 2번 인덱스 : " + arr[2]);
		// => 각 타입의 기본값으로 자동 초기화가 이루어짐!
		
//		System.out.println("배열 arr의 3번 인덱스 : " + arr[3]); // 오류 발생!
		// => 0 ~ 2번까지의 인덱스만 존재하므로, 존재하지 않는 인덱스를 접근하려 할 경우
		//    ArrayIndexOutOfBoundsException 예외 발생!
		// => Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
		//    at array_statement.Ex1.main(Ex1.java:66)
		//    => 3이라는 인덱스가 잘못됐다는 메세지이며, 66번 라인이 원인.
		
		// 주의사항!
		int[] a1, b1; // a1과 b1 모두 배열 타입 변수로 선언되지만
		int a2, b2[]; // a2는 기본형 변수, b2만 배열 타입 변수로 선언됨
		a1 = new int[3];
		b1 = new int[3];
//		a2 = new int[3]; // 오류 발생! int 타입 변수에 배열 타입 형변환 불가!
		b2 = new int[3];
		
		// 배열 arr의 0번 인덱스에 정수 10을 저장
		arr[0] = 10;
		
		// 1번 인덱스에 20, 2번 인덱스에 30 저장한 후 출력
		arr[1] = 20;
		arr[2] = 30;
		
		System.out.println("배열 arr의 0번 인덱스 : " + arr[0]);
		System.out.println("배열 arr의 1번 인덱스 : " + arr[1]);
		System.out.println("배열 arr의 2번 인덱스 : " + arr[2]);
		
		arr[2] = 100;
		System.out.println("배열 arr의 2번 인덱스 : " + arr[2]);
		
		System.out.println("===========================================");
		
		// 배열 선언, 생성, 초기화를 한꺼번에 수행
		// => 리터럴을 사용하여 배열을 직접 생성하는 문법 사용
		// 데이터타입[] 변수명 = {값1, 값2, 값3, .... 값n};
		// => n개 만큼의 배열이 자동으로 생성되며 0 ~ n -1 까지 인덱스 부여
		// int형 배열(nums) 5개 생성하면서 1, 2, 3, 4, 5로 초기화
		int[] nums = {1, 2, 3, 4, 5}; // 0 ~ 4번 인덱스까지 자동 부여됨
		
		System.out.println("배열 nums의 0번 인덱스 : " + nums[0]);
		System.out.println("배열 nums의 1번 인덱스 : " + nums[1]);
		System.out.println("배열 nums의 2번 인덱스 : " + nums[2]);
		System.out.println("배열 nums의 3번 인덱스 : " + nums[3]);
		System.out.println("배열 nums의 4번 인덱스 : " + nums[4]);
		
		// 이미 생성된 배열을 버리고 새로 생성된 배열을 변수에 할당하는 경우
//		nums = {10, 20, 30, 40, 50}; // 문법에 맞지 않음!
		nums = new int[] {10, 20, 30, 40, 50, 60};
		// => 주의! int[] 내부에 배열크기를 지정하지 않도록 한다!
		
		System.out.println("배열 nums의 0번 인덱스 : " + nums[0]);
		System.out.println("배열 nums의 1번 인덱스 : " + nums[1]);
		System.out.println("배열 nums의 2번 인덱스 : " + nums[2]);
		System.out.println("배열 nums의 3번 인덱스 : " + nums[3]);
		System.out.println("배열 nums의 4번 인덱스 : " + nums[4]);
		
		// 학생 3명의 이름을 배열로 갖는 names 배열 생성
		// => "홍길동", "이순신", "강감찬"으로 초기화
//		String[] names = new String[3];
		String[] names = {"홍길동", "이순신", "강감찬"};
		System.out.println("배열 names의 0번 인덱스 : " + names[0]);
		System.out.println("배열 names의 1번 인덱스 : " + names[1]);
		System.out.println("배열 names의 2번 인덱스 : " + names[2]);
		
		System.out.println("=====================================");
		
		// 인덱스 번호를 변수로 활용하여 배열 내의 모든 데이터에 접근
		int index = 0;
		System.out.println("배열 names의 0번 인덱스 : " + names[index]);
		index++;
		System.out.println("배열 names의 1번 인덱스 : " + names[index]);
		index++;
		System.out.println("배열 names의 2번 인덱스 : " + names[index]);
		
		// 반복문을 사용하여 배열 내의 모든 데이터에 접근
		// names 배열의 모든 이름 출력
		for (int i = 0; i < 3; i++) {
//			System.out.println(names[i]);
			System.out.println("배열 names의 " + i + "번 인덱스 : " + names[i]);	
			
		}
		
		for (int i = 0; i < 6; i++) {
			System.out.println("배열 nums의 " + i + "번 인덱스 : " + nums[i]);
			
		}
		
		System.out.println("======================================");
		
		// 각 배열의 크기 : 배열명.length 속성 사용
		System.out.println("배열 names의 크기(길이) : " + names.length);
		System.out.println("배열 nums의 크기(길이) : " + nums.length);
		
		// 반복문을 사용하여 배열 내의 모든 데이터에 접근
		// => 단, 조건식에 배열 크기를 직접 지정하지 않고
		//    배열명.length 속성을 사용하여 동적으로 변경될 수 있도록 지정
		// 1) names 배열의 모든 이름 출력
		for (int i = 0; i < names.length; i++) {
			System.out.println("배열 names의 " + i + "번 인덱스 : " + names[i]);
			
		}
		
		// 2) nums 배열의 모든 정수 출력
		for (int i = 0; i < nums.length; i++) {
			System.out.println("배열 nums의 " + i + "번 인덱스 : " + nums[i]);
			
		}
		
	}

}











0개의 댓글