본문 바로가기
IT 돌고래/JAVA

[JAVA]자바의 열걸음 : 배열

by IT돌고래 2020. 2. 20.
반응형

안녕하세요.

IT 돌고래입니다.

자바의 배열에 대해서 이야기를 해보겠습니다.

 

이전에 쓴 글에서 자바의 세 걸음과 네 걸음에서 변수에 대해서 배웠습니다. 변수는 값을 담고 업데이트하면서 프로그램이 필요로 하는 데이터를 가지고 있습니다. 

이전에 배운 변수를 간단히 설명을 드리면 아래의 사진을 확인해 보겠습니다.

자료형인 int인 a라는 변수명을 가진 상자에 값을 10을 대입했습니다. 여기서 값 10은 수시로 바뀔 수가 있습니다. 변수 a라는 공간은 프로그램에서 사용될 것입니다.

변수를 선언하고 사용하는 것이 하나이거나 적으면 문제가 되지 않습니다. 하지만 만약에 100개의 정수 데이터를 담아두어야 하는 변수가 필요로 한다면 상당히 힘들어질 것입니다. 100개의 변수를 선언을 해야 하기 때문입니다.

그래서 이런 불편을 해소하고자 나온 개념이 배열이라는 개념입니다. 

 

1. 배열이란?

 

배열이란 같은 자료형을 가지는 변수를 모아놓은 집합입니다. 이해를 돕자면 아파트를 생각하면 이해를 하기 쉬울 수가 있습니다. 아파트에 여러 사람들이 층과 호로 살고 있듯이 배열도 같은 자료형을 여러 개 모아 같이 메모리에서 살고 있습니다. 이렇게 집합으로 하나의 아파트를 만들면 각각의 공간에 데이터를 집어넣어서 사용을 해야 합니다. 

각 층을 사용하기 위해서는 아파트에는 몇 층 몇 호가 있는 것처럼 배열로 index라는 것이 있어서 배열에 데이터를 쓰거나 업데이트하거나 관리를 할 수 있습니다.

 

※ index는 0부터 시작합니다.

 

2. 배열 선언 및 생성

int a [] = new int[5]; // 변수 a는 정수 배열을 선언 하고 정수 배열 객체를 5개 생성
String b[] = new String [5]; // 변수 b는 문자열 배열을 선언 하고 문자열 배열 객체를 5개 생성
float f[] = new float[5]; // 변수 f는 실수 배열을 선언 하고 실수 배열 객체를 5개 생성
char ch[] = new char[5]; // 변수 ch는 문자 배열을 선언 하고 문자 배열 객체를 5개 생성

 

위에 소스를 보면 변수 선언을 하고 new로 객체 배열을 만들어서 대입을 시켜줌으로 써 a라는 변수는 5개의 정수를 담을 수가 있게 됩니다. 아래 4개의 변수도 마찬가지입니다.

 

3. 배열에 값 대입

int a[] = new int[5]; // 변수 a는 정수 배열을 선언 하고 정수 배열 객체를 5개 생성
a[0] = 1; //a 정수 배열에 0번 index에 값 1을 대입
a[1] = 2; //a 정수 배열에 1번 index에 값 1을 대입
a[2] = 3; //a 정수 배열에 2번 index에 값 1을 대입
a[3] = 4; //a 정수 배열에 3번 index에 값 1을 대입
a[4] = 5; //a 정수 배열에 4번 index에 값 1을 대입
a[5] = 6; //에러 객체를 5개 만들고 index가 0부터 시작하기 때문에 5번 index는 접근을 할 수 없음 


///////////////////////////////////////////

for(int i = 0;i<5;i++) 
//정수 변수 i를 선언후 값을 0으로 초기화 변수; i는 5보다 작으면 반복 ; 변수 i는 반복을 할때마다 1씩 증가
{
     a[i] = i+1;
}
// 이렇게 반복문을 사용 할 수 있어서 더욱 간단하게 데이터 관리를 할 수가 있음

 

※배열은 반복을 써서 값을 대입하거나 검색하기에  용이함

 

4. 배열의 묵시적 값

묵시적 값
byte, short, int, long 0
float, double 0.0
char 공백 문자
boolean 거짓(false)
참조 자료형 null

 

5. 다차원 배열

배열은 무한으로 확장을 할 수 있기 때문에 하나의 배열만 쓰는 것이 아니라 두 개 세 개.. 여러 개로 배열을 쓸 수가 있습니다.

 

int a[][] = new int[4][4]; //2차원 배열
int b[][][] = new int[3][4][5]; //3차원 배열
int c[][][][] = new int [2][3][4][5]; //4차원 배열
.
.
.
.
//이런식으로 다차원 배열을 만들 수 있습니다.

 

위 소스처럼 다차원 배열은 개발자가 원하는 데로 늘려서 다차원 배열을 만들면 됩니다.

위에 이차원 배열 그림을 보면 int a = new int [5][5]를 이해하기 쉽게 나타낸 그림입니다. 첫 번째 배열에는 주소가 들어있어서 주소 이동을 하게 되고 그 주소를 가면 또 5개의 배열이 있는데 그 배열에 자료형 int인 값을 쓰거나 읽을 수가 있게 됩니다. a [0], a [1]만 했지만 a [2], a [3], a [4]도 똑같이 적용된다고 보면 됩니다.

