지금을 사는 사람

혼자 공부하는 자바 2주차 본문

스터디/혼공학습단

혼자 공부하는 자바 2주차

지금회 2024. 1. 8. 18:10
728x90

기본미션

  • p.142 직접 해보는 손코딩(switch문) 실행 후 결과 화면 캡쳐하기

선택미션

  • p.202 05-2 확인 문제 6번 풀고 정리하기
package sec02.verify.exam06;

import java.util.Scanner;

public class Exam06 {
	public static void main(String[] args) {
		boolean run = true; // while문을 종료시키기 위해 사용하는 변수

		int studentNum = 0;
		int[] scores = null;

		Scanner scanner = new Scanner(System.in);

		while (run) {
			System.out.println("--------------------------------------------------------------");
			System.out.println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료");
			System.out.println("--------------------------------------------------------------");
			System.out.print("선택> ");

			int selectNo = Integer.parseInt(scanner.nextLine());

			if (selectNo == 1) {
				System.out.print("학생수> ");
				studentNum = Integer.parseInt(scanner.nextLine());
				scores = new int[studentNum]; // Scanner로 학생수를 받아 배열 할당
			} else if (selectNo == 2) {
				for (int i = 0; i < scores.length; i++) { // for문으로 배열을 순환하며 점수 입력
					System.out.print("scores[" + i + "]> ");
					scores[i] = Integer.parseInt(scanner.nextLine());
				}
			} else if (selectNo == 3) {
				for (int i = 0; i < scores.length; i++) { // for문을 순환하며 입력된 값 출력
					System.out.println("scores[" + i + "]: " + scores[i]);
				}
			} else if (selectNo == 4) {
				int max = 0;
				int sum = 0;
				double avg = 0;
				for (int i = 0; i < scores.length; i++) {
					max = (max < scores[i]) ? scores[i] : max; // 3항 연산자 사용하여 최고 값 갱신
					sum += scores[i];
				}
				avg = (double) sum / studentNum; // 평균을 구하기 위해 double로 캐스팅
				System.out.println("최고 점수: " + max);
				System.out.println("평균 점수: " + avg);
			} else if (selectNo == 5) {
				run = false;
			}
		}

		System.out.println("프로그램 종료");
	}
}

 

Chapter 04 : 조건문과 반복문

조건문

  • 조건문은 조건식에 따라 다른 실행문을 실행하기 위해 사용
  • if문, switch

if문

  • 조건식의 결과에 따라 블록 실행 여부 결정
  • 조건식이 true면 if 문 실행

if-else문

  • if문을 확장한 형태
  • if 문의 조건을 만족하지 않으면 else 문 실행

if-else if-else문

  • if-else문을 확장한 형태
  • 여러개의 조건을 처리할 필요가 있을 때 사용

switch문

  • 변수가 어떤 값을 갖느냐에 따라 실행문이 선택됨

반복문

  • 어떤 작업을 반복적으로 실행해야할 때 사용

for문

  • 반복 횟수를 알고 있을 때 사용
  • 주어진 횟수만큼 실행문을 반복

while문

  • 조건에 따라 반복할 때 주로 사용
  • 조건식이 true일 경우 계속해서 반복

do-while문

  • do 블록을 먼저 실행 하는 것 외에는 while문과 동일

break문

  • for, while, do-while문에서 실행을 중지할 때 사용

continue문

  • 반복문을 종료하지 않고 계속 반복을 수행

 

Chapter 05 : 참조 타입

참조 타입과 참조 변수

  • 자바의 타입은 primitive type과 reference type으로 구분
  • primitive type : byte, char, float, boolean ...
  • reference type : array, enum, class ...

기본 타입과 참조 타입

  • 기본 타입은 실제 값을 변수에 저장
  • 참조 타입은 값의 메모리 번지를 변수 안에 저장

메모리 사용 영역

  • JVM은 운영체제에서 메모리 영역을 할당받아 그림과 같이 구분하여 사용
  • 메소드 영역 : JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역. static field, constant, method, constructor 등을 저장
  • 힙 영역 : 객체와 배열이 생성되는 영역. 참조하는 변수나 필드가 없다면 Garbage Collector가 자동으로 제거
  • 스택 영역 : 메소드 호출 시 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거. method 내부에서 생성되는 로컬 변수 스택은 변수에 값이 최초로 저장 될 때 생성되었다가 블록을 벗어나면 스택에서 제거

참조 변수의 ==, != 연산

  • 참조변수에서는 동일한 객체인지를 비교하는 것이기 때문에 해당 연산은 번지값을 비교하는

null과 NullPointerException

  • 참조 타입 변수는 객체를 참조하지 않는 뜻인 null 값을 가질 수 있음
  • null로 초기화된 변수는 스택에 생성됨
  • 참조변수가 null 값을 가지고 있을 때 참조 타입을 참조하게되면 NullPointerException(예외)가 발생

배열

배열이란 ?

  • 같은 타입의 데이터를 연속된 공간에 나열하고 각 데이터에 Index를 부여해 놓은 자료구조
  • 인덱스는 0부터 시작 
  • score[인덱스] // 해당 인덱스의 값을 구할 수 있다.

배열 선언

타입[] 변수; // 방법 1
타입 변수[]; // 방법 2
int[] intArray;
int intArray[];
  • 배열은 참조 변수에 속하기 때문에 객체로 취급되며 힙 영역에 생성됨
  • 참조할 객체가 없다면 배열 변수는 null 값으로 초기화

배열 생성

  • 값 목록으로 배열 생성
    타입[] 변수 = {값0, 값1, 값2, ...};
    String[] names = {"홍길동", "고길동", ...};
  • 값 목록으로 배열을 생성하면 이후 실행문에서 중괄호를 사용한 배열 생성이 허용되지 않음
  • 값이 나중에 결정되어야 한다면 new 연산자를 사용할 것
    타입[] 변수 = new 타입[길이];
    int[] intArray = new int[5];
    
    // 배열을 매개 변수로 사용하는 함수가 있을때에도 new를 사용
    int add(int[] scores) {...}
    
    int result = add( {95, 85, 0} ); // 컴파일 에러
    int result = add( new int[] {95, 85, 0} );

배열의 길이

배열 변수.length;
int[] intArray = { 10, 20, 30 };
int num = intArray.length;
intArray.length = 10; // length는 읽기 전용으로 오류 발생

 

 

다차원 배열

  • 수학의 행렬과 같은 방식의 2차원 배열 구성도 가능
    int[][] scores = new int[2][3];

배열 복사

  • 배열은 한번 생성하면 크기 변경 불가
  • 더 많은 공간이 필요하다면 더 큰 배열을 만들고 복사해야 함 
  • int[] oldIntArray = { 1, 2, 3 }; int[] newIntArray = new int[5]; System.arraycopy(oldIntArray, 0, newIntArray, 0, oldIntArray.length);

향상된 for문

  • 배열이나 컬렉션을 좀 더 쉽게 처리하기 위해 향상된 for문을 제공
  • 변수와 증감식을 사용하지 않음

열거 타입

  • 열거 상수 중에서 하나의 상수를 저장하는 타입
  • 월~일과 같은 한정 된 값을 상수로 저

열거 타입 선언

  • 열거 타입을 선언하려면 해당 이름으로 소스파일(.java) 파일이 필요
  • 열거 타입 이름은 관례적으로 첫 글자를 대문자로 하고 나머지는 소문자로 구성
    public enum Week { MONDAY, TUESDAY, ... }

열거 타입 변수 사용

Week today = Week.SUNDAY;

 

728x90