본문 바로가기
👨‍💻 2. 웹개발_Back end/2-1 Java

[JAVA] 05-2 배열

by 달님🌙 2021. 7. 29.
반응형

 

sum += score의 원리

 

- 엑셀의 SUM(B1:B5)과 같은 의미

 

배열이 필요한 이유
	int score1 = 83;
	int score2 = 90;
	int score3 = 87;
//		.
//		.
//		.
	int score4 = 75; // 학생 수가 많아질수록 코드가 길어짐

 

배열 특징

- 배열은 같은 타입의 데이터만 저장 가능

- 이유 : 4byte 짜리 int형 배열에 8byte 짜리 double형 변수를 담으면 규칙에 틀어져서 주소를 못찾아감

- 이미 4byte 가 들어올 수 있는 공간만 제공이 된거라 8byte 변수를 넣을 수 없는것임

- 인덱스가 0부터 시작한다. 

- for문 사용할때 편리함

 

for(int i=0; i<3; i++) {
	sum += scores[i];
}

 

 

배열 생성

- 배열을 만드는 방법에는 값 목록으로 배열을 생성하는 방법과  new 연산자로 생성하는 방법, 2가지가 있다.

 

- 값 목록 vs new 연산자 배열 생성 방법 비교 

 

// 값 목록을 통해 생성
int[] scores = {83, 90, 87};

// new를 사용한 배열 생성
int[] scores;
scores = new int[3];

//틀린 배열 선언
int[] scores;
scores = {83, 90, 87}; // 한 줄에 값 목록을 선언해주는게 아니라면 무조건 new 연산자로 두 줄로 생성해야함


System.out.println("score[0] : " + scores[0]);
System.out.println("score[1] : " + scores[1]);
System.out.println("score[2] : " + scores[2]);

int sum = 0;
for(int i=0; i<3; i++) {
	sum += scores[i];
}
double avg = (double)sum / 3;
System.out.println("총합 : " + sum);
System.out.println("평균 : " + avg);

 

 

코드 중복 줄이고 재사용성 높이는법

 

-  scores 같은 배열을 여러 개 선언해야할 경우에는 이렇게 메소드를 따로 만들어주는게 좋다

public static void main(String[] args) {
  int[] scores;
  scores = new int[] {83, 90, 87};

  int sum1 = 0;
  for(int i=0; i<3; i++) {
    sum1 += scores[i];
  }
  System.out.println("총합 : " + sum1);

  int sum2 = add( new int[] {83,90,87});
  System.out.println("총합 : " + sum2);

  int[] arr = new int[] {75,70,65} ;
  int sum3 = add(arr);
  System.out.println("총합 : " + sum3);
  System.out.println();
  }

  private static int add(int[]/*타입*/ scores /*배열의 참조변수임 주소를 받음*/) {
    int sum = 0;
    for(int i=0; i<3; i++) {
      sum += scores[i];
    }
    return sum;
  }

 

** 아래 코드 분석하기

 int sum2 = add( new int[] {83,90,87});

- new int[] {83, 90, 87} 이 부분은 힙 메모리에 생성된다.

- 주소 값을 리턴해준다.

- 주소 값을 add 메소드로 보내주는 것이다.

 

** new 연산자로 배열 생성하는 예제

public class ArrayCreateByNewExample {
	public static void main(String[] args) {
		int [] arr1 = new int[3];
		for (int i=0; i<3; i++) {
			System.out.println("arr1[" + i + "] : " + arr1[i]);
		}
		System.out.println();
		
		
		arr1[0] = 10;
		arr1[1] = 20;
		arr1[2] = 30;
		
		for(int i=0; i<3; i++) {
			System.out.printf("arr1[%d] : %d\n",i,arr1[i]);
		}
		System.out.println();
		
		double[] arr2 = new double[3];
		for(int i=0; i<3; i++) {
			System.out.printf("arr2[%d] : %s\n",i,arr2[i]);
		}
		System.out.println();
		
		arr2[0] = 0.1;
		arr2[1] = 0.2;
		arr2[2] = 0.3;
		for(int i=0; i<3; i++) {
			System.out.printf("arr2[%d] : %s\n",i,arr2[i]);
		}
		System.out.println();
		
		String[] arr3 = new String[3];
		for(int i=0; i<3; i++) {
			System.out.printf("arr3[%d] : %s\n", i, arr3[i]);
		}
		System.out.println();
		
		arr3[0] = "1월";
		arr3[1] = "2월";
		arr3[2] = "3월";
		for(int i=0; i<3; i++) {
			System.out.printf("arr3[%d] : %s\n", i, arr3[i]);
		}	
	}
}

 

 

배열의 길이

 

int[] scores = {83, 90, 87};

int sum = 0;
for(int i=0; i<scores.length; i++) {
	sum += scores[i];
} System.out.println("총합 : " + sum);

double avg = (double) sum / scores.length;
System.out.println("평균 : " + avg);

 

ArrayIndexOutOfBoundsException 예외

- 배열의 인덱스를 초과해서 사용하면 발생하는 에러

 

 

public static void main(String[] args) 의미

 

- String[] args : 배열 선언이다. 이 부분을 제일 먼저 만든다

- args 에 주소 값이 담긴다

- main 메소드를 실행할 때  전달해준다

 

main 메소드의 매개변수

 

- 실행 시 특정 조건에 따른 실행을 명령하고 싶을 때 좋다.

- main문은 이미 실행이 시작될 때부터 다 잘 짜여져있다

 

public static void main(String[] args) { 

  System.out.println(args[0]);
  String version ="";
  
  if(args != null) {
  version = args[0];
    if(version.equals("kor")) {
      System.out.println("안녕하세요~ " + args[1]);
    } else {
      System.out.println("Hello~ " + args[1]);
    }
  }

  int var = add(7,3);
  System.out.println(var);
}

private static int add(int i, int j) {
  return 0;
}

 

 

** main 메소드 예제

if(args.length != 2) {
	System.out.println("값의 수가 부족합니다.");
 	System.exit(0); // 프로그램 강제 종료
	return; // 길이가 짧아서 메인 문 빠져나감
}

String strNum1 = args[0];
String strNum2 = args[1];

int num1 = Integer.parseInt(strNum1);
int num2 = Integer.parseInt(strNum2);

int result = num1 + num2;
System.out.println("합: " + result);
값의 수가 부족합니다.

 

 

JVM이 main 메소드를 찾아내는 원리

 

- 명령 프롬프트창에서 확인하기

C:\Dev211\Java_programing\Chapter05_ReferenceType>java -cp bin ch5_2_array.MainStringArrayArgument kor v2.2.2
안녕하세요~ v2.2.2

 

 

- Run Configurations... 이용하기

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

댓글