달리기반 및 발제 느낀점

최길중·2026년 1월 15일

홍순구 튜터님의 달리기 강의를 따라가면서 공부하고 있다.
step2에 캡슐화 단계 문제가 있어 부족한 부분이니 풀기로 했다.

[난이도: 하] 🧑‍🎓 안전한 학생 정보 클래스

  1. Student 클래스를 만드세요.
  2. 속성: name(이름)과 score(점수)를 모두 private 으로 선언하세요.
  3. 생성자: 이름만 받아서 초기화하고, 점수는 0으로 설정하세요.
  4. 게터/세터:
    • getName(): 이름을 반환하는 게터.
    • getScore(): 점수를 반환하는 게터.
    • setScore(int score): 점수를 설정하는 세터. 단, 점수는 0점 이상 100점 이하일 경우에만 설정되도록 유효성 검사 로직을 추가하세요.
  5. main 메서드에서 학생 객체를 만들고, setScore()를 통해 올바른 점수와 잘못된 점수(예: 101점)를 모두 넣어보며 테스트해보세요.
package kr.spartaclub.running.day01.chapter16;
public class Student {

    private String name;
    private int score;

    public Student(String name) {
        this.name = name;
        this.score = 0;
    }
    public String getName() {return name;}

    public int getScore() {return score;}

    public void setScore(int score) {
        if (score < 0 || score > 100) {
            throw new IllegalArgumentException("점수는 0~100 사이만 가능합니다.");
        }
        this.score = score;
    }

    public static void main(String[] args) {
        Student sd = new Student("길중");

        sd.setScore(89);
        System.out.println("점수: " + sd.getScore());

        try {
            sd.setScore(-1);
            System.out.println("점수: " + sd.getScore());
        }catch (RuntimeException e){
            System.out.println(e.getMessage());
        }

        sd.setScore(100);
        System.out.println("점수: " + sd.getScore());
    }
}

[난이도: 중] 🏦 철통보안 은행 계좌

  1. SecureAccount 클래스를 만드세요.
  2. 속성: accountNumber(계좌번호), owner(예금주), balance(잔액), password(비밀번호)를 모두 private 으로 선언하세요.
  3. 생성자: 계좌번호, 예금주, 초기 잔액, 비밀번호를 받아 초기화하세요.
  4. 메서드:
    • deposit(int amount): 입금 메서드. (입금액은 0보다 커야 함)
    • withdraw(int amount, String inputPassword): 출금 메서드. 비밀번호가 일치하고, 잔액이 충분할 때만 출금이 성공해야 합니다.
    • getBalance(String inputPassword): 잔액 조회 메서드. 비밀번호가 일치할 때만 잔액을 return 하고, 틀리면 -1을 return 하세요.
  5. main 메서드에서 계좌를 만들고, 비밀번호를 맞게/틀리게 입력하며 입금, 출금, 잔액 조회를 모두 테스트해보세요.
package kr.spartaclub.running.day01.chapter17;

public class SecureAccount {

    private String accountNumber; // 계좌번호
    private String owner;         // 예금주
    private int balance;          // 잔액
    private String password;      // 비밀번호

    public SecureAccount(String accountNumber, String owner, int balance, String password) {
        this.accountNumber = accountNumber;
        this.owner = owner;
        this.balance = balance;
        this.password = password;
    }

    // 입금
    public void deposit(int amount) {
        if (amount > 0) {
            System.out.println("입금: "+amount);
            balance += amount;
        }
        else {System.out.println("입금액은 0보다 커야 합니다.");}
    }

    //출금
    public boolean withdraw(int amount, String inputPassword) {
        if (!password.equals(inputPassword)) {
            System.out.println("비밀번호가 일치하지 않습니다.");
            return false;
        }
        if (amount <= 0) {
            System.out.println("출금액은 0보다 커야 합니다.");
            return false;
        }
        if (balance < amount) {
            System.out.println("잔액이 부족합니다.");
            return false;
        }
        System.out.println("출금: "+amount);
        balance -= amount;
        return true;
    }

