자바 스터디 4회차 미션

Yoojung Choi·2023년 2월 14일

JAVA 스터디

목록 보기
7/9

📖 아이유 프로필 출력하기

  • 학습 키워드
    • 클래스(Class)

[요구사항]

아래와 같이 출력해라.

이름 : 아이유
나이 : 30
대학생인가요? : true
몸무게 : 40.5
  • 사람(Person)이라는 클래스를 활용해라.
    (한 파일에 모든 코드를 작성하지 말고, Person이라는 클래스 파일을 별도로 생성해서 사용해라.)
  • 클래스 내에서 static 메서드는 사용하지마라.
    (public static void main(String[] args)는 제외)
//Main.java
public class Main {
    public static void main(String[] args) {
        Person iu = new Person("아이유", 30, true, 40.5);
        iu.printProfile();
    }
}
// Person.java
public class Person {
    String name;
    int age;
    boolean isStudent;
    double weight;
    public Person(String n, int a, boolean i, double w){
        name = n;
        age = a;
        isStudent = i;
        weight = w;
    }
    void printProfile(){
        System.out.println("이름 : "+name+"\n"+"나이 : "+age+"\n"+"대학생인가요? : "+isStudent+"\n"+"몸무게 : "+weight);
    }
}

📖 아이유 프로필 출력하기2

  • 학습 키워드
    • 클래스(Class)
    • 다중생성자

[요구사항]

아래 4가지 방식의 코드가 정상적으로 작동하게 Person 클래스를 만들어라.
(한 파일에 모든 코드를 작성하지 말고, Person이라는 클래스 파일을 별도로 생성해서 사용해라.)

public class Main {

  public static void main(String[] args) {
		// 1.
    	Person iu1 = new Person("아이유", **30**, true, **40.5**);
    	iu1.printProfile();

		// 2. 
		Person iu2 = new Person("아이유", **"30"**, true, **"40.5"**);
		iu2.printProfile();

         // 3. 
		Person iu3 = new Person("아이유", **30**, true, **"40.5"**);
		iu3.printProfile();

		// 4. 
		Person iu4 = new Person("아이유", **"30"**, true, **40.5**);
		iu4.printProfile();
  }
}

위 코드를 실행하면 아래와 같이 출력돼야 한다.

이름 : 아이유
나이 : 30
대학생인가요? : true
몸무게 : 40.5

이름 : 아이유
나이 : 30
대학생인가요? : true
몸무게 : 40.5

이름 : 아이유
나이 : 30
대학생인가요? : true
몸무게 : 40.5

이름 : 아이유
나이 : 30
대학생인가요? : true
몸무게 : 40.5
//Person.java
public class Person {
    String name;
    int age;
    boolean isStudent;
    double weight;
    public Person(String n, int a, boolean i, double w){
        this.name = n;
        this.age = a;
        this.isStudent = i;
        this.weight = w;
    }
    public Person(String n, String a, boolean i, String w){
        this.name = n;
        this.age = Integer.parseInt(a);
        this.isStudent = i;
        this.weight = Double.parseDouble(w);
    }
    public Person(String n, int a, boolean i, String w){
        this.name = n;
        this.age = a;
        this.isStudent = i;
        this.weight = Double.parseDouble(w);
    }
    public Person(String n, String a, boolean i, double w){
        this.name = n;
        this.age = Integer.parseInt(a);
        this.isStudent = i;
        this.weight = w;
    }
    void printProfile(){
        System.out.println("이름 : "+name+"\n"+"나이 : "+age+"\n"+"대학생인가요? : "+isStudent+"\n"+"몸무게 : "+weight+"\n");
    }
}

📖 계산기 만들기

  • 학습 키워드
    • 클래스(Class)
    • 메서드 오버로딩
    • 반복문 (for문)
    • ArrayList

[요구사항]

아래의 코드가 정상적으로 작동하게 Calculator 클래스를 만들어라.

public class Main {

  public static void main(String[] args) {
    Calculator calculator = new Calculator("제이슨");
		System.out.println("이 계산기는 " + calculator.getOwner() + "의 계산기입니다.");
    	System.out.println("3+4는 " + calculator.add(3, 4) + "입니다.");
		System.out.println("6-2는 " + calculator.minus(6, 2) + "입니다.");
		System.out.println("2*9는 " + calculator.multiply(2, 9) + "입니다.");
		System.out.println("9/4은 " + calculator.divide(9, 4) + "입니다.");
		System.out.println("9/4은 " + calculator.divide("9", "4") + "입니다.");
  }
}

위 코드를 실행하면 아래와 같이 출력돼야 한다.

이 계산기는 제이슨의 계산기입니다.
3+4는 7입니다.
6-2는 4입니다.
2*9는 18입니다.
9/4은 2.25입니다.
9/4은 2.25입니다.
//Caclulator.java
public class Calculator {
    public String owner;
    public Calculator(String name){
        this.owner = name;
    }

