카드게임을 하나 생각해 봅시다..
어느정도 JAVA에 맛이 들어가는 것 같습니다. 프로젝트를 하나 시작해 보도록 합시다.
참!! 프로젝트를 시작하기 전에...
JAVA의 클래스는 재사용과 확장성이 생명이라고 했지요?
어느 누가 어떻게 이 클래스를 사용하게 될지..
또 확장해서(상속받아) 사용하게 될지는 아~ 무도 모릅니다. (대부분 우리가 만드는 클래스는 아무도 안쓰겠지요?? 생명이.. 생명이.. 우리라도 한번 잘 만들어놓고... 계속 쓰도록 합시다...)
그렇다면 이 클래스가 무엇을 하는 것인지.. 어떻게 돌아가는 것인지.. 어떤 클래스에서 상속을 받았는지(상속.. 이번 프로젝트를 진행하는 동안 배웁시다).. 멤버 변수는 무엇이고, 메소드는 어떤 것을 가지고 있는지.. 등등을 기록 해 두어야 합니다.
보기 쉽~게... 바로 문서화가 필요하겠지요..
문서화!! 필수적인가요? 꼭해야 합니까?? 물론입니다..
초보 프로그래머 일수록 문서화를 등안시 하는 경향이 있지만, 꼭! 꼭!!! 해야 합니다. 저도 초보딱지를 못떼고 있는 형편이긴 합니다...프로젝트를 진행하는 동안 가장 중요한 것이 무엇이냐? 라고 묻는다면 문서화 라고 대답해야 할 정도입니다.. ㅠㅠ
특히 자바는 더욱 그러하죠. 재사용과 확장성이 생명이라고 했으니깐요...
첫 번째 프로젝트의 총괄적인 문서화를 시작합니다.. (프로젝트명, 프로젝트의 목표, 만든사람, 만들기 시작한 날짜와 버전, 사용하게될 class들, 각 클래스에 따른 멤버 변수와 메소드, 그리고 용어집 정도를 만들면 되겠지요?? 허걱.. 만들어 내는 코드보다 문서화에 쓰는 내용이 많을 것 같네요.. 하지만 JAVA이기 때문에 걱정은 조금만 하세요...)
자!! 시작합시다...
우리 모두(?)에게 익숙한 게임으로 합시다... 섯다라고 아실런지요?? 화투장 두 개를 받아서 같은 숫자면 땡!!(높은거죠?) 다른 숫자이면 두 숫자를 합해 뒷자리(끝)만으로 승부를 겨루는 게임입니다. 만약 7과 8이면 더해서 15이므로 뒷자리 5로 다섯끝이 되지요.. 한끗이 가장 낮고, 장(10)땡이 가장 높은 게임입니다.. (아시나요? 다 아는건데.. 주절주절 설명하고 있는거죠?? 그죠??? 38광땡, 알리삥이나, 장사나.. 이런건 없다고 합시다... 그냥.. 귀찮아서가 아니라.. 쩝~)
프로젝트 이름을 정합니다. -> 문서화 하셔야 합니다..
필요한 것부터 생각해 봅시다. 일단 카드가 필요합니다.. (일반적인 카드를 만들고, 그 일반적인 카드를 확장 혹은 멤버 변수로 하는 카드덱을 만들껍니다. 카드덱으로 화투패를 만들고, 그 화투패를 가지고 게임을 진행해볼 생각입니다.) 플레이어가 필요합니다. (화투패 두장을 가지고 게임에 참여해야 겠지요.. 돈을 가지고 베팅도 할 수 있도록 만들면, 더욱 좋겠지요...) 게임을 진행할 수 있는 게임도우미도 필요합니다. (승패를 결정하고, 게임 룰을 결정하고, 기타 게임에 필요한 잡스러운 일을 하면 좋겠지요..)
세 개의 필요한 클래스를 정했습니다..(Card class, Player class, GameHelper class) -> 문서화 하셔야 합니다..
클래스를 설계해 봅시다... 기본적으로 일반적인 카드가 가지고 있는건 뭘까요?? 모양과, 숫자입니다.. 카드가 할수 있는 일을 무엇일까요? 세터/게터 메소드와 생성자는 이야기 하지 않겠습니다.. 카드를 보여주고 감추는 일일 것입니다.
-
// 클래스 카드
-
public class Card{
-
// 멤버 변수
-
private String shape;
-
private int num;
-
// 생성자..
-
-
// 세터/게터 메소드
-
-
// 필요한 메소드
-
public void show(){}
-
public void hide() {}
-
}
정도가 되겠네요... -> 다 문서화 하셔야 합니다.
여.기.서!! 자바의 위력이 보입니다.. 바로 문서화와 그것을 쉽게 해주는 주석처리입니다. 일반적인 한줄 주석 // 나, 여러줄 주석 /* ~ */은 기존의 c스타일의 주석입니다. 여태 이렇게 사용했었죠? 자바스타일이 아니네요...
자바스타일? 먼가 또 있는건가? 당연합니다.. 자바라니깐요... 자바스타일의 주석은 문서화를 담당해 줍니다... 제가 꼭 해야된다고 이야기 했던 문서화.. 자바가 다~ 알아서 해 줍니다.
지난시간에 우리 API를 살펴 봤죠? 바로 그 API를 만들어 줍니다. 내가 만든 클래스도 API를 가질 수 있게 되는 겁니다.. 흥분되지 않나요?? 자바가 점점~ 매력적으로 보이시죠?? 누군가가 내가 만든 클래스를 사용하기 위해 나에게 소스코드를 보여주거나 할 것을 요구하지 않는다는 말입니다. 그냥 내가 만들어 놓은 API를 참고하면 되겠죠?
그냥 해 봅시다!!
%javadoc card.java
뭐 일단 에러도 있지만... 무언가 막 만들어집니다..
브라우져를 켜서 살펴봅시다.. index.html 오호~라~~ 깔끔하게 문서화 되었습니다.
이제 어차피 주석을 써야했던 부분을 JAVA스타일의 주석으로 고쳐 보겠습니다.
고쳐보세요!!! 아래와 같이 /** 로 시작해서 */로 끝납니다.
클래스의 설명, 메소드의 설명을 넣어주세요..
아래의 예는 클래스의 설명만을 넣었습니다.. 각자 해 보시고 javadoc명령을 내려보세요...
-
/**
-
* Card클래스 일반적인 카드한장을 의미합니다. <br />
-
* @author 내이름
- * @version 1.0
댓글
-
다음은 로또 발생 프로그램입니다.
이런 기능으로 추가 하려 하는데 좀 도와주세요
1. 발생키킬 개수를 입력
2. 발생된 번호들중 같은 번호 즉 중복된 번호를 출력하는 프로그램
예를 들어 200만개의 로또 번호를 생성한후 그중에서 20회 이하의 중복된
번호를 출력하는 프로그램
출력은 파일로 출력 엑셀로
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Lotto {
public static void main(String[] args) {
Lotto lotto = new Lotto();
Scanner sc = new Scanner(System.in);
System.out.print("로또번호 추출 개수 입력: ");
int gameCnt = sc.nextInt();
for (int i = 1; i <= gameCnt; i++) {
System.out.println(
i + "번째 로또번호: " + lotto.lottoNumbers());
}
}
String lottoNumbers() {
List<Integer> lottoNum = new ArrayList<Integer>();
// List 안에 로또번호 추가
for (int i = 1; i <= 45; i++) {
lottoNum.add(i);
}
// set안의 수를 무작위로 섞는다
Collections.shuffle(lottoNum);
int[] lottoNums = new int[6];
for (int i = 0; i < 6; i++) {
lottoNums[i] = lottoNum.get(i);
}
// 정렬
Arrays.sort(lottoNums);
return Arrays.toString(lottoNums);
}
}
himemory@hanmail.net 로 답변좀 부탁드립니다.