배열 (Array)

DONI·2021년 8월 10일
0

Java

목록 보기
15/46
post-thumbnail

🏹 배열 할당

배열은 선언한 뒤에 바로 초기화하는 것이 아니라 할당을 해주어야 한다.
  ⭐ 배열의 크기는 할당된 뒤에 바뀔 수 없다.

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

🏹 배열 저장구조

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

메모리는 효율적인 관리를 위해 Stack, Heap, Static 영역으로 나뉘어서 저장이 이루어지고 있다. 일반적인 변수들은 Stack 영역에 저장되고, new 연산자에 의해서 동적으로 할당된 메모리는 Heap 영역에 저장된다.

  • 기본적으로 메모리의 주소값은 16진수로 표현된다. (0x)
    → 짧게 표현할 수 있음!

Heap 영역에 할당된 공간은 비어있을 수 없다 !
   → 컴파일러에 의해 해당 자료형의 기본값으로 자동 초기화


🏹 배열 초기화

  • 선언과 동시에 초기화 → 중괄호{ } 이용
    • int[] arr = {1, 2, 3, 4, 5};
    • int[] arr = new int[] {1, 2, 3, 4, 5};
    • String[] fruit = {"사과", "포도", "참외"};

🏹 배열 복사

  • 얕은 복사
    : 객체의 주소값만 가져와 참조형 변수에 저장하고 하나의 객체를 두 변수가 참조하는 것
    → 객체의 매개변수, 반환형을 전달할 때 사용
    int[] arr1 = new int[4];
    int[] arr2 = arr1;

  • 깊은 복사
    : 새로운 배열 객체를 생성하여 기존 배열의 데이터를 복사하는 것
    → 원본 데이터를 유지하거나 원본과 똑같은 배열이 필요할 때 사용

    • for 문을 이용한 복사
      for (int i = 0; i < arr1.length; i++) arr2[i] = arr1[i];
    • arraycopy 를 이용한 복사 (간단하게 빠르게 배열 복사 가능)
      System.arraycopy(src, srcPos, dest, destPos, length);
    • Arrays 객체를 이용한 복사 - copyOf( ) 메서드
      Arrays.copyOf(original, newLength);
    • Arrays 객체를 이용한 복사 - copyOfRange( ) 메서드
      Arrays.copyOfRange(original, from, to);
    • clone( ) 메서드를 이용한 복사 (사용하지 않는 것을 권장)
      arr1.clone();

🏹 Arrays.sort( )

배열 안에 저장된 값들을 오름차순으로 정렬해주는 메서드

  • 배열에 숫자, 영어, 한글이 섞여있을 경우 숫자 - 알파벳 - 한글 순으로 정렬됨

🚩 소스코드

import java.util.*;
public class Main {
	public static void main(String[] args) {
		// 배열 초기화 - 선언과 동시에 초기화
		String[] strArr = { "치킨", "피자", "족발" }; // 크기가 3인 공간 생성, 값 초기화
		char[] charArr = new char[] { 'a', 'b', 'c', 'd', 'e' };

		// 전체 출력 - String 자체로 뽑아오는 것
		System.out.println(Arrays.toString(strArr));
		System.out.println(Arrays.toString(charArr));
		
		// 깊은 복사 - arraycopy()
		int[] originArr1 = { 1, 2, 3, 4, 5 };
		int[] copyArr1 = new int[10];

		// src : 원본 배열
		// srcPos : 원본 배열의 복사할 시작점
		// dest : 카피 배열
		// destPos : 카피 배열의 붙여넣기 시작점
		// length : 원본 배열에서 가져올 길이
		System.arraycopy(originArr1, 0, copyArr1, 0, originArr1.length);
		
		// 깊은 복사 - Arrays.copyOf()
		int[] originArr2 = { 1, 2, 3, 4, 5 };
		// 할당하지 않고 바로 사용
		// 깊은 복사는 가능하지만 배열의 크기는 늘어나게 만들 수 없음
		int[] copyArr2 = new int[10];

		// original : 원본 배열
		// newLength : 복사할 길이
		// 무조건 원본 배열의 0부터 시작
		// 값을 대입시켜야 함
		copyArr2 = Arrays.copyOf(originArr2, originArr2.length);
		// copyArr2는 originArr2를 복사하여 새롭게 생긴 객체를 참조하게 되었으므로 길이 5
        
        // 깊은 복사 - Arrays.copyOfRange()
        int[] originArr3 = { 1, 2, 3, 4, 5 };
        int[] copyArr3 = new int[10];
        
        // original : 원본 배열
        // from : 복사할 범위의 시작 인덱스
        // to : 복사할 범위의 최종 인덱스
        copyArr3 = Arrays.copyOfRange(originArr3, 0, 5);
	}
}

🏹 toString( ), deepToString( )

객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메서드
System.out.print(배열명); ← 배열의 주소값 출력

  • 1차원 배열 : toString( )
  • 다차원 배열 : deepToString( )
profile
틀린 내용이 있다면 댓글 또는 이메일로 알려주세요 ❤ꔛ❜

0개의 댓글