안녕하세요.


일단 메인함수의 if문을 한번 봐주세요.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            if (target == 1) {
 
                // 인간의 공격
                h.attack(s1);
 
                // 슬라임의 반격
                s1.attack(h);
 
            } else if (target == 2) {
 
                h.attack(s2);
                s2.attack(h);
 
            } else {
 
                JOptionPane.showMessageDialog(null"올바른 숫자를 입력하세요");
 
            }
cs


객체인수 기법을 사용하여 많이 간략해졌지만 슬라임의 개체수만큼 공격과 반격 구문을 적어줘야 된다는 단점이 남아있습니다. 게다가 슬라임의 체력이 소진됐을때도 추가해줘야되니 우선적으로 리팩토링이 더 필요해보입니다.


이번에 소개해드릴 기법은 '빈 슬라임 변수'를 사용하는 건데요, 우선 스터디02에다가 아래와 같이 코딩해봅시다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Study02.java
 
package study;
 
public class Study02 {
 
    public static void main(String[] args) {
 
        // 빈 슬라임 변수
        Slime s = null;
 
        // 슬라임 객체 생성
        Slime s1 = new Slime("슬라삐");
        Slime s2 = new Slime("슬라디");
 
        s = s1;
 
        System.out.println(s.name);
 
    }
 
}
 
cs


10행을 보시면 슬라임을 담을 수 있는 박스를 준비해놓는 내용이네요. null을 넣었다는 말은 아무것도 들어있지 않다는 뜻이겠죠.


13, 14행에서 슬라임 객체들이 박스에 들어갔고... 16행이 이번 강좌의 하이라이트네요. s1이 s에 들어갑니다. 이렇게 되면 s1이나 s나 동일해지는거죠.


18행에서 s.name하면 슬라삐가 출력이 되겠습니다.





자, 이제 이 기법을 메인함수에 적용해봅시다.



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
46
47
48
49
50
51
52
53
54
// Study01.java
 
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        // 빈 슬라임 변수
        Slime s = null;
 
        // 슬라임과 인간 객체 생성
        Slime s1 = new Slime("슬라삐");
        Slime s2 = new Slime("슬라디");
        Human h = new Human("알렉스");
 
        System.out.println(s1.name + "와 " + s2.name + "가 나타났다! 당신의 이름은 " + h.name + "이다\n");
 
        while (true) {
 
            // 인풋박스
            String sTarget = JOptionPane.showInputDialog("어느 슬라임을 공격하겠습니까? 1은 " + s1.name + " 2는 " + s2.name);
 
            // 널값이나 빈값이 입력되면 종료
            if (sTarget == null || sTarget.equals("")) {
                System.exit(0);
            }
 
            // 형변환
            int target = Integer.parseInt(sTarget);
 
            if (target == 1) {
                
                s = s1;
 
            } else if (target == 2) {
                
                s = s2;
                
            } else {
 
                System.out.println("올바른 숫자를 입력하세요");
 
            }
 
            h.attack(s);
            s.attack(h);
 
        } // while 끝
    }
 
}
cs


형변환 다음에 나오는 if문의 역할이 단순해졌습니다. 1이면 s에다가 s1을 집어넣고, 2면 s에다가 s2를 집어넣는거죠. 실질적인 행동은 if문 밖에다가 한번씩만 적어주면 되겠습니다.



다음시간에는 드디어 슬라임의 체력이 소진됐을때를 코딩할수 있겠죠? ㅎ


감사합니다.

+ Recent posts