# ✨ Java Day 2

YDC·2025년 6월 8일

우테코8기

목록 보기
2/23

🔁 Day 1 복습

시작이 복잡하다는 거 💡

public class Main {
	public static void main(String[] args) {
		
	}
}
  • String, int, boolean 이 있다는 거 ✍️
  • for (초기값; 조건; 증감) / while (조건) 이 있다는 거 🔁
  • Scannerimport java.util.Scanner; 해서
    Scanner scanner = new Scanner(System.in); 이렇게 사용해야 키보드 입력을 받을 수 있음 ⌨️
  • scanner.nextLine() 또는 nextInt() 등으로 입력 받음

✅ 전체 복습 코드: 구구단 출력

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("몇단?");
        int dan = scanner.nextInt();
        for (int i = 1; i <= 9; i++) {
            System.out.println(i + "x" + dan + "=" + (i * dan));
        }
    }
}

📚 오늘의 학습 내용 (Day 2)

  • Scanner 입력 실수 방지
  • 입력 + 조건문 실전 연습
  • 기능 선택 메뉴 만들기
  • switch문 사용 연습 (분기문 맛보기)
  • 백준 조건문 연습 문제 풀이 (브론즈 4~5)

🎯 입력과 조건을 활용한 미니 프로그램 구현

점수 입력 → 등급 출력 (조건문 실전)

  • 조건 설정:
    90점 이상 A, 80점 이상 B, 70점 이상 C, 60점 이상 D, 나머지 F
import java.util.Scanner;
class GradeChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("당신의 점수는 ? : ");
        int grade = scanner.nextInt();
        if (grade >= 90) {
            System.out.println("학생은 A 입니다.");
        } else if (grade >= 80) {
            System.out.println("학생은 B 입니다.");
        } else if (grade >= 70) {
            System.out.println("학생은 C 입니다.");
        } else if (grade >= 60) {
            System.out.println("학생은 D 입니다.");
        } else {
            System.out.println("학생은 F 입니다.");
        }
    }
}

📌 리뷰

너무 쉽다 쉬워~ 😆 근데 GPT에서 scanner.close(); 이걸 꼭 해야 한단다.

왜일까?

그 이유는 Scanner는 내부적으로 입력 스트림을 사용한다고 한다.
예를 들어 System.in 같은 키보드 입력 스트림은 운영체제의 자원을 가져다가 쓰는데,
작업이 끝나고 자원을 반환하지 않으면 리소스 누수로 이어져서 메모리 낭비, 성능 저하, 입력 충돌 등이 생길 수 있다고 합니다~

물론 이렇게 작은 프로그램에서는 티가 안 나지만,
멋진 프로그래머가 되기 위해서 좋은 습관으로 남겨놓자! 💪


🛠 기능 선택 메뉴 만들기 (입력 + 조건)

계산기! 🧮

기능 선택하면 떠오르는 건 계산기여서 간단한 계산기를 만들었다.

import java.util.Scanner;
class Calculate {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean running = true;
        while (running) {
            System.out.println("기능을 선택해주세요");
            System.out.println("1. 덧셈");
            System.out.println("2. 뺄셈");
            System.out.println("3. 곱셈");
            System.out.println("4. 나눗셈");
            System.out.println("5. 종료");
            System.out.print("원하는 기능 번호 입력: ");
            int choice = scanner.nextInt();
            if (choice == 5) {
                System.out.println("계산기를 종료합니다.");
                running = false;
            } else if (choice >= 1 && choice <= 4) {
                System.out.print("첫번째 숫자를 입력해 주세요: ");
                int number1 = scanner.nextInt();
                System.out.print("두번째 숫자를 입력해 주세요: ");
                int number2 = scanner.nextInt();
                if (choice == 1) {
                    System.out.println((number1 + number2));
                } else if (choice == 2) {
                    System.out.println((number1 - number2));
                } else if (choice == 3) {
                    System.out.println((number1 * number2));
                } else {
                    if (number2 == 0) {
                        System.out.println("0으론 나눌 수 없어용");
                    } else {
                        System.out.println(number1 / number2);
                    }
                }
            } else {
                System.out.println("잘못된 입력입니다");
            }
        }
        scanner.close();
    }
}

