4_13_Java 정리

37283 단어 JavaJava

TIP

1. Quiz_3_5 리뷰

어제 int로 selected 받는 방식도 좋지만 사용자가 문자 입력했을때 오류발생한다

따라서 String으로 받는 아래 코드로 수정!

package com.jinho.Lesson03;

import java.util.Scanner;

public class code02 {
    public static void main(String[] args) {

        System.out.println("[메뉴] 1:검색 2:등록 3:삭제 4:변경 ");
        Scanner sc = new Scanner(System.in);
        String selected = sc.nextLine();
        switch (selected) {
            case "1":
                System.out.println("검색합니다");
                break;
            case "2":
                System.out.println("등록합니다");
                break;
            case "3":
                System.out.println("삭제합니다");
                break;
            case "4":
                System.out.println("변경합니다");
                break;
            default:
        }


    }
}

2. scanf 입력하는 방법 2가지

package com.jinho.Lesson03;

import java.util.Scanner;

public class code1 {
    public static void main(String[] args) {

        int selected1;
        int selected2;
        int selected3;
        int selected4;

        //입력하는 방법 1
        selected1 = new Scanner(System.in).nextInt();
        selected2 = new Scanner(System.in).nextInt();

        //입력하는 방법 2 (성능상 조금더 이득이 있음)
        Scanner sc = new Scanner(System.in);
        selected3 = sc.nextInt();
        selected4 = sc.nextInt();

        //출력 확인
        System.out.println(selected1);
        System.out.println(selected2);
        System.out.println(selected3);
        System.out.println(selected4);


    }
}

클래스를 활용해서 하는 방법2가 조금더 성능상으로 좋다 그러므로 이걸 위주로 쓰자


배열

1. 배열 초기화

다른 변수들은 초기화 안하고 컴파일 하면 오류나고
배열은 자동으로 초기화 된다

  • int 형 배열 --> 0
  • String 형 배열 --> null
  • boolean 형 배열 --> false
  • double 형 배열 --> 0.0
  • long 형 배열--> 0L
 package com.jinho.Lesson03;

public class code04 {
    public static void main(String[] args) {

        //c언어에서는 초기화 안해도 실행은 되고 쓰레기값이 들어가지만 자바는 초기화 안하면 오류난다

        int x;
        //System.out.println(x); 오류난다 따라서 변수는 무조건 초기화 해야한다
        //다만 배열은 자동으로 전부 0으로 초기화 한다
        int[] score = new int[5];
        System.out.println(score[0]);

    }

}

2. 배열 크기 반환

자바에는 배열의 크기를 반환해주는 기능이 있다 -> 배열.length

package com.jinho.Lesson03;

public class code03 {
   public static void main(String[] args) {

       //c언어 에서 배열 int score[5]; 만들기와 동일함

       int[] score;        //배열 변수 선언
       score = new int[5]; //요소의 작성과 대입
       int count = score.length; //배열 크기 반환

       score[0] = 1;

       System.out.println(score[0]);
       System.out.println(count);

   }
}

string 의 문자열은 공백,문자 할거없이 1문자로 카운트한다.

package com.jinho.Lesson03;

public class code10 {
   public static void main(String[] args) {
       //string 의 문자열은 공백,문자 할거없이 1문자로 카운트한다

       String s = "test test";
       int count = s.length();

       System.out.println(count); //9
   }
}

2차원 배열의 크기는 어떻게 될까? 아래 예제로 확인해보자

package com.jinho.Lesson03;

public class code11 {
   public static void main(String[] args) {
       int[][] scores = {{10, 20, 30}, {30, 40, 50}};

       System.out.println(scores.length);
       System.out.println(scores[0].length);
   }
}

즉 scores.length 는 {10,20,30} 를 한 묶음을 1개로 보는것이다

3. 생략 기법

배열에 값 넣을때 ( new int[] )는 생략해도 문제가 없다
단) " int [] 배열이름 " 과 같이 쓸때만 생략 가능하다

package com.jinho.Lesson03;

public class code05 {
   public static void main(String[] args) {

       //생략기법

       int[] score1 = new int[]{20, 30, 40, 50};
       int[] score2 = {20, 30, 40, 50};

       for (int i = 0; i < score1.length; i++) {
           System.out.printf("%d  ", score1[i]);
       }
       System.out.println("");
       for (int i = 0; i < score2.length; i++) {
           System.out.printf("%d  ", score2[i]);
       }

   }
}

4. 예외 발생

배열의 크기를 넘는 요소를 사용할때 예외 발생한다


package com.jinho.Lesson03;

public class code06 {
    public static void main(String[] args) {

        //범위를 벗어난 요소를 이용할 때 예외발생  --> 에러!!
        int[] names = new int[3];
        names[3] = 10;
        System.out.println(names[3]);
    }
}

5. for each 문

일반적인 for문을 사용해도 되지만
배열 에서 처음부터 끝까지 모두 사용하는 경우는 for each문 사용하는것이 더 편하다

for each를 사용한 예제

package com.jinho.Lesson03;

public class code07 {
    public static void main(String[] args) {
        //배열 사용하면 앞에서 변수로 여러개 선언한 프로그램을 훨씬 간단하게 작성가능
        int[] scores = {20, 30, 40, 50, 80};
        int sum = 0;

        /*
        일반 for 문
        for (int i = 0; i < scores.length; i++) {
            sum += scores[i];
        }
         */

        //for each 문
        //for 문 돌면서 value 에 scores[0]~scores[4] 가 하나씩 들어간다
        //무조건 처음부터 끝가지 다 돌아야만한다
        for (int value : scores) {
            sum += value;
        }

        int avg = sum / scores.length;
        System.out.println("총점 " + sum);
        System.out.println("총점 " + avg);

    }
}

6. 배열의 메모리

자바에서 배열은 c언어에서 malloc으로 동적할당한것과 비슷한 느낌으로 진행된다

  • 배열 -> reference type 이고
  • int -> primitive type 이다

아래 코드를 실행하면 무슨 값이 나올까?

package com.jinho.Lesson03;

public class code08 {
    public static void main(String[] args) {
        //과정 아래 그림 참고
        int [] a = {1,2,3};
        int [] b;
        b = a;
        b[0] = 100;
        System.out.println(a[0]);


        //즉 배열은 reference type 이다
        // int 등등은 primitive type 이다
    }
}

정답은 100이 출력된다

코드의 과정을 그림으로 표시하면 아래와 같다.

추가적으로 아래와 같은 상황( a에 null 대입한 상황 ) 에서는 어떻게 될까?


package com.jinho.Lesson03;

public class code08 {
    public static void main(String[] args) {
        //과정 아래 그림 참고
        int [] a= {1,2,3};
        int [] b;
        b=a;
     
        a = null; //아무런 메모리도 가리키지않게됨
        a[0] = 10; //오류발생
        System.out.println(a[0]);
    }
}

위 그림에서 이해 할수있듯이 결과는 오류가 발생된다

7. 가비지 컬렉션(gc)

new 로 확보된 요소들은 보통의 변수와 다르기 때문에, 블록이 끝나도 수명이 다하지 않는다

블록 내에서 생성된 배열은 이 후 어떤 방법으로도 읽거나 쓸 수 없고 메모리를 차지하고 있다.

즉 사실상 메모리 내의 쓰레기(garbage) 가 된다.

원래 이렇게 사용하지 않게 된 메모리는 프로그래머가 정리를 하여야 한다.

하지만 Java는 가비지 컬렉션 (GC, garbage collection) 이라는 장치가
더 이상 사용되지 않는 메모리를 정리 해 준다


좋은 웹페이지 즐겨찾기