본문 바로가기
Back-End/Java

[Java] 배열(array)

by 찐코딩 2021. 8. 11.

배열(Array)

- 하나의 이름으로 동일한 자료형의 데이터를 여러 개 연속적으로 저장할 수 있는 메모리 공간을 할당 받는 것을 말함
- 변수는 하나의 값만을 저장하지만, 배열은 여러 개의 값을 저장할 수 있음
- 같은 자료형의 데이터들이 순차적으로 저장됨
- 배열은 선언과 동시에 저장할 수 있는 데이터 타입이 결정이 됨
   만약 다른 타입의 데이터를 저장하려면 타입 불일치 컴파일 오류가 발생함
- 배열의 방의 이름은 0이라는 인덱스부터 시작함

- 배열의 단점 : 배열은 한 번 크기가 정해지면 크기를 늘리거나 줄일 수 없음


배열의 선언과 생성

 - 1단계 : 배열 선언(자료형[] 배열명 or 자료형 배열명[])

선언방법 선언 예
타입[] 변수이름; int [] score;
String[] name;
 타입 변수이름[]; int score[];
String name[];

 - 2단계 : 배열 메모리 생성(메모리 할당 : 배열명 = new 자료형[배열의 크기])

타입[] 변수이름;                   // 배열 선언(배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[];         // 배열 메모리 생성(실제 저장공간을 생성)

보통 1+2단계를 합쳐 한 줄로 간단하게-
타입[] 변수이름 = new 타입[길이];
로 배열의 선언과 생성을 한다.

 - 3단계 : 배열 초기화(할당된 메모리 영역에 데이터를 저장)
 - 4단계 : 배열을 이용(데이터 처리 = 연산, 출력 등)

 

배열의 선언과 생성 예시)

public static void main(String[] args) {
		//1단계. 배열 선언(형식: 자료형[] 배열명(배열이름), 자료형 배열명[])
		//int[] score;
		
		//2단계. 배열 메모리 생성(메뫼 할당 : 배열명=new 자료형[배열의 킈기])
		//score=new int[5];
		
		//1단계 + 2단계 : 배열 선언 및 배열 메모리 생성
		int[] score=new int[5];
		
		System.out.println("배열 주소 >>>" + score);  //배열주소
		
		//3단계. 배열 초기화(할당된 메모리 영역에 데이터를 저장)
		score[0]=10;
		score[1]=20;
		score[2]=30;
		score[3]=40;
		score[4]=50;
		
		//4단계. 배열을 이용(데이터 처리-연산, 출력 등등)
		score[2]+=100;  //score[2]=score[2]+100
		score[3]+=50; //score[3]=score[3]+50

		System.out.println("score[0]>>>" +score[0]);
		System.out.println("score[1]>>>" +score[1]);
		System.out.println("score[2]>>>" +score[2]);
		System.out.println("score[3]>>>" +score[3]);
		System.out.println("score[4]>>>" +score[4]);
		
		System.out.println();
		//반복문을 이용하여 배열을 출력해보자.
		for(int i=0; i<=4; i++) {
			System.out.printf("score[%d] >>> %d\n", i, (score[i]));
		}
	}

제일 첫 줄은 배열의 주소를 의미 ('타입@주소' 형식으로 출력됨)

I는 1차원 int배열이라는 의미이고, 

@ 뒤에 나오는 16진수는 배열의 주소인데, 실제 주소가 아닌 내부 주소 

 

배열의 생성 방법은 두가지 방법이 있는데,

 1. new 키워드를 사용하여 배열 생성 - 위 방법
 2. 배열의 초기값을 이용하여 배열 생성 
  ex) 
public static void main(String[] args) {
		//배열을 생성함과 동시에 초기값 설정
		int[] arr= {10, 20, 30, 40, 50};
		arr[4]+=50; //arr[4]=100 으로 재지정
		for(int k:arr) {  //단축 for문
			System.out.println("arr 배열의 값 : " + k);
		}
	}