🧾 리뷰

생각보다 복잡하고 직접 하니까 {};의 지옥에 빠질 것만 같은 느낌이 든다... 😵

예전에 파이썬 하다가도 실수했는데 시스템 종료를 맨 마지막에 넣어서 순서가 꼬여서 종료가 안 됐었다.
그래서 이번엔 계산기 종료를 맨 처음 조건으로 넣었다. Good!

GPT한테 물어보니까 가독성이랑 switch, double을 쓰면 더 좋다길래 더 개선함.
분기문 switch 하려고 했는데, 다음 실습에도 계속 쓸 수 있을 것 같아서 기분 좋아짐 호호 😋


🔀 switch문 맛보기 (새로운 분기문 형태)

Switch란?

switch는 변수 값에 따라 분기가 되는 조건문이다.
if문과 비슷하지만, 여러 값을 비교할 때 좋다!

  • ✅ 가독성이 좋아지고
  • ✅ 의도가 명확해지며
  • ✅ 유지보수가 쉬워지고
  • jump table을 사용할 수 있어서 if-else보다 빠를 수 있음 ⚡️

❓ jump table이란?

조건 분기를 빠르게 처리하기 위해 사용하는 주소 목록이다.

  • 컴퓨터가 switch (값)처럼 특정 값에 따라 어디로 "점프"할지 미리 테이블에 만들어 둠
  • 일종의 "분기 주소 인덱스"

하나하나 검사 안 하고, 예를 들어 3이면 바로 case 3으로 점프!

📌 조건이 많을수록 if-else보다 훨씬 빠름!

단점:

  • 복잡한 조건 처리 불가 (>=, && 등은 안 됨)
  • Java 7부터는 문자열도 지원함

👉 주로 메뉴 선택, 명령 선택, enum 처리 등에 쓰기 좋음!

코드 💻

import java.util.Scanner;
class Calculate {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean running = true;
        while (running) {
            System.out.println("기능을 선택해주세요");
            System.out.println("1. 덧셈");
            System.out.println("2. 뺄셈");
            System.out.println("3. 곱셈");
            System.out.println("4. 나눗셈");
            System.out.println("5. 종료");
            System.out.print("원하는 기능 번호 입력: ");
            int choice = scanner.nextInt();
            if (choice == 5) {
                System.out.println("계산기를 종료합니다.");
                running = false;
            } else if (choice >= 1 && choice <= 4) {
                System.out.print("첫번째 숫자를 입력해 주세요: ");
                double number1 = scanner.nextInt();
                System.out.print("두번째 숫자를 입력해 주세요: ");
                double number2 = scanner.nextInt();
                switch (choice) {
                    case 1:
                        System.out.print(number1 + number2);
                        break;
                    case 2:
                        System.out.print(number1 - number2);
                        break;
                    case 3:
                        System.out.print(number1 * number2);
                        break;
                    case 4:
                        if (number2 == 0) {
                            System.out.println("0으론 못나눠요");
                        } else {
                            System.out.print(number1 / number2);
                        }
                        break;
                }
            } else {
                System.out.println("잘못된 입력입니다");
            }
        }
        scanner.close();
    }
}

💭 전체 리뷰

  • double은 그냥 소수점을 쓰게 해주는 int
  • switch는 파이썬에서 안 써봐서 신기했고, 이런 기능이 있다는 걸 처음 느낌
  • jump table 얘기 들으니 "역시 나중에 가면 최적화도 중요하구나..." 싶고
  • 나중엔 나도 "메모리가... 성능이..." 하겠지? ㅋㅋㅋㅋ 🤣
  • switch 안에 if 쓰는 것도 좀 신기했음

파이썬 경험 덕분에 자바가 그렇게 어렵다는 생각은 안 들었지만,
자바는 뭔가 할 것도 많고, 세팅도 많고, 신경 쓸 게 많다는 느낌 🧱

아직도 public static이 뭔지는 모르겠지만...
중요한 건 오늘도 해냈다는 것!!! 🔥


🎉 2일차도 끝!!! 백준 풀러 가자!!! 💻💪

profile
초심자

0개의 댓글