데이터 과학

배열 (array) 본문

프로그래밍 언어론/JAVA 기초

배열 (array)

티에스윤 2022. 10. 23. 19:52

변수가 많아지거나 순차적인 자료구조 형태로 데이터를 입력하거나 출력할 때 배열이라는 방법을 사용합니다.

입력값이 많아지면 아래와 같은 형태로 선언을 해야 하는데

 

int a = 123;

int b = 456;

int c = 789;

....

 

변수 이름을 많이 만들어야 합니다. 

 

아파트에 물건을 배달하려고 한다면 김 아무개집, 박아무개집, 최아무개 집 이렇게 찾는 것보다는 층별로 되어 있어서 몇 동 몇 호 이렇게 부여하는 것이 편리하죠.  물론, 과거에는 동네마다 몇 집 안 되어서 주소 없이 찾아가도 되었겠지요. 

 

지금은 아파트에 101동 101호 이렇게 찾는게 편합니다. 어떻게 보면 아파트의 주소 구조는 2차원 배열이라고 볼 수 있겠습니다. 

배열은 0부터 표기합니다. 500개의 변수를 표현한다고 한다면 0부터 499까지 숫자를 표현하는 것입니다. 

 

 

선언 방법- 

 

<데이터 형>[ ] <변수 이름>;

<데이터 형> <변수 이름>[ ];

 

double[ ] data=new double[25];

double data[ ]=new double[25];

 

이렇게 변수 이름에 대괄호를 [ ] 붙이거나 데이터 형식에 대괄호를 [ ] 붙이거나 하면 됩니다. 위치는 상관없습니다.

 

double data[ ];

data =new double[25];

 

이렇게 선언부와 구현부로 나눠서 2줄로 선언을 해도 됩니다. 

 

이렇게 선언을 하면 참조형 데이터로 25개의 변수 방을 만들어 냅니다. 

물론, 0~24개까지 지정되겠죠. 

 

 

 

하나의 예제를 봅시다. 아래의 예제는 총 4개의 배열방을 만들어서 데이터를 1,2,3,4를 넣어 연산을 하는 예제입니다. 

결과는 같은데 배열을 선언하는 방법이 조금 다릅니다. 

 

Main.java 예제는 list라는 이름으로 int 정수형을 선언하여 각각 값을 할당하는 방법이며, array_test.java 예제는 { } 중괄호를 사용해서 값을 입력하는 방법인데, 배열방을 하나씩 만들어서 데이터를 넣어야하는 귀찮음으로 인해 후자를 많이 사용합니다. 

 

 

public class Main{
   public static void main(String[] args) {
      int list[]=new int[4];
      list[0]= 1;
      list[1]= 2;
      list[2]= 3;
      list[3]= 4;
      changeArray(list);
      System.out.println("The changed list is");
    for (int num=0; num <4 ; num++)
           System.out.println(list[num] + " ");
  }
    public static void changeArray(int[] b) {
      for (int i=0; i<4; i++)
      b[i]+=3;
  }
}

 

or

 

public class array_test{
   public static void main(String[] args) {
      int[] list= {1,2,3,4};
      changeArray(list);
      System.out.println("The changed list is");
    for (int num=0; num <4 ; num++)
           System.out.println(list[num] + " ");
  }
    public static void changeArray(int[] b) {
      for (int i=0; i<4; i++)
      b[i]+=3;
  }
}

 

결과는 

 

The changed list is



 

Main.java나 array_test.java예제는 3씩 증가가 된 결과가 나옵니다. 

 

 

array_test.java예제는 int[] list= {1,2,3,4}; 에서는 값을 list에 넣고 이 값은 changeArray(list);  메소드로 호출이 됩니다. 

list가 가리키고 있는 주소 값이 통째로 전달이 됩니다. pass by address입니다. 

 

list 주소 값은changeArray(int[] b) 에 가서 b에 전달을 하겠죠. 

결국은 list와 b는 같은 주소를 가지고 있습니다. 

b주소 값은 {1,2,3,4}를 가지고 있죠. 

 

 b[i]+=3;  b[0]이 가지고 있는 값은 1입니다. 여기서 3을 더하고, 

