배열(Array)

웃음인·2025년 4월 10일

Java

목록 보기
12/37
post-thumbnail

JVM 메모리 구조


배열(Array)

같은 자료형의 변수를 하나의 묶음으로 다루는 것
배열은 저장된 값마다 인덱스 번호가 0부터 시작하여 설정

✔️   배열의 특징

  1. 한 가지 자료형만 가능하다.
  2. 여러 값을 저장할 수 있다.
  3. 한 번 크기를 지정하면 변경 불가능하다.

✔️   배열 선언

   자료형 [ ] 배열명;
   자료형    배열명[ ];

✔️   배열 할당

   자료형 [ ] 배열명 = new 자료형[배열크기];
   자료형 배열명[ ] = new 자료형[배열크기];

// ex

int[] arr = new int[3];
int arr[] = new int[3];

배열 저장구조

배열은 참조 변수로 Heap영역에 할당되며 배열 공간의 주소를 저장
배열 공간의 주소를 이용해 인덱스를 참조하는 방식으로 값 처리


배열 초기화

✔️   인덱스를 이용한 초기화

// ex

arr[0] = 1;
arr[1] = 2;

✔️   for문을 이용한 초기화

// ex

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

✔️   선언과 동시에 초기화

// ex

int[] arr = {1, 2, 3, 4, 5};
int[] arr = new int[] {1, 2, 3, 4, 5};
String fruit[] = {"사과", "포도", "참외"};

*  index가 순차적으로 증가함에 따라 초기화할 리터럴 값이
  규칙적
이라면 반복문을 통해 배열 초기화 가능


배열 복사

✔️   얕은 복사

객체의 주소 값만 가져와 참조형 변수에 저장하고
하나의 객체를 두 변수가 참조하는 것

int[] arr1 = new int[4];
int[] arr2 = arr1;

✔️   깊은 복사

새로운 배열 객체를 생성하여 기존 배열의 데이터를 복사하는 것

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

System.arraycopy(arr1, 0, arr2, 0, arr1.length);

arr2 = Arrays.copyOf(arr1, arr1.length);
arr2 = arr1.clone();



배열 예제

public void ex1() {
		
		// 변수 vs 배열
		
		// 변수 선언
		int num; 
		// stack 영역에 int 자료형을 저장할 수 있는 공간 4byte를 할당하고
		// 그 공간에 num이라는 이름을 부여.
		
		// 변수 대입
		num = 10;
		// 생성된 num이라는 변수공간에 10 이라는 값을 대입
		
		// 변수 사용
		System.out.println("num에 저장된 값 : " + num);
		// num이 작성된 자리에 num에 저장된 값을 읽어와서 출력
		
		
		// ---------------------------------------------------------
		
		// 배열 선언
		int[] arr; // int arr[];
		// Stack 영역에 int[] 자료형 공간을 4byte 할당하고
		// 그 공간에 arr 이라는 이름을 부여
		// ** 해당 변수는 참조형으로 주소값만을 저장할 수 있다. **
		
		// 배열 할당
		arr = new int[3];
		
		// new : "new 연산자"라고 하며
		//		Heap 메모리 영역에 새로운 공간(배열, 객체)을 할당
		
		// int[3] : int 자료형 변수 3개를 하나의 묶음으로 나타내는 배열
		
		// new int[3] : heap 영역에 int 3칸짜리 int[]을 생성(할당)
		
		// arr = new int[3];
		// int[]    int[]   -> 같은자료형 == 연산 가능
	
		
		System.out.println("arr : " + arr); // [I@68fb2c38
		
		// Heap 영역에 생성된 공간은 절대 비어있을 수 없다
		// -> JVM 기본값이 들어가져있다
		// boolean : false
		// 나머지 : 0
		// 참조형 : null
		System.out.println( arr[0] ); // 0
		System.out.println( arr[1] ); // 0
		System.out.println( arr[2] ); // 0
		
		// 배열 요소 값 대입
		arr[0] = 10;
		arr[1] = 50;
		arr[2] = 1000;
		
		System.out.println( arr[0] ); // 10
		System.out.println( arr[1] ); // 50
		System.out.println( arr[2] ); // 1000
		
		
		// [10, 50, 1000] 실제로 arr 배열이 가진 모든 요소의 값을 알고싶다면..
		System.out.println( Arrays.toString(arr) );
		
		
		
	}
