본문 바로가기

개발일지/Java + Spring

[java] 배열의 설명과 예제


배열 생성

배열은 자바에서 객체로 취급하기 때문에 new 연산자로 배열 객체를 생성한다. 배열의 크기는 한 번 지정하면 변경할 수 없다. 

 

배열 객체가 생성된 후의 메모리 구조 

배열 객체를 생성하면 Stack 영역에는 배열 객체를 가리키는 레퍼런스 값(주소)이 저장된다. 그리고 Heap영역에는 실제 배열 객체가 생성된다. 

 

 


<배열의 크기 지정>

public class ArrayTest1 {

	public static void main(String[] args) {
		//배열 선언
		int ages[];
		String names[];
		
		//배열 객체 생성
		ages = new int[3];
		names = new String[3];
		
		//초기화
		ages[0] = 1;
		ages[1] = 2;
		ages[2] = 3;
		names[0] = "홍길동";
		names[1] = "전우치";
		names[2] = "김태리";
		
		//값출력
		for(int i=0; i<=2; i++) {
			System.out.println("ages["+i+"] = " + ages[i]);
			System.out.println("names["+i+"] = " + names[i]);
		}
	}

}

 


기본 형식이다

 


<배열의 크기를 지정하지 않고 바로 배열에 값을 초기화>

public class ArrayTest3 {

	public static void main(String[] args) {
		
		String cities[] = {"서울", "대구", "춘천", "울산", "광주", "천안"};
		String nations[] = new String[] {"대한민국", "미국", "영국", "일본", "프랑스"};
		
		//배열값 출력
		for(int i=0; i<cities.length; i++) {
			System.out.println("cities ["+i+"] = " + cities[i]);
		}
		
		System.out.println();
		
		for(int i=0; i<nations.length; i++) {
			System.out.println("nations["+i+"] = " + nations[i]);
		}
	}

}

 

현역에서는 잘 사용하지 않지만 이런 방법도 있다는 걸 알아둔다.

for(int i=0; i<cities.length; i++) {
			System.out.println("cities ["+i+"] = " + cities[i]);
		}

여기서 가장 중요한 부분은 length 메소드이다.

 

cities.length

이것은 자바스크립트에서도 나왔던 것으로.. cities의 개수 만큼 이라는 뜻이다. 하지만 배열은 0부터 시작하니까 '<=' 이 부호가 아니라 '<' 이 부호를 사용해야 한다.

 


이름을 입력시 배열에 입력된 이름과 비교해서 출력을 하고, 몇 번째 인덱스에 있는지도 알려줌

import java.util.Scanner;

public class ArrayTest4 {

	public static void main(String[] args) {
		String names[] = new String[] {"예지", "지수", "류진", "채령", "유나", "ITZY"};
		Scanner sc = new Scanner(System.in);
		int index = -1;
		do {
			System.out.println("검색할 이름을 입력하세요");
			System.out.print("이름 : ");
			String name = sc.next();
			for(int i=0; i<names.length; i++) {
				if(name.equals(names[i])) {
					index = i;
				}
			}
			if(index != -1) {
				System.out.println(name+"은(는) 배열의 " + index +"인덱스 방에서 찾았습니다.");
				break;
			}
			System.out.println("해당하는 이름이 존재하지 않습니다.");
		}
		while(true);
	}

}

 

 검색할 이름을 입력하세요
 이름 : 예지
 예지은(는) 배열의 0인덱스 방에서 찾았습니다.

초록색은 내가 입력한 값이다.

 

heap

예지, 지수, 류진, 채령, 유나, ITZY가 자동으로 들어간다. 

 

stack

heap의 주소가 들어간다.

 

여기서 int index = -1;을 설정한 이유는 사용자가 입력한 값이 배열에 존재한다면 인덱스 번호가 자연수로 매겨져야 하니까 -1을 설정해줬다. -2를 하든지 -3을 하든지는 상관 없음!



do-while문 없이 이용하는 것도 가능함!!

import java.util.Scanner;

public class NameFind {

	public static void main(String[] args) {
		String names[] = new String[] {"김수연", "박성현", "최수지", "안소희"};
		Scanner sc = new Scanner(System.in);
		int index = -1; //-1을 하는 이유는 존재 한다면 인덱스 번호가 자연수이기 때문에 없을 만한 수로 정했다.
		
		System.out.print("이름을 입력하세요 : ");
		String name = sc.next();
		for(int i=0; i<names.length; i++) {
			if(name.equals(names[i])) { //문자열 비교는 equals()
				index = i;
			}
		}
			if( index != -1 ) {
				System.out.println(name +"이(가)"+ index + "번째에 있습니다.");
			}else {
				System.out.println(name + "은(는) 없습니다.");
			}
		
	}

}

 


JAVA 5.0 이상 버전에서 돌아가는 코드

public class ArrayTest5 {

	public static void main(String[] args) {
		String names[] = new String[] {"ITZY", "예지", "리아", "류진", "채령", "유나"};
		for(String name : names) {
			System.out.print(name+" ");
		}
	}
}
 ITZY 예지 리아 류진 채령 유나 

 

String name : names

배열을 리턴해주는 함수로 처음부터 끝까지 인쇄해준다.