    // 잔액 조회
    public int getBalance(String inputPassword){
        if(password.equals(inputPassword)){
            System.out.println("잔액: "+balance);
            return balance;
        }else {
            return -1;
        }
    }

    public static void main(String[] args) {
        SecureAccount secureAccount = new SecureAccount("97369822852","최길중",0,"456123");
        secureAccount.deposit(90000); // 입금
        secureAccount.withdraw(9000,"456123"); // 출금
        secureAccount.getBalance("456123"); // 잔액 조회

    }
}

[난이도: 상] 🎬 영화 예매 시스템

  1. Movie 클래스를 만드세요.
  2. 속성: title(제목-public), totalSeats(총 좌석 수-private), bookedSeats(예약된 좌석 수-private).
  3. 생성자: 제목과 총 좌석 수를 받아 초기화하세요.
  4. 메서드:
    • bookSeat(): 좌석을 예매하는 public 메서드. 이 메서드 내부에서는 isBookable() 이라는 private 메서드를 호출해서 예매 가능한지 먼저 확인해야 합니다. 예매에 성공하면 bookedSeats를 1 증가시키고 "예매 성공!"을 출력하세요.
    • isBookable(): 남은 좌석이 있는지 확인하는 private 메서드. (totalSeats > bookedSeats)
    • getAvailableSeats(): 현재 예매 가능한 좌석 수를 계산해서 반환하는 public 메서드.
  5. main 메서드에서 총 10석짜리 영화를 만들고, 11번 예매를 시도해보며 캡슐화된 로직이 잘 동작하는지 확인해보세요.
package kr.spartaclub.running.day01.chapter18;

public class Movie {
    public String title;
    private int totalSeats; // 총 좌석 수
    private int bookedSeats; // 예약된 좌석 수

    private Movie(String title, int totalSeats){
        this.title=title;
        this.totalSeats=totalSeats;
    }

    // 좌석 예매
    public void bookSeat(){
        if (isBookable()==true){
            System.out.println("예매 성공!!");
            bookedSeats++;
        }
        else{
            System.out.println("자리가 부족합니다.");
        }
    }

    // 예매 가능 여부
    private boolean isBookable(){
        if(totalSeats>bookedSeats){
            return true;
        }else {
            return false;
        }
    }

    public int getAvailableSeats(){
        return totalSeats-bookedSeats;
    }

    public static void main(String[] args) {
        Movie movie = new Movie("아바타",10);

        for(int i=1; i<=11; i++){
            System.out.println(i + "번째 예매 시도");
            movie.bookSeat();
            System.out.println("남은 좌석: " + movie.getAvailableSeats());
        }
    }

}

자바 발제 느낀점

이번 자바 발제를 풀면서 “개념을 제대로 잡고, 문제를 많이 풀어봐야 실력이 는다”는 확신이 생겼다. 다들 어려워하는 람다, 스트림, 제네릭은 물론이고, 그 외에도 아직 부족한 부분이 많다. 강의도 아마 6~7번은 반복해서 본 것 같은데, 그래도 완전히 이해했다고 말하긴 어렵다.

그래서 이제는 강의만 보는 데서 멈추지 않고, 문제를 계속 풀면서 감을 잡아보려고 한다. 수학도 결국 같은 메커니즘이다. 근의 공식을 아무리 외워도 문제에 적용해봐야 내 것이 되고, 미적분이나 기하,벡터 도 결국 반복해서 풀어봐야 실력이 오른다.

계산기를 한 번 더 풀어보려고 했으나 해설 강의가 있으니 보고 익히고 다른 발제를 풀어보고 싶은 궁금증도 있어 커머스 과제로 갔습니다.

이번엔 진짜 칼 갈아서 발제 완벽하게 끝낼 겁니다.

profile
개발자가 되고 싶어요

0개의 댓글