b[1]이 가지고 있는 값은 2입니다. 여기에 3을 더하고, 

b[2]이 가지고 있는 값은 3입니다. 여기에 3을 더하고, 

b[3]이 가지고 있는 값은 4입니다. 여기에 3을 더하고, 

 

for문을 빠져나옵니다. 

 

이후에  for (int num=0; num <4 ; num++) 구문이 실행되겠죠. 

결과는 list[num]에서 for문이 0부터 3까지 그 안에 있는 값이 출력되겠죠. 

 

도식화시키면 아래와 같습니다. 

 

 

int list[] = {1,2,3,4} 상황
int[] b=list;

 

 

 

public class array_sum{
public static void main(String args[]){
     int array[]=new int[2]; // Array는 클래스 명이므로 변수명이 될 수 없습니다. int sum1=0,sum2=0;
 for(int i=1; i<101; i++){
 if(i%2==1)
 array[0]+=i;
 else
 array[1]+=i;
 }
 //array[0] 홀수의 합을 구한것을 배열에 넣어줍니다.
 //array[1] 짝수의 합을 구한 것을 배열에 넣어줍니다. 
 System.out.println("홀수의합:"+array[0]); //0번째 배열에 있는 값 출력
 System.out.println("짝수의합:"+array[1]); //1번째 배열에 있는 값 출력
 }
}

 

 

 

결과: 

 

홀수의합:2500
짝수의합:2550

 

 

2차원 배열 

 

int[ ][ ] a= new int[3][2];

 

세로 column과 가로 row에 대한 배열로 표현입니다. 행렬(matrix) 구조이고 가장 많이 사용하는 배열입니다. 

2차원 배열의 크기는 세로줄로 그 크기가 결정됩니다. 

 

 

public class Narray {
 public static void main(String[] args) {
   int[][] a= { 
   {10,20},
   {30,40},
    {50,60}
                 };
 System.out.println("a[0][0]=" + a[0][0] + " a[0][1]= " + a[0][1]);
 System.out.println("a[1][0]=" + a[1][0] + " a[1][1]= " + a[1][1]);
 System.out.println("a[2][0]=" + a[2][0] + " a[2][1]= " + a[2][1]);
}
}

 

결과: 

 

a[0][0]=10 a[0][1]= 20
a[1][0]=30 a[1][1]= 40
a[2][0]=50 a[2][1]= 60

 

 

2차원 배열의 전체의 크기는 세로줄인 column의 개수입니다. 그래서 아래 예제를 보면 3이라는 결과가 나옵니다. 

 

 

public class Nlength {
 public static void main(String[] args) {
int[][] a= { 
{10,20,30,40,50},
{60,70,80,90},
{100}
};
System.out.println("전체 배열의 크기" + a.length);
System.out.println("a[0]의 요소수" + a[0].length);
System.out.println("a[1]의 요소수" + a[1].length);
 System.out.println("a[2]의 요소수" + a[2].length);
}
}

 

 

결과:

 

전체 배열의 크기3
a[0]의 요소수5
a[1]의 요소수4
a[2]의 요소수1

 

 

 

JAVA에서는 Arraylist 클래스가 지원이 되는데 이에 대한 배열을 적용하는 for문이 for-eachr 구문으로 변형을 해서 프로그래밍을 할 수 있습니다. 

 

https://tsyoon.tistory.com/83?category=1032234 

 

For each

자바 언어에서 ArrayList 가 나오면서 나온 문법이 For each 구문입니다. for문이 for(초기값; 종료 범위; 증감 연산) 이렇게 정의해서 사용하는데 for each 구문은 for( 요소 값: 배열 값) 이런 구조로 사용

tsyoon.tistory.com

 

'프로그래밍 언어론 > JAVA 기초' 카테고리의 다른 글

메소드 오버로딩  (7) 2022.11.05
생성자 (constructor)  (8) 2022.10.30
return에 대하여 이해하기  (0) 2022.09.10
자리배치 프로그램 -JAVA  (0) 2022.09.04
제어문  (5) 2022.09.04