클래스란?
- 클래스는 실생활에서 사용되는 개념을 코드로 표현하기 위한 수단
- 클래스는 속성과 행위를 가짐
연습 문제
- 아이유 프로필 출력하기
package jscode4;
public class Person {
private final String name;
private final int age;
private final boolean isCollegeStudent;
private final double weight;
public Person(String name, int age, boolean isCollegeStudent, double weight) {
this.name = name;
this.age = age;
this.isCollegeStudent = isCollegeStudent;
this.weight = weight;
}
public void printProfile() {
System.out.println("이름 : " + this.name);
System.out.println("나이 : " + this.age);
System.out.println("대학생인가요? : " + this.isCollegeStudent);
System.out.println("몸무게 : " + this.weight);
System.out.println();
}
}
- 이름, 나이, 대학생인지, 몸무게의 속성을 가지고 프로필을 출력하는 행위를 가진 Person 클래스를 생성
public static void main(String[] args) {
Person person = new Person("아이유", 30, true, 40.5);
person.printProfile();
}
- 결과
- 아이유 프로필 출력하기2
요구 사항 : 아래 코드가 출력되도록 프로그래밍
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();
}
- 코드
package jscode4;
public class Person {
private final String name;
private final int age;
private final boolean isCollegeStudent;
private final double weight;
public Person(String name, int age, boolean isCollegeStudent, double weight) {
this.name = name;
this.age = age;
this.isCollegeStudent = isCollegeStudent;
this.weight = weight;
}
public Person(String name, String age, boolean isCollegeStudent, String weight) {
this.name = name;
this.age = Integer.parseInt(age);
this.isCollegeStudent = isCollegeStudent;
this.weight = Double.parseDouble(weight);
}
public Person(String name, String age, boolean isCollegeStudent, double weight) {
this.name = name;
this.age = Integer.parseInt(age);
this.isCollegeStudent = isCollegeStudent;
this.weight = weight;
}
public Person(String name, int age, boolean isCollegeStudent, String weight) {
this.name = name;
this.age = age;
this.isCollegeStudent = isCollegeStudent;
this.weight = Double.parseDouble(weight);
}
public void printProfile() {
System.out.println("이름 : " + this.name);
System.out.println("나이 : " + this.age);
System.out.println("대학생인가요? : " + this.isCollegeStudent);
System.out.println("몸무게 : " + this.weight);
System.out.println();
}
}
- 첫번째 연습 문제와 동일하지만 나이와 몸무게가 String 타입이여도 올바른 프로필을 출력하도록 생성자 오버로딩을 해야한다.
- 결과
- 계산기 만들기
요구사항 : 아래 코드가 정상적으로 작동하도록 프로그래밍
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") + "입니다.");
}
- 코드
package jscode4;
public class Calculator {
private final String owner;
public Calculator(String owner) {
this.owner = owner;
}
public String getOwner() {
return this.owner;
}
public int add(int value1, int value2) {
return value1 + value2;
}
public int minus(int value1, int value2) {
return value1 - value2;
}
public int multiply(int value1, int value2) {
return value1 * value2;
}
public double divide(double value1, double value2) {
return value1 / value2;
}
public double divide(String value1, String value2) {
return Double.parseDouble(value1) / Double.parseDouble(value2);
}
}
- 계산기 주인의 이름을 속성으로 가지고 덧셈, 뺄셈, 나눗셈, 곱셈의 연산을 행위로 하는 Calculator 클래스를 정의
- 나눗셈의 파라미터로 String 타입의 데이터를 받을 수 있으므로 메서드 오버로딩
- 결과
- 학생들의 국어, 영어 점수 출력하기
요구사항 : 아래와 같이 출력
이름 : 제이슨
국어 : 87
영어 : 92
이름 : 레이첼
국어 : 82
영어 : 92
이름 : 리사
국어 : 92
영어 : 88
- 코드
package jscode4;
public class Student {
private final String name;
private final int koreanScore, englishScore;
public Student(String name, int koreanScore, int englishScore) {
this.name = name;
this.koreanScore = koreanScore;
this.englishScore = englishScore;
}
public void printInfo() {
System.out.println("이름 : " + this.name);
System.out.println("국어 : " + this.koreanScore);
System.out.println("영어 : " + this.englishScore);
System.out.println();
}
}
- 학생 이름, 국어 성적, 영어 성적을 속성으로 하고 이를 출력하는 행위를 가진 Student 클래스 선언
- 결과
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
Student jason = new Student("제이슨", 87, 92);
Student rachel = new Student("레이첼", 82, 92);
Student lisa = new Student("리사", 92, 88);
students.add(jason);
students.add(rachel);
students.add(lisa);
for (Student student : students) {
student.printInfo();
}
}
- 4회차 미션
요구사항 :
- 아래와 같이 작동하도록 프로그래밍
- 클래스 내에서 static 메서드는 사용하지마라. (public static void main(String[] args)는 제외)
- Main(프로그램을 실행하는 코드가 존재하는 클래스), Book(책), Library(도서관)의 클래스를 만들어서 활용해라. (한 파일에 모든 코드를 작성하지 말고, 1개의 클래스마다 클래스 파일을 별도로 생성해서 사용해라.)
대여할 책의 번호를 입력하세요.
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) - 대여 가능
Book Class
package jscode4;
public class Book {
private final String name;
private boolean enableRental;
public Book(String name, boolean enableRental) {
this.name = name;
this.enableRental = enableRental;
}
public void printInfo(int number) {
String rentStatus = this.enableRental ? "대여 가능" : "대여 중";
System.out.println(number + ". " + name + "-" + rentStatus);
}
public boolean getEnableRental() {return this.enableRental;}
public void setEnableRental(boolean value) {this.enableRental = value;}
}
- 책 이름, 대여 가능 여부를 속성으로 가지고 정보를 출력하고 대여 가능 여부를 가져오고 값을 변경하는 행위를 가지는 Book 클래스 선언
Library Class
package jscode4;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Library {
private final List<Book> books;
public Library() {
this.books = new ArrayList<>();
}
public void addBook(Book book) {
this.books.add(book);
}
public void rent() {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("대여할 책의 번호를 입력하세요.");
for (int i = 0; i < this.books.size(); i++) {
this.books.get(i).printInfo(i + 1);
}
int number = scanner.nextInt();
if (number > 0 && number <= this.books.size()) {
if (this.books.get(number - 1).getEnableRental()) {
this.books.get(number - 1).setEnableRental(false);
System.out.println("정상적으로 대여가 완료되었습니다.");
}
else {
System.out.println("대여 중인 책은 대여할 수 없습니다.");
}
}
}
}
}
- Book 타입 데이터를 담는 리스트를 속성으로 가지고, Book 추가, 대여 행위를 수행할 수 있는 Library 클래스를 선언
- 리스트 인덱스를 이용하여 번호를 부여하고 입력받는 번호를 통해 알 수 있는 인덱스에 해당하는 책의 데이터를 가져온다.
- 대여 여부를 가져와서 대여가 가능한 책이면 상태를 대여 불가로 바꿔준다.
- 결과
import jscode4.*;
public class Main {
public static void main(String[] args) {
Library library = new Library();
Book book1 = new Book("클린코드(Clean Code)", true);
Book book2 = new Book("객체지향의 사실과 오해", true);
Book book3 = new Book("테스트 주도 개발(TDD)", true);
library.addBook(book1);
library.addBook(book2);
library.addBook(book3);
library.rent();
}
}
github : https://github.com/ParkYongSu/JSCODE/tree/master/src
이번 회차는 클래스에 대해서 공부했다.
이전 회차에서 배웠던 내용들을 계속 사용해서 문제를 해결하기 때문에 계속 상기할 수 있어서 좋은 것 같고, github에 레포지토리를 만들고 직접 올리는 과정까지 수행하니 회차마다 매우 알찬 것 같다.
'Java' 카테고리의 다른 글
JSCODE 6회차 (1) | 2023.02.20 |
---|---|
JSCODE 5회차 (1) | 2023.02.16 |
JSCODE 3회차 (1) | 2023.02.09 |
JSCODE 2회차 (1) | 2023.02.06 |
JSCODE 1회차 (1) | 2023.01.30 |