배열의 초기화
int[] arr = new int[] {10, 20, 30, 40, 50} ;   //배열의 생성과 초기화를 동시에

{} 괄호 안의 값의 개수에 의해 배열의 길이가 자동으로 결정되기 때문에
[] 괄호 안의 배열의 길이는 안 적어도 된다.

int[] arr = {10, 20, 30, 40, 50} ;   // new int[]를 생략할 수 있음

 

 


배열의 길이

* length 속성

- 배열의 크기(길이)를 알려주는 키워드.

- 배열의 크기(길이)를 정수값으로 알려줌.

- 이미 생성된 배열의 길이는 변하지 않기 때문에, '배열이름.length'는 상수값.

  즉, 값을 읽을 수만 있을 뿐 변경할 수는 없음

int arr = new int[5];
arr.length = 10;  //에러. 배열의 길이는 변경할 수 없음

 

형식) 배열명.length

예) int size = arr.length

 

public static void main(String[] args) {
		int[] arr=new int[3];
		System.out.println("arr 배열의 크기(길이) >>> "+arr.length);
	}

 

* 배열의 길이 변경하기

- 한번 선언된 배열은 길이를 변경할 수 없음

- 만일 변경하고 싶을 경우, 새로운 배열을 생성한 다음

기존의 배열에 저장된 값들을 새로운 배열에 복사하면 됨

 


예제01)

키보드로 배열의 크기와 값 입력받기

import java.util.Scanner;

// 키보드로 배열의 크기를 입력받아 보자

public class Ex06 {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.print("배열의 크기를 입력하세요. >>> ");
		int[] arr=new int[sc.nextInt()];
		System.out.println("arr 배열의 크기(길이) >>> "+arr.length);
		System.out.println();
		
		for(int i=0; i<arr.length; i++) {
			System.out.print((i+1)+"번쨰 정수 입력>>> ");
			arr[i]=sc.nextInt();
			}
            
		System.out.println();
        
		for(int i=0; i<arr.length;i++) {
			System.out.printf("arr[%d] >>> %d\n",i,arr[i]);
			}
		
		sc.close();
	}
}

 


예제 02)

배열에 저장된 데이터 화면에 출력해보기

import java.util.Scanner;

public class Ex07 {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.print("문자열 배열의 크기를 입력하세요. : ");
		String[] str=new String[sc.nextInt()];
		System.out.println();
	
		//문자열 배열에 데이터를 저장해 보자
		for(int i=0; i<str.length; i++) {
			System.out.printf("%d번째로 입력할 문자열을 입력해주세요. ", i+1);
			str[i]=sc.next();
		}
		System.out.println();
		
		//문자열 배열에 저장된 데이터를 화면에 출력해보자.
		for(int i=0; i<str.length; i++) {
			System.out.printf("str[%d] >>> %s\n", i, str[i]);
		}
		System.out.println();
		
		//문자열 배열에 저장한 문자열을 검색을 해 보자.
		System.out.print("검색할 문자열을 입력하세요. ");
		String search=sc.next();
		String result="default";
		
		for(int i=0; i<str.length; i++) {
			if(search.equals(str[i])) {
				result="true";
				System.out.printf("%s(은)는 %d번째로 입력하셨습니다.",search,(i+1));
				// 배열 인덱스는 0부터 시작하므로 i+1로 입력
			}
		}//for문 종료
		
		if(result=="defualt") { //못 찾았을 시 실행문
			System.out.printf("입력된 데이터 %s(은)는 배열에 없습니다.\n",search);
		}
		sc.close();
	}

}

'Back-End > Java' 카테고리의 다른 글

[Java] 배열 공유  (0) 2021.08.16
[Java] 단축 for문(개선된 for문, for each문)  (0) 2021.08.11
[Java] 기타보조제어문(continue, break)  (0) 2021.08.11
[Java] 조건문 for문  (0) 2021.08.08
[Java] 반복문 while, do while  (0) 2021.08.08

댓글