현직에서는 기능별로 따로 개발을 한다. 이때 서로 method나 field 이름다 다 다르다면 문제가 있다.
충돌이 일어날 수 있고 다음 개발자가 왔을 때 이것이 무슨 뜻인지 모르거나 이해하는 데있어 많은 시간을 잡아먹는다. 이를 방지하고자 등장한 개념이 interface이다.
interface의 장점으로
다중상속 : interface끼리 extends(상속)이 됨. 대신 interface에있는 모든 abstract method를 implement해야한다. 또한 콤마로 다중 상속이 가능하다.
무엇보다 우리가 이제 interface를 갖다가 쓰니까 어떻게 구동하는지 알아야 한다.
무엇보다 우선 재미있게 배우기위해 게임을 코딩해 보자.
지금부터 판타지 세계관에 꼭 있는 마법사, 전사, 도적, 사제를 만들어볼 것이다.
또한 interface를 구현(implement)할 땐 앞서 배웠던 alt+shift+s로 손 쉽게 구현하고 extends 대신 implements라는 keywords를 써서 구현하면 된다.
그 후 main method를 이용하여 가볍게 쯔꾸르게임을 흉내내 봤다.
<style>
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Character wizard = new Wizard();
Character warrior = new Warrior();
Character thief = new Thief();
Character priest = new Priest();
// 다형성의 대표 예제 : upcasting
ArrayList<Character> list = new ArrayList<Character>();
list.add(wizard);
list.add(warrior);
list.add(thief);
list.add(priest);
String text1 = "우리는 드디어 마왕성 앞에 도착했다...";
String text2 = "여태까지 많은 시련이 있었지만 우리는 포기하지 않았다...";
String text3 = "마왕성의 문을 여는 순간... 우리앞에 마왕의 모습이 들어났다...";
String text4 = "마왕 : \"하하핫 가소로운 녀석들! 여기까지 오다니 대단하군..!\"";
String text5 = "마왕 : \"너희의 운도 여기까지다! 나를 상대할 녀석은 대체 누구냐!!\"";
ArrayList<String> story = new ArrayList<String>();
story.add(text1);
story.add(text2);
story.add(text3);
story.add(text4);
story.add(text5);
boolean isText = true;
for (int j = 0; j < story.size(); j++) {
String[] text = story.get(j).split("");
isText = false;
for (int i = 0; i < text.length; i++) {
System.out.print(text[i]);
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("");
}
System.out.println("==== Choose ur Charactor ====");
System.out.println("1.Wizard 2.Warrior 3.Thief 4.Priest");
int choice = sc.nextInt();
boolean flag = true;
while (flag) {
System.out.println("1.attack 2.dodge 3.skill 4. run>> ");
int skill = sc.nextInt();
if (skill == 1) {
list.get(choice - 1).attack();
} else if (skill == 2) {
list.get(choice - 1).move();
} else if (skill == 3) {
list.get(choice - 1).skill();
} else if (skill == 4) {
System.out.println("전투를 종료합니다.");
flag = false;
}
}
}
}
</style>
추가 공부 요소 (refactoring)
alt+shift+m 으로 손 쉽게 refacoring 할 수 있다.
사용법
1.Java Code Convention을 지키면서 프로그래밍을 한다.
2.Indent(들여쓰기) depth를 3이 넘지 않도록 구현한다.(2까지만 허용)
• 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
• 힌트: Indent(들여쓰기) depth를 줄이는 가장 좋은 방법은 함수(또는 메서드)를 분리하면 된다.
3.함수(또는 메서드)가 한 가지 일만 하도록 최대한 작게 만들어라.
4.함수(또는 메서드)의 길이가 15라인을 넘어가지 않도록 구현한다. => 한 가지 일만 잘하도록 구현.
5.else 예약어를 쓰지 않는다.
6.if 조건절에서 값을 return 하도록 구현하면 else를 사용하지 않아도 된다.
추가 공부 요소 (thread)
thread는 일을 시키는 녀석으로 자바는 1개의 thread를 갖고 있다. main method가 그에 해당하는 것이다.
사용법은 try, catch과 함께 thread를 사용하며 python에 timesleep position을 담당하고 있다.
쓰레드는 join과 runable method와 같이 쓰이는 듯 하다. thread method 자체가 main method가 끝나기 전에 끝나기 때문에 이를 방지하고자 쓰는 듯 하다. 이것을 활용할 방법은 추후 포스팅 하겠다.
// 교재 297p
// 교재 298p
// 교재 301p
// 교재 304p