본문 바로가기

Java

[자바의 신] 변수 하나에 여러 개의 데이터를 담을 수 없을까?

지금까지 봐온 기본 자료형 8가지(boolean, byte, short, int, long, char, float, double)는 하나의 값만 넣을수 있다. 하나의 변수에 여러개의 값을 넣을 수는 없을까? 

 

가장 일반적인 자료구조중 하나로 '배열'이 있다.

 

배열은 한가지 타입에 대해서 하나의 변수에 여러개의 데이터를 넣을 수 있다. 

배열은 다음과 같이 쓴다. 

int[] intArray = new int[10];

또는 

int[] intArray;
intArray = new int[10];

위와 같이 초기화 하면 0번방 부터 9번방 까지  10칸짜리 int 형태의 방이 생긴다고 생각하면 된다. 명심할 것은 0번방 부터라는것!

0번 방 1번 방 2번 방 3번 방 4번 방 5번 방 6번 방 7번 방 8번 방 9번 방
0 0 0 0 0 0 0 0 0 0

이 방들은 int타입으로 만들었기 때문에 int만 들어갈수 있고, 아무 자료도 입력하지 않으면 int타입의 기본값 0이 할당된다. int 이외의 기본 자료형으로 만든 배열도, 아무것도 넣지 않으면 해당 타입의 기본형으로 채워진다. 참조 자료형도 배열로 만들수 있다. 이때 기본값은 초기화(new 생성자, String의 경우 "~~" 가능) 해주지 않으면 null 이다. 

 

배열에 값을 넣는 방법?

 

위 intArray 첫번째 방에 1을 넣어보자.

intArray[0] = 1;

위와 같이 해당 방에 int타입의 값을 할당해 줄수 있다.

intArray[10] = 10;

그런데 위 코드는 왜 안될까??

다시 한번 강조하지만, 배열의 시작은 0부터다. 0~9까지 10개의 방을 만들었기 때문에 10번 방은 없다.

없는 방에 값을 넣으려 하면 에러가 발생한다.(java.lang.ArrayIndexOutOfBoundsException)

 

배열도 참조 자료형 이지만, new 키워드 없이 초기화 할수 있다.

int[] intArray = {1,2,3,4,5,6,7,8,9,10};

위와 같이 배열을 선언하는 경우에는 반드시 한 번에 변수선언과 초기화를 해야한다.

 

배열을 위한 for문

 

배열 뿐만 아니라 자바에서 제공하는Collection 자료구를 처리할때 조금 다른 for문을 사용할 수 있다.

 

기존의 for문은 아래 형태로 쓴다.

for(조건 초기화; 종료조건 ; 조건값 증가) {
    // 반복할 문장
}

배열을 비롯한 Collection 자료구조에 사용하는 for문은 아래와 같이 쓴다.

for(타입이름 임시변수명 : 반복대상객체) {
    // 반복문장
}

배열의 값만 처리할때는 이 for문을 사용하면 편하다. 그러나, 이 for문은 위치를 알수 없다는 단점이 있다.

public class ForForCollection {
    public static void main(String[] args) {
    	int[] intArray = {1,2,3,4,5,6,7,8,9,10};
        
        for(int num : intArray) {
        	System.out.println("value = " + num);
        }
        
        int intArrayLength = intArray.length;
    	for (int i ; i < intArrayLength ; i++) {
        	System.out.println(i+"번째 값 : " + intArray[i]);
        }
    }
}

위의 for문은 단지 배열을 순회하면서 모든 값을 출력해주지만, 아래의 for문은 몇번째 값인지 알 수 있다.

필요에 따라서 선택해서 써야겠다.

 

배열은 선언할때 크기가 지정되야만 한다. 중간에 크기를 증가시키거나, 감소시킬수 없다. 이런 단점을 보완하기 위해 Collection이 존재한다.