티스토리 뷰
1.Generic 이전의 코드의 문제 상황들을 예시로 설명하시오.
class A
class B
class C
클래스 세 개가 있고 클래스 C가 클래스 A와 B 모두를 담고 싶어 한다면
AB의 공통된 조상인 Object를 private Object 이런 식으로 넣고 set을 해야 한다.
모든 객체형을 받으려면 polymorphism을 적용할 수 밖에 없기 떄문이다.
따라서 다형성을 사용하게 되면 println(Object obj)이런 방법으로 진행할 수 밖에 없다.
형변환을 해야하고 에러가 나도 잡히지가 않는 문제가 생겼다.
이를 해결하기 위해 나온게 Generic이다.
2. 아래의 결과가 나오도록 프로그래밍 하시오.
class DDBoxDemo {
public static void main(String[] args) {
DBox<String, Integer> box1 = new DBox<>();
box1.set("Apple", 25);
DBox<String, Integer> box2 = new DBox<>();
box2.set("Orange", 33);
DDBox<DBox<String, Integer>, DBox<String, Integer>> ddbox = new DDBox<>();
ddbox.set(box1, box2);
System.out.println(ddbox);
}
}
출력값:
Apple & 25
Orange & 33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
class DBox<L, R> {
private L left;
private R right;
public void set(L left, R right) {
this.left = left;
this.right = right;
}
@Override
public String toString() {
return left + " & " + right;
}
}
class DDBox<L, R> {
private L left;
private R right;
public void set(L left, R right) {
this.left = left;
this.right = right;
}
@Override
public String toString() {
return left + "\n" + right;
}
}
|
cs |
3.아래와 같이 결과 값이 나오도록 만드시오.
class DDBoxDemo {
public static void main(String[] args) {
DBox<String, Integer> box = new DBox<String, Integer>();
box.set("Apple", 25);
System.out.println(box);
DBox<String, String> box2 = new DBox<String, String>();
box2.set("Apple", "Orange");
System.out.println(box2);
}
}
출력값:
Apple & 25
Apple & Orange
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class DBox<L, R> {
private L left;
private R right;
public void set(L left, R right) {
this.left = left;
this.right = right;
}
@Override
public String toString() {
return left + " & " + right;
}
}
|
cs |
4. 업다운 게임을 짜시오.
1. 랜덤으로 숫자를 생성 - 컴퓨터가 가짐
2.게임을 시작 유저가 숫자를 입력
3. 10번의 기회를 주어 맞으면 맞았다고 출력 10번의 기회가 지나면 게임 종료.
출력의 예
========================================
**************
1. 게임 시작
2. 게임 종료
**************
1
게임시작
>>>
50
down
>>>
45
down
>>>
30
down
>>>
20
down
>>>
10
up
>>>
15
up
>>>
17
맞았다
**************
1. 게임 시작
2. 게임 종료
**************
개인적으로 업다운 게임을 만들 때의 핵심은 「배열 구성」인 것 같다.
배열을 떠올리지 못한다면 메인 클래스에 모든 함수를 넣는 것도 하나의 방법이라고 본다.
구글링을 해보면 알겠지만 많은 사람들이 메인 클래스 하나로 게임을 구성하고 있다.
하지만 자바를 배우며 여지껏 활용해 온 건 다수의 클래스를 구성하여 프로그래밍을 하는 것이었으니
배운 것들을 최대한 활용해보도록 하자.
참고로 처음 업다운 게임 코딩을 할 때 배열을 넣지 않은 채로 클래스를 분리했더니 게임 진행이 되지 않았다.
원하는 입력들은 출력이 되었으나 가장 큰 문제는 플레이어가 숫자를 입력하면 컴퓨터가 Up 혹은 Down을 입력하며
플레이어와 컴퓨터가 주거니 받거니를 해야 하는데 그게 되지 않았다.
한마디로 게임을 시작하면 문자들이 자동으로 (내가 원치 않았지만) 모두 출력되고 게임을 더 진행할거냐는 식으로 진행이 되었다.......
내 프로그램의 문제점은 배열을 넣지 않았던 것인데 배열 하나의 힘이 이토록 크다는 것을 이번 프로그밍을 통해 느낄 수 있었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import java.util.Scanner;
public class UpDownGame {
private static int COUNT = 10; // 10번 돌릴거니까
private int[] arrInput;// 사용자 입력
private int com;
public UpDownGame() {
arrInput = new int[COUNT];
com = (int) (Math.random() * 100 + 1);
}
// 게임 시작
public void run() {
try {
Scanner sc = new Scanner(System.in);
// 배열로 관리하니까 이런게 좋음
for (int i = 0; i < arrInput.length; i++) {
System.out.println("숫자를 입력해 주세요");
int num = sc.nextInt();
// 여기서부터 이 게임의 핵심 로직이 들어감
if (num > com) {
System.out.println("Down ==> " + (COUNT - i - 1) + "번 남았습니다.");
} else if (com > num) {
System.out.println("Up ==> " + (COUNT - i - 1) + "번 남았습니다.");
} else {
System.out.println("맞췄습니다람쥐");
break; // 더 돌 필요가 없으니 for문을 빠져나가자
}
}
} catch (Exception e) {
System.out.println("잘못된 입력입니다람쥐.. 처음부터 다시 해라일락 ! ");
run();
}
}
}
|
cs |
메인클래스:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
public class UpDownGameTest {
public static void main(String[] args) {
// 메인에서는 실행시키자
Scanner sc;
UpDownGame game; // 객체생성
while (true) {
try {
//숫자 넣어야하는데 다른거 넣을 수 있으니 try catch 묶어주자.
sc = new Scanner(System.in);
System.out.println("**************" + "\n" + "1. 게임 시작");
System.out.println("2. 게임 종료" + "\n" + "**************");
int num = sc.nextInt();
if (num == 1) {
System.out.println("게임시작");
// game에다가 객체 생성
game = new UpDownGame();
game.run(); // 실행완료
} else {
System.out.println("게임 종료");
break;
}
} catch (Exception e) {
System.out.println("잘못된 입력입니다람쥐..! ");
System.out.println("게임을 다시 시작");
}
}
}
}
|
cs |
잘못된 입력:
'면접준비 > KOSMO 허쌤 숙제' 카테고리의 다른 글
학습정리-11-05 (0) | 2021.11.06 |
---|---|
학습정리-11-04 (0) | 2021.11.04 |
학습정리-11-02(compareTo) (0) | 2021.11.02 |
학습정리-11-01 (0) | 2021.11.01 |
학습정리-10-29 (0) | 2021.10.29 |