java

Java_Chapter05_배열

강용민 2022. 9. 6. 17:25

Chapter 3,4는연산자, 제어문이라 생략하겠습니다.

 

배열

배열의 특징

프로그램에서의 배열은 같은 타입의 데이터 여러 개를 연속된 데이터 하나로 다루는 것으로 정의된다. 따라서 많은 양의 데이터를 다룰 때 유용하다.

같은 타입의 데이터라는 말은 만약 int를 관리하기로 한 배열이 있다면 여기는 int로 판단할 수 있는 값들만 관리될 수 있다는 것이다.

기본적으로 in와 묵시적 형변환이 가능한 byte, short, char가 in로 판단될 수 있는 것들이다. 하지만 이외읭 값들은 관리할 수 없다.

 

배열의 선언 및 초기화

배열도 일반 변수와 같이 변수 타입과 이름으로 선언한다.

참조형 변수를 사용하려면 참조할 대상이 있어야 하는데 이것은 Chapter6에서 자세히 살펴볼 객체이다.

배열 객체를 생성하기 위해서는 new 키워드와 하꼐 어떤 데이터를 몇 개나 저장할지에 대한 정보가 필요하다.

pulbic class SimpleArray{
	public static void main(String[] args){
		int [] points = new int [3];
		System.out.printf("배열의 크기: %d%n",points.length);
                points[0] = 1;
                points[1] = 'A';
                byte b = 1;
                points[2] = b;

                for(int i =0;i<points.length;i++){
                    System.out.printf("%d 번째 요소: %d%n",i,points[i]);
     		}
    }
}

 

다차원 배열

2차원 배열은 대괄호 2개로 나타내는 1차원 배열과 마찬가지로 대괄호의 위치는 변수의 앞, 뒤 어디든 올 수 있다.

int a;
int[] arr;
int[][] arr2Dim;

위 변수의 선언에서 변수의 이름은 각각 a, arr, arr2Dim 등이다. 그럼 나머지는 모두 타입이다.

따라서 arr의 타입은 int를 관리하는 배열 ([])이다.

우리가 2차원 배열이라고 하는 arr2Dim 의 타입 역시 배열이다. 단지 관리하는 데이터가 in가 아니라 int[] 인 점이 다른 점일 뿐이다.

 

2차원 배열의 생성과 사용

배열은 생성하면서 몇 개의 데이터를 관리할 것인지 길이를 지정해야 한다.

2차원 이상의 배열을 만들 때는 여러 개의 대괄호가 등장하는데 이 중 맨 앞의 대괄호에 배열의 크기를 명시한다. 이 값은 생략할 수 없다.

int[][] arr2Dim = new int[2][3];

int[][] arr2Dim2 = new int[3][];
arr2Dim2[0] = new int[3];
arr2Dim2[1] = new int[4];
arr2Dim2[2] = new int[5];

그 뒤에 등장하는 대괄호는 관리하는 배열의 크기를 지정하며 몇 개를 저장할지 아직 정해지지 않았을 때는 생략할 수 있다.

 

고급 배열 특성

향상된 for문 : for each 문

for each문은 기존 for 문과 비교해서 초기값과 증감식을 사용하지 않으며 배열이 가지고 있는 요소들을 특정 변수로 바로 할당해서 사용할 수 있게 한다.

import java.util.Random;

public class IteratorFor{
    public static voidmain(String[] args){
    	int[] datas = new int[100];
        Random random = new Random();
        for(int i = 0; i<datas.length;i++){
        	datas[i] = random.nextInt(100);
        }
        
        int evenSum = 0;
        for(int i = 0; i< datas.length; i++){
        	int data = datas[i]
            if(data % 2 == 0){
            	evenSum += data;
            }
        }
        System.out.printf("짝수들의 합: %d%n", evenSum);
    }
}

 

배열 데이터의 정렬

배열과 같은 자료구조에 대해서는 정렬에 대한 요구사항이 빈번하다.

자바에서는 이런 기능들은 미리 API를 통해 제공하고 있다.

Arrays 클래스에서 제공하는 sort()는 파라미터로 들어오는 배열을 오름차순으로 정렬한다. 만약 문자열을 관리하는 배열이 파라미터로 들어온다면 대문자 --> 소문자의 사전순으로 정렬한다.

import java.util.Arrays;

public class SortingAPI{
	public static main(String[] args){
    	String[] arr = {"Java","is","A","PIE"};
        Arrays.sort(arr);
        System.out.println("정렬 후");
        for(String i : arr){
        	System.out.printf("%s \t",i);
        }
    }
}

 

배열의 크기 변경

배열은 한 번 생성되면 메모리의 연속성 때문에 그 크기를 변경할 수 없다고 이야기했다.

하지만 프로그래밍을 하다 보면 처음 예상했던 데이터의 개수보다 더 많은 데이터를 관리해야 할 경우가 있다.

그렇다고 처음부터 크게 만들면 메모리 낭비가 심하기에 추가를 하는 방법을 택할 때가 있는데, System 클래스가 제공하는 arraycopy()를 사용하면 이 과정을 API 차원에서 지원한다.

import java.util.Arrays;

public class ArrayCopy{
	public static void main(String[] args){
		int[] source = {1,2,3,4,5};
        int[] target = new int[10];
        for(int i=0; i< source.length; i++){
        	target[i] = source[i];
        }
        System.out.println(Arrays.toString(target));
        
        int[] target2 = new int[10]
        System.Arraycopy(source,0,target2,0, source.length);
        System.out.println(Array.toString(target2));
    }
}

'java' 카테고리의 다른 글

Java_Chapter08_객체 지향 4대 요소  (0) 2022.10.09
Java_Chapter?_builder pattern  (0) 2022.10.06
Java_Chapter07_클래스의 관계  (0) 2022.09.15
Java_Chapter06_클래스와 객체  (0) 2022.09.14
Java_Chapter01~02_자바특징 및 변수  (0) 2022.09.05