우리가 원하는 건 int 값이기 때문에 int 값이 어디에 저장이 되는지 확실히 알아야 합니다.

 

6. 다차원 배열의 응용

 

int a[][] = new int[3][]; 
// 정수형 이차원 배열 변수 a를 생성하고 첫번째 인덱스만 먼저 배열객체 3개를 생성
a[0] = new int[3]; // a배열 0번 인덱스에 배열 객체를 3개생성해서 대입
a[1] = new int[4]; // a배열 1번 인덱스에 배열 객체를 4개생성해서 대입
a[2] = new int[5]; // a배열 2번 인덱스에 배열 객체를 5개생성해서 대입

int b[][][] = new int[7][2][4]; 
//정수형 삼차원 배열 변수 b를 생성하고 첫번째 7개 배열 객체 생성 두번째 2개 배열객체 생성
// 세번째 4개의 배열객체를 생성해서 대입

for(int i = 0;i<b.length;i++) // 첫번째 배열 객체 길이 만큼 반복
{
    for(int j =0;j<b[i].length;j++) //두번째 배열 객체 길이 만큼 반복
    {
        for(int k =0;k<b[i][j].length;k++) //세번째 배열 객체 길이 만큼 반복
        {
              b[i][j][k] = 0; // 마자막 세번째 메모리 공간에 0을 대입
        }
    }
}

 

위에 소스를 보면 다차원 배열의 객체를 만들 때에 첫 번째 인덱스는 필수로 정해서 만들고 나중에 필요할 때 각각의 배열 객체를 만들어서 추가해줘서 사용을 할 수가 있습니다. 또한 많이 배열에서 어려워하시는 부분인 밑에 반복문 같은 경우에는 3차원 배열을 만들어서 사용을 할 때 전체를 읽거나 쓰려고 할 때 3중 포문을 사용해서 배열을 관리를 할 수 있다. 반복문을 보면 더 많은 차원에 배열도 전체의 데이터를 읽거나 쓰려고 한다면 더 확장해서 반복문을 추가해서 사용하시면 됩니다. 

 

※ 배열도 자료형으로 이해하시는 게 편합니다. int의 배열을 배열이기 때문에 정수의 값을 입력하면 에러가 발생합니다.

 

7. 응용 소스

 

학생 숫자를 입력하여서 배열 객체를 생성하고 국어, 영어, 수학 점수를 넣고 총점과 평균을 출력을 해주는 프로그램입니다.

Scanner sc = new Scanner(System.in);  //입력객체 생성
		
int[][] a; //정수 이차원 배열 변수 a 선언
		
System.out.print("학생 수를 입력하세요 : ");// 출력
		
int num = sc.nextInt(); // 입력
		
int[] b = new int[num];
//num 변수의 값만큼 배열 객체를 생성해서 정수형 배열 변수 b의 대입 
		
a = new int[num][4]; 
// 이차원 배열 변수 a에 첫번째 num만큼 배열 객체 생성 두번째 4만큼 배열객체를 생성해서 대입
		
for(int i =0;i<num;i++) 
//정수 변수 i를 선언후 0으로 초기화 변수 i가 num보다 작으면 반복 반복할때마다 i는 1씩증가
{	
	System.out.print((i+1)+"번째 학생 국어점수를 입력하세요 :");//출력
	a[i][0]=sc.nextInt(); //[0] 국어
    //a의 첫번째의 i번째 인덱스에 두번째의 [0]인덱스에 입력값 대입  국어 
	System.out.print((i+1)+"번째 학생 수학점수를 입력하세요 :");//출력
	a[i][1]=sc.nextInt();//[1] 수학
    //a의 첫번째의 i번째 인덱스에 두번째의 [1]인덱스에 입력값 대입  영어 
	System.out.print((i+1)+"번째 학생 영어점수를 입력하세요 :");//출력
	a[i][2]=sc.nextInt(); //[2] 영어
    //a의 첫번째의 i번째 인덱스에 두번째의 [2]인덱스에 입력값 대입  수학 
	a[i][3]=a[i][0]+a[i][1]+a[i][2];
    //a의 첫번째의 i번째 인덱스에 두번째의 [3]인덱스에 
    //국어 + 수학 + 영어 더한 값을 대입
}
		
for(int i = 0;i<num;i++)
//정수 변수 i를 선언후 0으로 초기화 변수 i가 num보다 작으면 반복 반복할때마다 i는 1씩증가
{
	System.out.println((i+1)+"번째 학생의 국어점수 : "
	+a[i][0]+"," + "수학점수 :" + a[i][1] 
	+ "," + "영어점수 :" 
	+ a[i][2] + ","+"총점수 : "
	+(a[i][3])
	+", 평균 : "
	+((float)(a[i][3])/num)
	+/**/", 등수 :" +b[i]);	// 출력
    
    // a[i][0] : 국어 a[i][1] : 수학 a[i][2] : 영어 a[i][3] : 학생마다 총첨
    // a[i][3] / num : 평균
}
		
		

※ 긴 글을 읽어 주셔서 감사합니다. Java를 계속 진행해 나가겠습니다.

 

★ 이글 이후에는 Java 함수에 대한 내용을 정리해서 처음부터 정리를 할 예정입니다. 많은 관심 부탁드립니다

반응형

댓글