본문 바로가기

개발언어/Java

| JAVA | 배열 / for문 & 향상된 for문 / 가비지 컬렉션

1. 배열

많은량의 데이터를 쉽게 평균을 구할 수 있고 , 배열을 사용함으로써 한번에 많은 변수를 처리.
한 배열에 동일한 종류의 다수 데이터를 순서대로 저장한다.

예제 ) 1-1

	int math = 20;
	int korean = 30;
	int science = 40;
	int english = 50;
	int society = 80;
	int japanese = 50;
	int sum = scores[0] + scores[1] +scores[2] +scores[3] 		+scores[4];
	int sum = 0;
	for (int i = 0; i < scores.length; i++) {
		sum = sum + scores[i];
    }

예제 1-1 과 같이 쓰는것은 하나의 카테고리 안에 다양하게 변수를 선언함으로써 , 비효율적 자료구조형이다.

예제 )1-2

	int[] score = new int[5];
	int count = score.length;
	System.out.println(score[0]);*/
	int[] score1 = new int[] {20,30,40,50,60};
	int[] score2 = {20,30,40,50,60};

예제 1-2 와 같이 배열을쓰면 1-1의 예제처럼 데이터가 추가될때의 하나하나 변수를 선언할 필요가 없어진다 !

2. for문 / 일반for문 & 향상된for문

일반 for 문에서는 조건문 초기값 , 조건 , 카운터 증가 방법을 설정 했지만 , 향상된 for문에서는 Java만의 foreach문을 사용하여
효율성을 높일 수 있다.
foreach
for each 구문을 사용할 때 주의해야 할 점은 for each 구문으로 컬렉션 데이터를 처리할 때, 컬렉션은 수정할 수 없다는 점이다.
( 인덱스 : 객체 ) 객체의 크기만큼 반복 횟수를 정한다. 일반 for문보다 foreach문이 유연성이 있는편이다.

예제) 2-1

	for (int value:moneyList2 ) {
	System.out.println(value);

3. Garbage Collection (가비지 컬렉션)

프로그램 개발시, 유효하지 않은 메모리 가비지(Garbage)가 발생하고 , C언어 에서는 free()라는 함수를 통해 직접
메모리를 해제 시켜주지만, Java 에서는 개발자가 메모리를 직접 해제 해주는 일이 없다.
Java는 가비지 컬렉션 (GC, garbage collection) 이라는 장치가 더 이상 사용되지 않는 메모리를 정리 해 준다.

연습문제

// 4-1 practice exercise

/*
다음 조건에 맞는 각 배열을 준비하는 프로그램을 작성하시오. 값의 초기화는 필요 없음.
1. int형 값을 4개 담을 수 있는 배열 points
2. double 형 값을 5개 담을 수 있는 배열 weights
3. boolean 형 값을 3개 담을 수 있는 배열 answers
4. String형 값을 3개 담을 수 있는 배열 names
*/

	int point[] = new int[4];
	double weight[] = new double[5];
	boolean answers[] = new boolean[3];
	String[] names = new String[3];
	System.out.println(answers);

// 4-2 practice exercise !

/*
다음 조건에 맞는 프로그램을 작성하시오.
1. 3개의 계좌 잔액 “121902”, “8302”, “55100” 이 담겨 있는 int 형 배열 moneyList 를 선언하시오
2. 그 배열의 요소를 1개씩 for 문으로 꺼내서 화면에 표시하시오
3. 같은 배열 요소를 foreach 문으로 1개씩 꺼내서 화면에 표시하시오
*/
	int moneyList1[] = {121902};
	int moneyList2[] = {8302};
	int moneyList3[] = {55100};
//formal
	for (int i = 0; i < moneyList1.length; i++) {
		System.out.println(moneyList1[i]);
	}
	for (int i = 0; i < moneyList2.length; i++) {
		System.out.println(moneyList2[i]);
	}
	for (int i = 0; i < moneyList3.length; i++) {
		System.out.println(moneyList3[i]);
	}
//향상된 for 문
	for (int value:moneyList1 ) {
		System.out.println(value);
	}
	for (int value:moneyList2 ) {
		System.out.println(value);
	}
	for (int value:moneyList3 ) {
		System.out.println(value);

//4-3 practice exercise !

/*
각 라인에서 발생하는 예외의 이름을 답하시오.
*/

	int [] counts = null;
	float[] heights = {171.3F , 175.0F};
		   
        System.out.println(counts[1]);         
		System.out.println(heights[2]);

// 값을 담고있는 수가 2개 이고 인덱스 값이 초과 또는 같기 때문에 에러발생!
잘못된 인덱스를 사용해서 배열에 접근했다는 것을 알려주기 위한 예외.
인덱스는 0보다 크거나 배열의 사이즈보다 작아야 한다.
  • 에러 호출 4-3-1
    System.out.println(counts[1]);
    "counts"가 null값이기 때문에 배열에 저장할 수 없습니다. (Cannot load from int array because "counts" is null)
    null이란 아무것도 없음을 의미합니다.(0또는 공백 : "")
    모든 참조유형에 대한 기본 값은 null입니다.
    null은 유효한 객체 인스턴스가 아니므로 할당 되는 메모리가 없습니다.
  • 에러 호출 4-3-2
    System.out.println(heights[2]);
    // 값을 담고있는 수가 2개 이고 인덱스 값이 초과 또는 같기 때문에 에러발생!
    잘못된 인덱스를 사용해서 배열에 접근했다는 것을 알려주기 위한 예외.
    인덱스는 0보다 크거나 배열의 사이즈보다 작아야 한다.

// 4-4 practice exercise !

/*
다음 4개의 조건에 맞는 “숫자 맞추기 퀴즈" 프로그램을 작성 하시오.
1. 3개짜리 int형 배열 numbers를 준비하시오. 이 때 초기화는 각각 “3”, “4”, “9”로 합니다.
2. 화면에 “1자리의 숫자를 입력 해 주세요" 라고 표시합니다
3. 다음 코드를 사용해 키보드로부터 숫자를 입력 받아, 변수 input 에
대입합니다
4. input값이 3, 4, 9 중 하나와 같다면 “정답!” 이라고 표시합니다
*/

int[] numbers = {3,4,9};
	System.out.println("한자리 숫자를 입력해 주세요 :");
Scanner sc = new Scanner(System.in);
int input = sc.nextInt();
	for (int num: numbers ) {
		if(input == num){
			System.out.println("정답!");
	}else {
		System.out.println("틀렸습니다!");
		}
	break;
}
728x90