본문 바로가기
카테고리 없음

배열1 (배열선언, 배열사용)

by 낭만 코딩 2024. 8. 15.

1. 배열 선언

2. 배열 사용

 

 

 

1. 배열 선언

배열도 변수를 선언할 때와 마찬가지로 먼저 변수를 선언하고, 사용해야 합니다. 배열 변수를 선언하는 방법은 두가지가 있습니다.

데이터 타입[ ] 변수명;

 

데이터 타입 변수명[ ];

 

데이터 타입(자료형) 뒤에 대괄호 [ ] 를 넣거나, 변수명 뒤에 대괄호를 넣으면 배열 변수를 선언한 것입니다. 실제 코드로 배열 변수를 선언해보면,

 

int[] arrInt;
int arrInt2[];
 
double[] arrDouble;
String[] arrString;

 

arrInt 변수와 arrInt2 변수는 모두 정수타입의 배열 변수이고, 대괄호가 데이터 타입 뒤에 있거나, 변수뒤에 있어도 모두 동일한 의미입니다. int 타입외에도 double 이나 String 도 뒤에 대괄호가 들어가면 모두 배열 변수로 선언된 변수 입니다. 배열도 참조 자료형으로 주소값을 참조하는 자료형이고, 위 예제처럼 값이 선언만 하고, 초기화 되지 않은 상태에서는 변수를 사용 할 수 없고, 초기화를 해줘야 하는데, 배열 역시 객체이므로 null 값으로 초기화 할 수 있습니다.

 

public class ArrSample1 {

	public static void main(String[] args) {
		
		int[] arrInt;
		int arrInt2[] = null;
		
		//System.out.println(arrInt[0]); // 에러 발생
		System.out.println(arrInt2[0]); // 에러 발생하지 않음
		

	}

}

 

예제의 arrInt 변수는 초기화하지 않았고, arrInt2 변수는 null로 초기화하였습니다. 주석으로 처리된 첫번째 출력문은 변수가 초기화되지 않은 상태로 사용하려고 하니 컴파일단계에서 에러가 발생하게됩니다. 이클립스 상에서 빨간줄로 에러로 표시됩니다. 아래 두번째 출력문은 null로 초기화한 변수이므로 이클립스에서는 에러가 발생하지 않습니다.  하지만 실행해보면 에러가 발생할 텐데요. 그 이유는 아직 초기화가 되지 않았기 때문입니다.

배열은 반드시 사용하기 전에 선언과 초기화가 먼저 이루어져야 합니다. 배열 변수를 선언할 때 객체를 생성할 수 있는데, new 연산자를 이용해서 배열 객체를 생성할 수 있습니다. new 연산자로 배열 객체를 생성하면 배열의 값은 기본값으로 초기화 됩니다.

배열 객체를 new 연산자로 생성하는 방법은

int[] arrInt = new int[5]; // 길이가 5개인 배열 객체 생성

 

int 데이터 타입의 배열변수 arrInt에 new 연산자로 길이가 5개인 배열 객체를 생성하는 코드입니다. 즉 5개의 정수를 순서대로 넣을 수 있는 배열입니다. 지금은 아무런 값을 대입하지 않은 상태로 초기화를 했지만 객체로 생성 되는 순간 int 타입의 기본값인 0으로 초기화 됩니다. 5개의 자리에 모두 0이 들어가 있는 것입니다.

 

순번 0 1 2 3 4
0 0 0 0 0

 

위 표는 arrInt 변수를 5개의 공간이 있는 구조로 표현한 것입니다. 모든 자리에 0 값이 들어가 있으며, 각 값들은 순서 대로 번호를 가지고 있습니다. 이 순번을 배열에서 인덱스(index) 라고 부르는데, 은행에서 번호표를 뽑듯이 각 값들은 맨 앞에서부터 줄서있는 순서대로 인덱스를 가지고 있습니다. 중요한점은 1부터 시작하는것이 아니라 0부터 시작한다는 것입니다. 이 인덱스 번호를 가지고 초기화 하는 방법을 알아보겠습니다.

 

int[] arrInt = new int[5]; // 길이가 5개인 배열 객체 생성
arrInt[0] = 1;
arrInt[1] = 2;
arrInt[2] = 3;
arrInt[3] = 4;
arrInt[4] = 5;

 

인덱스 0번부터 4번까지 순서대로 1부터 5까지의 값을 대입했습니다. 이렇게 대입된 값들을 다시 표형태로 살펴볼까요.

 

인덱스 0 1 2 3. 4
1 2 3 4 5

 

이제 각 인덱스 위치의 값들이 바뀐것을 알 수 있습니다. 인덱스는 변함이 없지만 0번 인덱스에는 값 1이, 1번 인덱스에는 값 2가 대입되어 있는 것을 알 수 있습니다.

 

이번엔 문자열 배열을 다뤄보도록 하겠습니다.

