티스토리 뷰

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
댓글