이젠 '그 날 배운 것'이 아니라 그냥 하루 일기장이 되어버린 블로그 숙제.
오늘 저녁은 라면을 먹었다. 물을 많이 부어서 밍밍하고 맛 없었다. 다음엔 물 조금 넣고 짜게 먹어야겠다. 짜게 먹으면 일찍 죽고 싱겁게 먹으면 오래 산다지만 그렇게 살거면 오래 살 가치가 없다.
저번 7번째 글의 클래스 만들기 숙제에서 행위?까지 추가로 구현하라는 지시가 있었다. 예시로 패스트푸드 클래스에서 햄버거, 감자튀김을 '포장하는' 행위(메소드)를 표현하는 그런거...?
근데 난 이미 저번에도 휘두르다, 쏘다, 막다 등등으로 표현했는데. 아니면 내가 뭘 잘못하고 있는건가.
아마 인터페이스를 구현하라고 하셨던것 같다.
솔직히 정확히 뭘 해야하는건지 기억이 잘 안난다.
어쨋든 저번의 그것에서 인터페이스까지 더해서 이번엔 UML 플러그인으로 그려보았다. 종잇장에 대충 그린건 너무 성의없다하셔서...디지털 시대에 마지막 남은 아날로그 감성 수작업이였는데 아쉽게 되었다.
이 그림은 자바 이클립스의 플러그인 중 하나인 'ObjectAid UML Explorer'이라는 것으로, 클래스간의 관계도를 저렇게 보기 쉽게 그려주는 플러그인이다.
ObjectAid UML Explorer
www.objectaid.com
위 사이트로 들어간후, 바로 상단에 나오는 Download 부분의 URL을 복사한다. 아니면 바로 밑에 zip 파일로 수동 다운로드 할 수도 있는데, 그 zip 파일을 어떻게 적용 시키는지는 잘 모르겠다. 난 그렇게 안했다.
그리고 자바 이클립스를 실행한후, 맨 위의 Help - 인스톨 뉴 소프트웨어를 클릭한다.
그리고 저 Work Path에 아까 복사한 URL을 넣은 후 오른쪽의 add를누르면 밑에 설치 가능한 파일들이 좌라락 뜰텐데, 그거 체크하고 확인 누르면 설치가 끝난다.
다 했으면 자바 이클립스를 재실행 한 후, New - other 창에서 uml이라고 수동 검색하면 위 사진처럼 나타날 것이다. 자기가 공부하는 프로젝트 안에 생성하자.
ucls 파일을 연 후, 프로젝트 폴더 내에 있는 자신의 클래스들을 단체로 묶어다가 드래그 이동 시키면 그 클래스들의 관계도가 이렇게 짜쟌하고 나타난다. 아무 관계 없으면 당연히 아무 선도 안이어져있다.
package Myweapon;
public interface Equip {
public int MAX_power=100;
public int MIN_power=0;
public void Equip();
public void UnEquip();
public void Power(int p);
}
이번에 추가한 코드는 Equip(장착) 인터페이스를 구현해서 넣어봤다. 장착했을 때, 장착안했을 때, 장착 후 전투력을 구현해보았다.
package Myweapon;
public class Show {
public static void main(String[] args) {
Sword s = new Sword();
System.out.println("무기 타입 : " + s.type);
System.out.print("무기 재료 : ");
for(int i=0; i<s.data.length; i++)
{
System.out.print(s.data[i]+" ");
}
System.out.println();
s.use();
Equip rps = null;
rps = new Sword();
rps.Equip();
rps.UnEquip();
rps.Power(60);
System.out.println();
Gun g = new Gun();
System.out.println("무기 타입 : " + g.type);
System.out.print("무기 재료 : ");
for(int i=0; i<g.data.length; i++)
{
System.out.print(g.data[i]+" ");
}
System.out.println();
g.use();
Equip rpg = null;
rpg = new Gun();
rpg.Equip();
rpg.UnEquip();
rpg.Power(50);
System.out.println();
Shield sh = new Shield();
System.out.println("무기 타입 : " + sh.type);
System.out.print("무기 재료 : ");
for(int i=0; i<sh.data.length; i++)
{
System.out.print(sh.data[i]+" ");
}
System.out.println();
sh.use();
Equip rpsh = null;
rpsh = new Sword();
rpsh.Equip();
rpsh.UnEquip();
rpsh.Power(85);
System.out.println();
}
}
무기 타입 : 검
무기 재료 : 철 나무
검은 베고 휘두른다.
검을 장착합니다.
검을 장착하지 않습니다.
검 장착 후 전투력 : 60
무기 타입 : 총
무기 재료 : 총알 화약
총은 쏘고 장전한다.
총을 장착합니다.
총을 장착하지 않습니다.
총 장착 후 전투력 : 50
무기 타입 : 방패
무기 재료 : 합금 플라스틱
방패는 막고 던진다.
검을 장착합니다.
검을 장착하지 않습니다.
검 장착 후 전투력 : 85
# 인터페이스
저버애소 인터페이스는 객체의 사용 방법을 정의한 타입이다. 인터페이스는 객체의 교환성을 높여주기 때문에 다형성을 구현하는 매우 중요한 역할을 한다. 특히 자바 8에서 인터페이스의 중요성은 더욱 커졌다. 자바 8의 람다식은 함수적 인터페이스의 구현 객체를 생성하기 때문이다. 인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할을 한다. 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다, 그렇기 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메소드만 알고 있으면 된다.
인터페이스는 ~java 형태의 소스 파일로 작성되고 컴파일러를 통해 ~.class 형태로 컴파일 되기 때문에 물리적으로는 클래스와 동일하다. 차이점은 소스를 작성할 때 선언하는 방법이 다르다.
# 예외처리
윗 글에 인터페이스 이야기만 죽 늘어놨는데 사실 오늘 특히 많이 배운건 예외처리였다.
자바에는 예외처리라는 아주 신기한 기능이 있는데, 코드의 오류를 미리 감지하고 그것을 대처하게 해주는 코드이다. 나에게도 딱 하나 유일하게 자바가 재미있다고 생각하게 하는 기능이다.
기본적으로 try~catch문을 통해서만 사용이 가능하며, 만약 오류가 발생할 시(try), 그것을 잡아내서 (catch) 사용자에게 알려준다.
윗 사진을 예시로 들자면 (글자가 잘 안보인다면 그냥 확대하자. ㅈㅅ) 현재 100이라는 정수값의 x와 'asdfasdf'라는 문자열의 y을 서로 나누기 시도하려는 상황이다. 당연히 될 리가 없지만, 난 분명히 y를 int값으로 변경한다는 intger.parseint 라는 구문을 넣어주어서 코드 형식 자체로는 '정수 나누기 정수' - 문제가 없기에 빨간줄은 그어지지 않아서 그냥 컴파일 실행된다.
지금 위 예시가 엄청 간단하고 짧은 구문이라서 바로 뭐가 문제인지 알아낸거지, 만약 엄청나게 긴 코드였다면 빨간줄도 없어서 어디가 문제인지도 모른채 컴파일 에러만 계속 발생하는 화면을 보면서 모니터를 부쉈을 것이다.
하지만 나는 예외처리-오류를 감지할 덫을 3개나 쳐놓았고, 그 중에서 NumberFormatException라는 덫이 이 상황을 잡아내었다. 결과가 출력된 콘솔창을 보면 뭐가 문제이고, 오류 코드를 알려주고 있다.
다시 말하지만 개인적으로 엄청 신기하다고 생각되는 기능.
오류라는게 무엇인가, 말 그대로 실행하는데 문제가 생겨서 실행이 안된다는것 아닌가.
근데 이 예외처리를 활용하면 오류를 잡아내거나 아니면 그냥 무시하고 컴파일 실행이 가능한것이다.
에러라는게 막 그렇게 간단하게 캐치해서 끄집어 낼 수 있는거라니 뭔가 되게 생각할수록 신기하다. 이쯤되면 그건 에러가 에러가 아닌게 아닌가...
'[K-Digital] 온·오프 연계 AI활용 지능형 서비스 개발' 카테고리의 다른 글
멀티캠퍼스 AI 온라인 강의 숙제 11번째 (0) | 2021.02.09 |
---|---|
멀티캠퍼스 AI 온라인 강의 숙제 10번째 (0) | 2021.02.08 |
멀티캠퍼스 AI 온라인 강의 숙제 08번째 (0) | 2021.02.05 |
멀티캠퍼스 AI 온라인 강의 숙제 07번째 (0) | 2021.02.04 |
멀티캠퍼스 AI 온라인 강의 숙제 06번째 (0) | 2021.02.03 |