public class ArrSample4 {

	public static void main(String[] args) {
		
		String[] arrStr = new String[5];
		
//		System.out.println(arrStr[0]);
		
	}

}

 

실행 결과

null

 

문자열 타입인 String은 클래스이기 때문에 기본 자료형과 달리 첫자가 대문자 입니다. 이 문자열 타입도 참조 자료형 이며, 참조자료형의 객체는 기본값이 null 입니다. 이 null은 값이 없다는 뜻으로 "" (빈 문자열) 과는 다릅니다. 문자열을 사용할 때는 보통 아래와 같이 사용하게 되는데,

String str = "";
또는
String str = null;

 

위 두 코드는 완전히 다릅니다. ""는 빈문자열이 있는 것이고, null은 값 자체가 존재하지 않는 것이므로 혼동하지 않도록 하세요. 이렇게 참조자료형의 기본값은 null이 되며, 기본자료형의 각 종류별로 기본값이 차이가 있습니다.

 

분류 데이터 타입 초기값
정수 기본 자료형 byte[ ] 0
char[ ] '\u0000' (0과 같음)
short[ ] 0
int[ ] 0
long[ ] 0L
실수 기본 자료형 float[ ] 0.0F
double[ ] 0.0
논리 기본 자료형 boolean[ ] false
참조 자료형 (클래스, 인터페이스) 클래스명[ ] null

 

타입 마다 초기값이 다 달라서 외우기 힘들 수 있는데, 다 외우려고 하지말고, 간단하게 기본 자료형은 0으로, 참조 자료형은 null로 초기값이 지정된다고 생각하면 됩니다. 논리 자료형은 false 지요? 원래 컴퓨터의 비트값 0과 1은 false, true로 처리되는데, 여기서 0을 false로 생각하시면 됩니다.

 

배열 변수를 선언과 동시에 초기화 하는 방법

 

String[ ] arrStr = {"홍길동", "이순신", "김유신"};

 

arrStr 이라는 이름의 문자열 타입의 배열 변수를 선언함과 동시에 중괄호 { }를 사용하여 “홍길동”, “이순신”, “김유신” 세 문자열을 배열의 값으로 초기화 하였습니다. 변수의 0번 인덱스에는 “홍길동”이, 1번 인덱스는 “이순신”이 2번 인덱스는 “김유신”이 순서대로 열맞춰 차례대로 대입된 것입니다. 배열을 선언하는 방법은 여러가지 방법이 있지만, 주의할 점은 처음 배열을 선언할 때 배열의 길이가 정해지며, 나중에 길이를 변경할 수 없습니다. 그리고, 각 값의 위치를 나타내는 인덱스는 0번부터 시작한다는 점을 꼭 기억하세요.

 

 

 

2. 배열 선언

배열은 여러 값들을 하나의 변수에 넣어두고, 각 위치의 인덱스를 통해 값을 사용할 수 있습니다. 인덱스는 0번부터 시작하기 때문에 마지막 인덱스 번호는 배열의 길이에서 1 작 값이 됩니다. 배열의 길이를 알 수 있는 방법은 배열변수 명.length입니다.

 

public class ArrSample6 {

	public static void main(String[] args) {
		
		String[] arrStr = {"홍길동", "이순신", "김유신"};
		
		System.out.println("배열의 길이 : "+arrStr.length);
		
	}

}

 

실행 결과

배열의 길이 : 3

 

배열은 주로 반복문을 이용해 사용되는 경우가 많은데, 인덱스는 0부터 배열길이의 -1 값까지이기 때문에 for문을 통해 변수 i를 0부터 마지막 인덱스까지 반복시키면 배열의 각 값들을 사용할 수 있게 됩니다. 위 문자열 배열의 모든 값들을 for문을 이용해서 출력해 보겠습니다.

 

public class ArrSample7 {

	public static void main(String[] args) {
		
		String[] arrStr = {"홍길동", "이순신", "김유신"};
		
		for (int i=0; i<arrStr.length; i++) {
			System.out.println(arrStr[i]);
		}
		
	}

}

 

실행 결과

홍길동
이순신
김유신

 

변수 i는 초기값 0으로, 조건은 i < arrStr.length, 증감식은 1씩 증가합니다. 배열의 길이 arrStr.length는 3이기 때문에 for문 블록에서 변수 i는 0,1,2 총 3번이 반복됩니다. 실제로 반복 실행되는 출력문은 아래와 같습니다.

 

System.out.println(arrStr[0]);
System.out.println(arrStr[1]);
System.out.println(arrStr[2]);

 

실제 어플리케이션 개발할 때도 배열은 반복문과 같이 사용되는 경우가 정말 많기 때문에 많이 연습해봐야 하고, 특히 코드를 작성할 때도 머리속으로 구조를 그려보는 연습이 중요합니다.