    public String getOwner(){
        return owner;
    }
    public int add(int a, int b){return a + b;}
    public int minus(int a, int b){return a - b;}
    public int multiply(int a, int b){return a * b;}
    public double divide(int a, int b){return (double)a/b;}
    public double divide(String a, String b){return Integer.parseInt(a) / Double.parseDouble(b);}

}

4회차 미션

🎯 책 대여하기

아래와 같이 작동하도록 코드를 작성해라.

대여할 책의 번호를 입력하세요.
1. 클린코드(Clean Code) - 대여 가능
2. 객체지향의 사실과 오해 - 대여 가능
3. 테스트 주도 개발(TDD) - 대여 가능
**1**
정상적으로 대여가 완료되었습니다.
대여할 책의 번호를 입력하세요.
1. 클린코드(Clean Code) - 대여 중
2. 객체지향의 사실과 오해 - 대여 가능
3. 테스트 주도 개발(TDD) - 대여 가능
**1**
대여 중인 책은 대여할 수 없습니다.
대여할 책의 번호를 입력하세요.
1. 클린코드(Clean Code) - 대여 중
2. 객체지향의 사실과 오해 - 대여 가능
3. 테스트 주도 개발(TDD) - 대여 가능
**2**
정상적으로 대여가 완료되었습니다.
****대여할 책의 번호를 입력하세요.
1. 클린코드(Clean Code) - 대여 중
2. 객체지향의 사실과 오해 - 대여 중
3. 테스트 주도 개발(TDD) - 대여 가능
  • 클래스 내에서 static 메서드는 사용하지마라.
    (public static void main(String[] args)는 제외)
  • Main(프로그램을 실행하는 코드가 존재하는 클래스), Book(책), Library(도서관)의 클래스를 만들어서 활용해라.
    (한 파일에 모든 코드를 작성하지 말고, 1개의 클래스마다 클래스 파일을 별도로 생성해서 사용해라.)
// Main.java
import java.util.Arrays;

public class Main{
    public static void main(String[] args){
        Library library = new Library(Arrays.asList(
                new Book("클린코드(Clean Code)"),
                new Book("객체지향의 사실과 오해"),
                new Book("테스트 주도 개발(TDD)")
        ));
        library.borrow();
        library.borrow();
        library.borrow();
        library.borrow();
    }
}
//Book.java
public class Book {
    public String bookName;
    public boolean canBorrow;
    Book(String name){
        this.bookName = name;
        this.canBorrow = true;
    }
    public void setStatus(boolean st){
        this.canBorrow = st;
    }
    public String getBookName(){
        return bookName;
    }
    public boolean getStatus(){
        return canBorrow;
    }
}
// Library.java
import java.util.Scanner;
import java.util.List;
public class Library {
    private List<Book> books;

    public Library(List<Book> books) {
        this.books = books;
    }

    public void borrow() {
        System.out.println("대여할 책의 번호를 입력하세요");
        for (int i = 0; i < books.size(); i++) {
            if (books.get(i).canBorrow == true) {
                System.out.println((i + 1) + ". " + books.get(i).bookName + " - 대여 가능");
            } else {
                System.out.println((i + 1) + ". " + books.get(i).bookName + " - 대여 중");
            }
        }
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        if (books.get(num - 1).canBorrow == true) {
            books.get(num - 1).setStatus(false);
            System.out.println("정상적으로 대여가 완료되었습니다.");
        } else {
            System.out.println("대여 중인 책은 대여할 수 없습니다.");
        }

    }
}

라이브러리 패키지의 class들(Scanner나 List) 어디서 호출해야할지 모르겠다. 그래서 그냥 사용되는 파일에서 선언해주고 있는데, c++을 공부했을 때는 main에서 다 호출했던 기억이 있다.

java의 class를 공부하면서 public static void main(String[] args){} 부분을 main에서만 구현해주면 되는 것을 배웠다! 이유는 이 부분이 어플리케이션이 실행되면 가장 먼저 실행되는 메인 메소드이기 때문인데, 이 것은 java와의 약속이라고한다. public인 이유는 모든 클래스에서 접근이 가능해야하기 때문이고, static영역에 선언해 프로그램이 실행되는 순간 메모리가 할당이 되고 프로그램이 종료될 때까지 메모리에 남아 있도록 한다.

스터디를 위한 이론 공부!

1개의 댓글

comment-user-thumbnail
2023년 2월 15일

미션 잘 수행해주셨네요👍 제가 의도한 대로 잘 구현해주셨습니다!! 지금 딱 봤을 때는 크게 피드백 드릴 부분이 없어서, 제가 추후에 올려드릴 코드 보고 비교해보시면서 추가적으로 공부해보시면 좋을 것 같아요! 혹시나 궁금한 점 생기시면 다음 블로그글 작성 시에 남겨주셔도 좋고, 카톡으로 질문 주셔도 좋습니다:)

답글 달기