안녕하세요.


지난시간에는 인간의 체력이 소진됐을때를 대비한 코드를 추가해줬습니다. 슬라임의 체력이 소진됐을때를 대비한 코드를 짜기 전에, 일단 코드를 한번 쭉 쳐다볼까요?





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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Study01.java
 
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        // 슬라임과 인간 객체 생성
        Slime s1 = new Slime("슬라삐");
        Slime s2 = new Slime("슬라돌");
        Human h = new Human("알렉스");
 
        System.out.println(s1.name + "와 " + s2.name + "이 나타났다! 당신의 이름은 " + h.name + "이다\n");
 
        while (true) {
            
            // 인풋박스
            int target = Integer
                    .parseInt(JOptionPane.showInputDialog("어느 슬라임을 공격하겠습니까? 1은 " + s1.name + " 2는 " + s2.name));
 
            if (target == 1) {
                
                // 인간의 공격
                h.attack(s1.name);
                s1.hp = s1.hp - 10;
                System.out.println("현재 " + s1.name + "의 체력은 " + s1.hp + "이다\n");
 
                // 슬라임의 공격
                s1.attack();
                h.hp = h.hp - 10;
                
                // 인간의 사망
                if (h.hp < 1) {
                    JOptionPane.showMessageDialog(null"Game Over");
                    break;
                }
                
                System.out.println("현재 " + h.name + "의 체력은 " + h.hp + "이다\n");
 
            } else if (target == 2) {
 
                // 인간의 공격
                h.attack(s2.name);
                s2.hp = s2.hp - 10;
                System.out.println("현재 " + s2.name + "의 체력은 " + s2.hp + "이다\n");
 
                // 슬라임의 공격
                s2.attack();
                h.hp = h.hp - 10;
                
                // 인간의 사망
                if (h.hp < 1) {
                    JOptionPane.showMessageDialog(null"Game Over");
                    break;
                }
                
                System.out.println("현재 " + h.name + "의 체력은 " + h.hp + "이다\n");
 
            } else {
 
                System.out.println("올바른 숫자를 입력하세요");
 
            }
        } // while 끝
    }
 
}
 
cs


주석을 넣어서 이해하기는 좀 편해졌지만 메인함수가 너무 장황하고 비슷한 내용이 반복되어 있는 형태입니다. 대대적인 성형수술이 필요해 보이는데요, 실행결과는 똑같더라도 코드를 좀 더 효율적이고 알아보기 쉽게 개편하는 작업을 '리팩토링'이라고 합니다. 리팩토링을 하게되면 개발하기도 편하고 나중에 수정하기도 편하고 버그 발생률도 줄일 수 있죠.







일단 휴먼 클래스에서 빨간 네모 부분을 수정했는데요, 신기하지 않나요? 인수 속에 자료형이 int도 아니고 String도 아니고 Slime이네요 ㅎㅎ


이처럼 함수의 인수로서 객체를 집어넣을 수도 있습니다. '객체인수'라고 하죠. 


s.name이라고 적으면 해당 슬라임의 이름이 나오겠네요.


이제 스터디01 클래스를 수정하러 가봅시다.





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
// Study01.java
 
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        // 슬라임과 인간 객체 생성
        Slime s1 = new Slime("슬라삐");
        Slime s2 = new Slime("슬라돌");
        Human h = new Human("알렉스");
 
        System.out.println(s1.name + "와 " + s2.name + "이 나타났다! 당신의 이름은 " + h.name + "이다\n");
 
        while (true) {
 
            // 인풋박스
            int target = Integer
                    .parseInt(JOptionPane.showInputDialog("어느 슬라임을 공격하겠습니까? 1은 " + s1.name + " 2는 " + s2.name));
 
            if (target == 1) {
 
                // 인간의 공격
                h.attack(s1);
 
            } else if (target == 2) {
 
                h.attack(s2);
 
            } else {
                
                JOptionPane.showMessageDialog(null"올바른 숫자를 입력하세요");
                
            }
 
        } // while 끝
    }
 
}
 
cs


다른 자질구레한 것들은 다 지우고 일단 이렇게 코딩해주세요. 어택함수의 인수로서 s1과 s2가 들어간점에 유의해주세요. 슬라임 객체를 그대로 넣어줬습니다. 실행해서 올바로 출력되는지 확인해주세요.






잘되죠? ㅎㅎ




이번시간에 배운 객체인수를 활용하면 보다 효율적인 코딩이 가능해집니다. 다음시간에 그 위력을 경험해봅시다^^


감사합니다.

+ Recent posts