4_13_Java 정리
TIP
1. Quiz_3_5 리뷰
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. 배열 초기화
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) 이라는 장치가
더 이상 사용되지 않는 메모리를 정리 해 준다
Author And Source
이 문제에 관하여(4_13_Java 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@emb220117/413Java-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)