[Java] 자바의 정석 5장 회고 - 배열

토닉·2021년 8월 27일
0

Java

목록 보기
6/13
post-thumbnail

배열

같은 타입의 여러 변수를 하나의 묶음으로 모아놓은 것!

선언, 생성, 초기화

위 처럼 같은 타입에 관련이 있는 여러 변수들을 하나의 묶음으로 할당할 수 있습니다.
배열은 선언과 생성으로 구분됩니다.
선언: 배열의 주소가 저장되는 장소, 즉 배열을 다루는데 필요한 변수
생성: 배열의 값을 저장할 공간이 생성

public static void main(String[] args) {
    int[] arr; // 배열 선언
    arr = new int[5]; // 5개의 int 값을 저장할 수 있는 공간 생성
}

물론 선언과 동시에 공간을 생성하고 또 값을 초기화 할 수도 있습니다.

public static void main(String[] args) {
    int[] arr = new int[5];// 선언과 동시에 생성
}

초기화

public static void main(String[] args) {
    int[] arr = {1,2,3,4,5};// 선언과 동시에 생성
}

똑같은 배열을 복사하고 싶다면?

public static void main(String[] args){
    int[] arr = {1,2,3,4,5};
    int[] arr2 = arr; // 가능할까?
    arr[2] = 100;
    System.out.println(Arrays.toString(arr2));
}
> [1, 2, 100, 4, 5]

arr2도 같은 값을 가집니다. 하지만 단순히 주소를 복사한 것이기 때문에 arr, arr2는 같은 메모리 주소를 바로보고 있습니다.
그래서 arr의 값을 바꾼다면 arr2에서 호출할 때 바뀐 값이 나올 것 입니다.

배열을 다루는 유용한 메서드(Arrays)

배열을 다루기 위한 유용한 메소드들이 있습니다. 배열 자체의 메소드와 Arrays 객체의 메소드를 활용해서 사용하게 됩니다.

배열의 길이

배열.length

public static void main(String[] args){
    int[] arr = {1,2,3,4,5};
    System.out.println(arr.length);
    >> 5
}

배열의 출력

Arrays.toString(배열)

public static void main(String[] args){
    int[] arr = {1,2,3,4,5};
    System.out.println(Arrays.toString(arr));
    >> [1,2,3,4,5]
}

Arrays로 배열 다루기(메서드)

// toString, deepToString, equals, deepEquals
public static void main(String[] args) {
		int[] arr = {1,2,3,4,5};
		int[] arr2 = {1,2,3,4,5};
		int[][] arr2D = {{1,2,},{3,4}};
		int[][] arr2D2 = {{1,2,},{3,4}};
		System.out.println("Arrays.toString(arr) : " + Arrays.toString(arr));
		System.out.println("Arrays.equals(arr,arr2) : " + Arrays.equals(arr,arr2));
		System.out.println("arr.equals(arr2) : " + arr.equals(arr2));
		System.out.println("Arrays.deepToString(arr2D) : " + Arrays.deepToString(arr2D));
		System.out.println("Arrays.deepEquals(arr2D, arr2D2) : " + Arrays.deepEquals(arr2D, arr2D2));
	}
>> Arrays.toString(arr) : [1, 2, 3, 4, 5]
>> Arrays.equals(arr,arr2) : true
>> arr.equals(arr2) : false
>> Arrays.deepToString(arr2D) : [[1, 2], [3, 4]]
>> Arrays.deepEquals(arr2D, arr2D2) : true

배열의 주소가 아닌 배열의 값을 복사하는 방법

// 주소 복사 vs copyOf 사용
public static void main(String[] args) {
		int[] arr = {1,2,3,4,5};
		int[] arr2 = arr;
		int[] arr3 = Arrays.copyOf(arr, arr.length);
		System.out.println("arr = " + arr); // 같은 메모리 주소
		System.out.println("arr2 = " + arr2); // arr와 같은 메모리 주소
		System.out.println("arr3 = " + arr3);
		arr[3] = 100;
		System.out.println("arr[3] = " + arr[3]);
		System.out.println("arr2[3] = " + arr2[3]);
		System.out.println("arr3[3] = " + arr3[3]);
	}
> arr = [I@28d93b30
> arr2 = [I@28d93b30
> arr3 = [I@1b6d3586
> arr[3] = 100
> arr2[3] = 100
> arr3[3] = 4

String class

String은 문자열이라고 부르면 기본 자료형과 다른 클래스(객체)입니다.
String은 char배열에 기능(메서드)를 추가한 것

String 메서드

public static void main(String[] args) {
		//String 메소드
		String string = "ABCDE";
		System.out.println("string.charAt(3) = " + string.charAt(3)); // 문자열에서 특정 인덱스 문자 구하기
		System.out.println("string.substring(1,3) = " + string.substring(1,3)); // 문자열에서 특정 문자열을 인덱스 범위로 구하기
		System.out.println("string.equals(\"ABCDE\") = " + string.equals("ABCDE")); // 문자열 비교
		char[] charArr = string.toCharArray(); // 문자열에서 char배열로 바꾸기
		System.out.println("charArr.toString() = " + charArr.toString());
		System.out.println("string.toCharArray().toString() = " + string.toCharArray().toString());
	}

>> string.charAt(3) = D
>> string.substring(1,3) = BC
>> string.equals("ABCDE") = true
>> charArr.toString() = [C@28d93b30
>> string.toCharArray().toString() = [C@1b6d3586
// 정렬
public static void main(String[] args) {
		int[] arr = {3, 2, 5, 4, 1};
		Arrays.sort(arr);
		System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
	}

Arrays.toString(arr) = [1, 2, 3, 4, 5]
profile
우아한테크코스 4기 교육생

0개의 댓글