👉 계산기 만들기
1. class 이름 Calculator
class Calculator {
int value;
Calculator() {
this.value = 0;
}
void add(int val) {
this.value += val;
}
int getValue() {
return this.value;
}
}
public class Sample {
public static void main(String[] args) {
Calculator cal = new Calculator();
cal.add(10);
System.out.println(cal.getValue());
}
}
a. 요구사항
- 위 Calculator 클래스를 상속하는 UpgradeCalculator를 만든다.
- 뺴기기능 구현, 메서드 명 minus
...
class UpgradeCalculator extends Calculator {
void minus(int val) {
this.value -= val;
}
}
public class Sample {
public static void main(String[] args) {
UpgradeCalculator cal = new UpgradeCalculator();
cal.add(10);
cal.minus(3);
System.out.println(cal.getValue()); // 7 출력
}
}
2. 위 Calculator클래스를 활용해서, 멤버 필드인 value의 크기 제한이 있는 MaxLimitCalculator클래스 만들기
a. 요구사항
-멤버 필드 value의 크기가 100보다 큰 값은 가질 수 없다.
class MaxLimitCalculator extends UpgradeCalculator {
int getValue() {
if (this.value >= 100) {this.value = 100;}
return this.value;
}
}
public class Sample {
public static void main(String[] args) {
MaxLimitCalculator cal = new MaxLimitCalculator();
cal.add(10);
cal.minus(3); // 7 출력
cal.add(100); // 계산값은 107이지만 100 출력
}
}
3. 위 Calculator클래스에서 짝수인지, 홀수인지 판별해주는 메서드 추가
a.요구사항
-짝수 홀수 판별 메서드 : isOdd 홀수이면 true 반환, 짝수이면 false 반환
class Calculator {
...
boolean isOdd(int num) {
return num % 2 == 0;
}
}
public class Sample {
...
System.out.println(cal.isOdd(cal.getValue()));
}
4. 위 Calculator클래스에서 평균값 구하는 메서드 추가
a. 요구사항
-정수의 리스트 입력시, 입력받은 리스트의 평균값을 반환하는 avg 메서드 구현
import java.util.ArrayList;
class Calculator {
...
int avg(ArrayList<Integer> data) {
int sum = 0;
for (int i=0; i<data.size(); i++) {
sum += data.get(i);
}
return sum / data.size();
}
}
public class Sample {
...
ArrayList<Integer> data2 = new ArrayList<>(Arrays.asList(2,4,6,8,10));
System.out.println(cal.avg(data2)); // 6 출력
}
👉 미네랄 계산기 만들기
class Gold {
}
class Silver {
}
class Bronze {
}
class MineralCalculator {
int value = 0;
public void add(Gold gold) {
this.value += 100;
}
public void add(Silver silver) {
this.value += 90;
}
public void add(Bronze bronze) {
this.value += 80;
}
public int getValue() {
return this.value;
}
}
public class Sample {
public static void main(String[] args) {
MineralCalculator cal = new MineralCalculator();
cal.add(new Gold());
cal.add(new Silver());
cal.add(new Bronze());
System.out.println(cal.getValue()); // 270 출력
}
}
a. 요구사항
- 광물이 추가될 때마다 (자수정, 오팔, 다이아… 쭉쭉쭉 추가 예정) add메서드를 추가해야하는 단점이있는 코드.
- MineralCalculator 클래스의 add 메서드 추가하지 않는 방법을 생각해서, 코드를 수정하세요.
interface Mineral { // Mineral 인터페이스를 생성
int getValue(); // 광물의 가치를 리턴하는 getValue 메서드를 선언
}
class Gold implements Mineral { //Mineral 인터페이스를 구현
public int getValue() {
return 100;
}
}
class Silver implements Mineral { //Mineral 인터페이스를 구현
public int getValue() {
return 90;
}
}
class Bronze implements Mineral { //Mineral 인터페이스를 구현
public int getValue() {
return 80;
}
}
class MineralCalculator {
int value = 0;
public void add(Mineral mineral) { // add 메서드는 모든 광물을 오버로딩하지 않고 Mineral 객체만 처리하도록 수정
this.value += mineral.getValue();
}
public int getValue() {
return this.value;
}
}
public class Sample {
public static void main(String[] args) {
MineralCalculator cal = new MineralCalculator();
cal.add(new Gold());
cal.add(new Silver());
cal.add(new Bronze());
System.out.println(cal.getValue()); // 270 출력
}
}
👉 오류 원인 찾기(1)
다음 코드를 보고, 주석에서 1,2,3,4,5번이 달린 문장중 오류가 발생하는 문장을 모두 찾고, 오류의 원인에대해 설명하세요.
interface Predator {
}
class Animal {
}
class Dog extends Animal {
}
class Lion extends Animal implements Predator {
}
public class Sample {
public static void main(String[] args) {
Animal a = new Animal(); // 1번
Animal b = new Dog(); // 2번
Animal c = new Lion(); // 3번
Dog d = new Animal(); // 4번
// Dog 클래스는 Animal 자식 클래스이므로 관계성립이 안된다.
Predator e = new Lion(); // 5번
}
}
👉 오류 원인 찾기(2)
다음 코드를 보고, 주석에서 1,2,3,4,5번이 달린 문장중 오류가 발생하는 문장을 모두 찾고, 오류의 원인에대해 설명하세요.
interface Predator {
String bark();
}
abstract class Animal {
public String hello() {
return "hello";
}
}
class Dog extends Animal {
}
class Lion extends Animal implements Predator {
public String bark() {
return "Bark bark!!";
}
}
public class Sample {
public static void main(String[] args) {
Animal a = new Lion();
Lion b = new Lion();
Predator c = new Lion();
System.out.println(a.hello()); // 1번
System.out.println(a.bark()); // 2번
// a 객체는 Animal 타입으로 생성되어서 hello() 메서드만 사용가능
System.out.println(b.hello()); // 3번
System.out.println(b.bark()); // 4번
System.out.println(c.hello()); // 5번
// c 객체는 Predator 타입으로 생성되어서 bark() 메서드만 사용가능
System.out.println(c.bark()); // 6번
}
}
🙋♂️ 소감 :
객체지향이라는 개념을 인지하고 문제를 풀어보니,
이론만 들었을 때보다는 확실히 더 이해하기 수월했다.
추상화는 아직 이해하기 조금 어려워서 주말 동안 더 공부해야겠다.
😈 아는 내용이라고 그냥 넘어가지 않기! 😈
'❤️🔥TIL (Today I Learned)' 카테고리의 다른 글
[TIL] 2022-11-22(17day) (0) | 2022.11.22 |
---|---|
[TIL] 2022-11-21(16day) (0) | 2022.11.21 |
[TIL] 2022-11-17(14day) (0) | 2022.11.17 |
[TIL] 2022-11-16(13day) (0) | 2022.11.16 |
[TIL] 2022-11-15(12day) (0) | 2022.11.15 |
댓글