public void ex2() {
		
		// 입력받은 값과 일치하는 값이 있으면 인덱스 번호 출력
		// 없으면 "존재하지 않음" 출력
		
		String[] arr = {"사과", "딸기", "바나나", "키위", "멜론", "아보카도"};
		
		/*
		 * 과일 입력 : 아보카도
		 * 5번 인덱스에 존재
		 * 
		 * 과일 입력 : 수박
		 * 존재하지 않음
		 * 
		 * 
		 * */
		
		Scanner sc = new Scanner(System.in);
		System.out.print("과일 입력 : ");
		String input = sc.next();
		
		boolean flag = false;
		
		for(int i = 0; i < arr.length; i++) {
			
			if( arr[i].equals(input) ) { // String 비교시 equals() 사용
				System.out.println(i + "번째 인덱스에 존재");
				flag = true;
			}
			
		}
		
		if( !flag ) {
			System.out.println("존재하지 않음");
		}
		
		
		
	}
public void ex3() {
		// 1. 문자열을 입력받아 한 글자씩 잘라내어 char 배열에 순서대로 저장
		// 2. 문자 하나를 입력받아 일치하는 문자가 char 배열에 몇개 존재하지는 확인
		// 3. 단, 일치하는 문자 없을경우 "존재하지 않습니다" 출력
		/*
		 * ex) 
		 * 
		 *  문자열 입력 : hello
			[h, e, l, l, o]
			검색할 문자 입력 : l
			2개 있음 / 존재하지 않습니다
		 * 
		 * 
		 * */
		
		// [사용해야하는 기술, 기능]
		// 1) 배열 검색
		// 2) String.length()  : 문자열의 길이
		//   ex) "Hello".length() -> 5
		
		// 3) String.charAt(index) : 문자열에서 특정 index에 위치한 문자 하나를 얻어옴.
		//   ex) "Hello".charAt(1)  ->  'e'
		//		  01234	
		
		// 4 ) count (숫자세기)
		
		Scanner sc = new Scanner(System.in);
		System.out.print("문자열 입력 : ");
		String input = sc.nextLine(); // hello world [h,e,l,l,o, ,w,o,r,l,d]
		
		// 1. 문자열을 입력받아 한 글자씩 잘라내어 char 배열에 순서대로 저장
		char[] arr = new char[input.length()];
		
		for(int i = 0; i < arr.length; i++) {
			arr[i] = input.charAt(i);
			// arr[0] = 'h'
			// arr[1] = 'e'
			// arr[2] = 'l'
			// arr[3] = 'l'
			// arr[4] = 'o'
			
		}
		
		System.out.println( Arrays.toString(arr) );
		
		// 2. 문자하나를 입력받아 일치하는 문자가 char 배열에 몇개 존재하는지 확인
		System.out.print("검색할 문자 입력 : ");
		char ch = sc.next().charAt(0);
		// sc.next() -> String 형
		// String.charAt(0) -> String의 0번째 인덱스 문자 하나를 추출해서 char 형태로 반환
		// "h" -> 'h'
		
		int count = 0; // 같은 글자 개수를 세기 위한 변수
		
		for(int i = 0; i < arr.length; i++) {
			
			if(arr[i] == ch) {
				count++;
				// arr[i] 값과 검색할 문자 ch 가 같은 경우
				// 카운트 늘려라!
			}			
		}
		
		// 결과출력
		if( count > 0 ) {
			System.out.println(count + "개 있음");
		} else {
			// 3. 단, 일치하는 문자 없을 경우 "존재하지 않음" 출력
			System.out.println("존재하지 않음");
		}
		
	}
	
}

0개의 댓글