순천향대 JAVA프로그래밍LAB 9주차 레포트
Problem 1
우선 두개의 패키지를 생성해야 한다.
한개는 계산기의 역할을 맡을 클래스를 생성하기 위한 패키지와 프로그램을 실행하기 위한 클래스를 생성할 패키지를 만든다.
우선 math 패키지를 생성하여 클래스를 생성해야 한다.
해당 클래스명은 Calculator로 설정하고, 문제에서 요구하는 메소드를 유의하며 클래스를 작성한다.
그 다음으로 main 패키지를 만들고 프로그램을 실행할 Test 클래스를 만들어야 한다.
우리는 여기서 math 패키지에서 만든 클래스의 객체를 생성하고 해당 메소드를 활용하여 문제를 해결하고자 한다.
math 패키지 속 Calculator 클래스 소스코드
package math;
public class Calculator {
public int add(int a, int b) { // 매개변수를 받아와 두 수를 더하고 반환
int result = a + b;
return result;
}
public int subtract(int a, int b) { // 매개변수를 받아와 두 수를 빼고 반
int result = a - b;
return result;
}
}
math 패키지 속 Calculator 클래스 소스코드
package main;
import math.Calculator; // math 패키지 속 Calculator 클래스 호출
public class Test {
public static void main(String[] args) {
Calculator calc = new Calculator(); // Calculator 객체 생성
//클래스의 메소드를 호출하여 계산
int sum = calc.add(5, 3);
System.out.println("5 + 3 = " + sum);
int sum1 = calc.subtract(5, 3);
System.out.println("5 - 3 = " + sum1);
}
}
import를 사용하여 해당 패키지 속 클래스를 호출하였다. 다른 패키지의 클래스를 호출하는 방법은 이러한 방법으로 나타낼 수 있다.
//패키지의 특정 클래스만 호출
import <패키지명>.<호출할 클래스명>
//패키지 내 모든 클래스를 호출
import <패키지명>.*
그렇게 호출한 클래스의 객체를 생성하여 해당 객체의 메소드를 호출하여 문제를 해결하였다.
실행결과
해당 코드들이 정상적으로 호출되고 실행되어 요청한 연산이 올바르게 수행되었음을 알 수 있다.
Problem 2
우선 Student 클래스를 완성해야 한다.
필드를 보면 각 필드들의 접근 제어자가 private로 지정되어 있다.
해당 필드들은 클래스 내에서만 접근이 가능하므로 클래스 외부에서 접근하기 위한 접근자를 생성해야 하고, 해당 필드의 정보를 초기화 하기 위해 생성자도 작성해야 한다.
public class Student {
private String studentID;
private String name;
// 생성자, 매개변수로 전달받은 정보를 해당 필드에 저장함.
public Student(String studentID, String name) {
this.studentID = studentID;
this.name = name;
}
// 접근자 메소드를 생성하여 해당 필드의 정보를 클래스 외부에서도 접근할 수 있음.
public String getStudentID() {
return this.studentID;
}
// equal 메소드 작성, 매개변수는 Object obj로 지정. 어느 인스턴스가 전달올지 모르기 때문.
public boolean equals(Object obj) {
if (obj instanceof Student) { // obj가 Student의 인스턴스라면
Student otherStudent = (Student) obj; // obj의 정보를 otherStudent에 저장
//equals()메소드를 사용하여 문자열을 비교
return this.studentID.equals(otherStudent.getStudentID());
}
return false;
}
public static void main(String[] args) {
Student student1 = new Student("20241001", "홍길동");
Student student2 = new Student("20241002", "이순신");
if(student1.equals(student2) == true) {
System.out.println("학번이 동일합니다.");
}
else {
System.out.println("학번이 동일하지 않습니다.");
}
}
}
문자열끼리 비교할 때 '==' 연산자를 사용하지 않는편이 좋다.
'==' 비교연산자를 사용하여 문자열을 비교하게 되면 객체의 주소값을 비교하게 되어 원하는 작동이 되지 않는다.
그렇기에 문자열을 비교할 때는 equals()메소드를 사용하여 비교해야 한다.
추가로 Student 클래스 내 메소드인 equals() 메소드를 정의하기 위해 매개변수를 Object obj로 설정했고, 조건문을 사용하여 obj가 Student의 객체라면 Student 자료형의 otherStudent 필드에 obj의 정보를 저장한다.
그렇게 접근자를 사용하여 otherStudent의 ID에 접근할 수 있고 equals() 메소드를 사용하여 문자열끼리 비교하여 값을 반환할 수 있게된다.
마지막으로 main()메소드에서 두 객체를 생성하고, 생성한 equals() 메소드를 사용하여 학번이 동일한지 확인하는 프로그램을 완성하였다.
실행결과
코드에서 객체를 생성시에 학번을 동일하게 하였을 때와 같게 생성하였을 때 결과는 이러하다.
Problem 3
위 코드는 problem1에서 작성한 코드를 수정해서 프로그램을 만들어보았다.
game 패키지를 생성하고 패키지 내 Die 클래스를 생성하여 main 패키지 내 test 클래스에서 작동시키면 된다.
game 패키지 속 Die 클래스 소스코드
package game;
//랜덤한 주사위 눈을 출력하기 위한 라이브러리 클래스 호출
import java.util.Random;
public class Die {
private int face;
Random random = new Random(); // random 객체를 생성
// 생성자, 주사위 눈의 초기값을 1로 설정
public Die() {
face = -1;
}
// 주사위를 굴리는 메소드
public int roll() {
return face = (random.nextInt(5) + 1); // 1 ~ 6 까지의 랜덤값을 저장
}
// 주사위 눈을 설정하는 설정자
public void setValue(int face) {
this.face = face;
}
//주사위 눈에 접근할 수 있는 접근자
public int getValue() {
return face;
}
// 현재 주사위 눈의 값을 문자열로 반환하는 메소드
public String toString() {
return Integer.toString(face);
}
}
main 패키지 속 Test 클래스 소스코드
package main;
import game.Die; // game 패키지의 Die 클래스 호출
public class Test {
public static void main(String[] args) {
// 두개의 주사위 객체 생성
Die die1 = new Die();
Die die2 = new Die();
int face1, face2;
//각 객체에서 나온 주사위의 눈을 해당 필드에 저장
face1 = die1.roll();
face2 = die2.roll();
//조건문으로 주사위 눈을 비교하여 승패 여부 확
if(face1 > face2) {
System.out.println("플레이어 1 승리");
System.out.printf("P1 : %d / P2 : %d\n", face1, face2);
}
else if(face1 < face2) {
System.out.println("플레이어 2 승리");
System.out.printf("P1 : %d / P2 : %d\n", face1, face2);
}
else {
System.out.println("무승부");
System.out.printf("P1 : %d / P2 : %d\n", face1, face2);
}
}
}
실행결과
Problem 4
익명 클래스를 활용해서 Calculator를 생성해야 한다.
방법은 위와 같다.
// Calculator 인터페이스 생성
interface Calculator{
int calculate(int x, int y);
}
public class Main {
public static void main(String[] args) {
//익명 클래스 생성
Calculator addition = new Calculator() {
// 메소드 오버라이드를 통해 인터페이스 속 메소드를 재정의
@Override
public int calculate(int x, int y){
return x + y;
}
};
// 익명 클래스의 메소드를 활용하여 해당 결과를 저장
int result = addition.calculate(5, 3);
System.out.println("결과 : " + result);
}
}