백엔드개발자/JAVA: JAVA TPC 강의

변수와 배열 / 1차원,2차원 배열, 가변길이 배열

보혀니 2021. 9. 29. 18:12

변수와 배열

Q) 3개의 정수를 저장하기 위해 변수 3개를 만드는 방법?

1. 변수를 개별적(불연속)으로 만드는 방법

int a,b,c;

a=10;

b=20;

c=30;

a
b
c

-> 데이터 처리가 복잡함

-> 데이터 이동이 어렵다

-> 데이터를 한 개만 저장가능 하다.

 

 

2. 변수를 연속적으로 만드는 방법 (Array, 객체)

int[] a = new int[3]

 

위는 변수 a 임

얘는 이렇게 이루어져 있음.

     

  a[0]       a[1]       a[2]

배열의 길이 a.lenth = 3    

얘네 하나하나 변수임

 

-> 많은 수의 변수를 만들기가 용이하다.

-> 기억공간 접근이 쉽다(반복문 사용가능)

-> 데이터 이동이 쉽다.

   (데이터를 하나의 형태로 담아서 이동 가능함)

-> 서로 다른 데이터 타입을 저장할 수 없다. 

   (class랑 형태가 비슷한데, class는 다른 데이터 타입을 저장할 수 있음)

 

Array : 동일한 타입의 데이터를 여러 개 저장하기위한 연속적 메모리 구조

 

public class 데이터 이동 비교 {

	public static void main(String[] args) {
		// 4. 데이터를 이동하라 (변수 VS 배열)

		int a, b, c;
		a = 10;
		b = 20;
		c = 30;
		// a+b+c = ? 메서드 처리-> hap()

		hap(a, b, c);
		// 만약, 데이터가 3개가 아니라 10개,30개 라면?
		// 변수 선언 하나하나 다 해주고 매개변수 하나하나 다써주고.... 매우 번거롭고 귀찮음
		// 좀 더 효율적으로 하기위해 하나의 구조로 묶어서 이동시킨다 => Array

		int[] arr = new int[3];
		arr[0] = 10;
		arr[1] = 20;
		arr[2] = 30;

		hap1(arr);
	}

	public static void hap(int a, int b, int c) {
		int sum = a + b + c;
		System.out.println(sum);
	}

	public static void hap1(int[] x) {
		// 반복문 활용할 수 있다 - for, while
		int sum = 0;

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

 

 

 

 

 

1차원, 2차원 배열

 

1차원 Array

int[] a = new int[3]

 

위는 변수 a 임, 아래 그림은 a가 메모리에 저렇게 저장된다는 ...

     

  a[0]       a[1]       a[2]

=> int[] / int가 여러개인 구조

 

2차원 Array

int[][] a = new int[3][4];     (  [3][4]  => 3행 4열  )

1차원 배열이 여러개로 된 형태라고 생각하면 쉽다.

출처 JavaTPC강의자료

위의 저것이 메모리에는 어떻게 저장이 되냐면.....

출처 JavaTPC강의자료

 이렇게 차곡차곡 저장이 됨. 

+  a.lenth = 3

a[0].lenth = 4

a[1].lenth = 4

a[2].lenth = 4

 

 

가변길이 배열

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

a[0] = new int[3] ;

a[1] = new int[4] ;

a[2] = new int[5] ;

출처 내가 그림판으로 그림;

 

 

 

public class 배열 {

	public static void main(String[] args) {
		
		// 9개의 정수형 변수를 만들어라-> 2차원 구조로
		// ex) 행렬구조, 게임(맵) ....
		
		int[][] b = new int[3][3];
		b[0][0]=1;
		b[0][1]=2;
		b[0][2]=3;
		
		b[1][0]=1;
		b[1][1]=2;
		b[1][2]=3;
		
		b[2][0]=1;
		b[2][1]=2;
		b[2][2]=3;
		
		
		for(int i=0; i<b.length; i++) {
			for(int j=0; j<b[i].length; j++) {
				System.out.print(b[i][j]+ "\t");
			}
			System.out.println();
		}
//		아래 처럼 출력됩니다
//		1	2	3	
//		1	2	3	
//		1	2	3
		
		
		// 가변길이 배열
		// *
		// **
		// ***
		// ****
		// 만들어 보기
		int[][] star = new int[4][];
		// star[n] 에 1차원 배열을 생성해준다. 로 이해할 것.
		star[0] = new int[1];
		star[1] = new int[2];
		star[2] = new int[3];
		star[3] = new int[4];
		
		for(int i=0; i<star.length; i++) {
			for(int j=0; j<star[i].length; j++) {
				star[i][j]='*';
//				문자같은 경우 아스키코드로 나오기 때문에
//				System.out.print(star[i][j]);
				System.out.print((char)star[i][j]);
			}
			System.out.println();
		}

	}

}