JAVA Programming for Beginners...

JAVA, 초보

간단한 프로젝트를 하나 해 볼까요??

javadoc에 대해서!!!

카드게임을 하나 생각해 봅시다..

어느정도 JAVA에 맛이 들어가는 것 같습니다프로젝트를 하나 시작해 보도록 합시다.

!! 프로젝트를 시작하기 전에...

JAVA의 클래스는 재사용과 확장성이 생명이라고 했지요?

어느 누가 어떻게 이 클래스를 사용하게 될지..

또 확장해서(상속받아) 사용하게 될지는 아~ 무도 모릅니다. (대부분 우리가 만드는 클래스는 아무도 안쓰겠지요?? 생명이.. 생명이.. 우리라도 한번 잘 만들어놓고... 계속 쓰도록 합시다...)

그렇다면 이 클래스가 무엇을 하는 것인지.. 어떻게 돌아가는 것인지.. 어떤 클래스에서 상속을 받았는지(상속.. 이번 프로젝트를 진행하는 동안 배웁시다).. 멤버 변수는 무엇이고, 메소드는 어떤 것을 가지고 있는지.. 등등을 기록 해 두어야 합니다.

보기 쉽~... 바로 문서화가 필요하겠지요..

문서화!! 필수적인가요? 꼭해야 합니까?? 물론입니다..

초보 프로그래머 일수록 문서화를 등안시 하는 경향이 있지만, ! !!! 해야 합니다. 저도 초보딱지를 못떼고 있는 형편이긴 합니다...프로젝트를 진행하는 동안 가장 중요한 것이 무엇이냐? 라고 묻는다면 문서화 라고 대답해야 할 정도입니다.. ㅠㅠ

특히 자바는 더욱 그러하죠. 재사용과 확장성이 생명이라고 했으니깐요...

첫 번째 프로젝트의 총괄적인 문서화를 시작합니다.. (프로젝트명, 프로젝트의 목표, 만든사람, 만들기 시작한 날짜와 버전, 사용하게될 class, 각 클래스에 따른 멤버 변수와 메소드, 그리고 용어집 정도를 만들면 되겠지요?? 허걱.. 만들어 내는 코드보다 문서화에 쓰는 내용이 많을 것 같네요.. 하지만 JAVA이기 때문에 걱정은 조금만 하세요...)

!! 시작합시다...

우리 모두(?)에게 익숙한 게임으로 합시다... 섯다라고 아실런지요?? 화투장 두 개를 받아서 같은 숫자면 땡!!(높은거죠?) 다른 숫자이면 두 숫자를 합해 뒷자리()만으로 승부를 겨루는 게임입니다. 만약 78이면 더해서 15이므로 뒷자리 5로 다섯끝이 되지요.. 한끗이 가장 낮고, (10)땡이 가장 높은 게임입니다.. (아시나요? 다 아는건데.. 주절주절 설명하고 있는거죠?? 그죠??? 38광땡, 알리삥이나, 장사나.. 이런건 없다고 합시다... 그냥.. 귀찮아서가 아니라.. ~)

프로젝트 이름을 정합니다. -> 문서화 하셔야 합니다..

필요한 것부터 생각해 봅시다. 일단 카드가 필요합니다.. (일반적인 카드를 만들고, 그 일반적인 카드를 확장 혹은 멤버 변수로 하는 카드덱을 만들껍니다. 카드덱으로 화투패를 만들고, 그 화투패를 가지고 게임을 진행해볼 생각입니다.) 플레이어가 필요합니다. (화투패 두장을 가지고 게임에 참여해야 겠지요.. 돈을 가지고 베팅도 할 수 있도록 만들면, 더욱 좋겠지요...) 게임을 진행할 수 있는 게임도우미도 필요합니다. (승패를 결정하고, 게임 룰을 결정하고, 기타 게임에 필요한 잡스러운 일을 하면 좋겠지요..)

세 개의 필요한 클래스를 정했습니다..(Card class, Player class, GameHelper class) -> 문서화 하셔야 합니다..

클래스를 설계해 봅시다... 기본적으로 일반적인 카드가 가지고 있는건 뭘까요?? 모양과, 숫자입니다.. 카드가 할수 있는 일을 무엇일까요? 세터/게터 메소드와 생성자는 이야기 하지 않겠습니다.. 카드를 보여주고 감추는 일일 것입니다.

  1. // 클래스 카드
  2. public class Card{
  3. // 멤버 변수
  4.     private String shape;
  5.     private int num;
  6. // 생성자..
  7.  
  8. // 세터/게터 메소드
  9.  
  10. // 필요한 메소드
  11.      public void show(){}
  12.      public void hide() {}
  13. }

정도가 되겠네요... -> 다 문서화 하셔야 합니다.

..!! 자바의 위력이 보입니다.. 바로 문서화와 그것을 쉽게 해주는 주석처리입니다. 일반적인 한줄 주석 // , 여러줄 주석 /* ~ */은 기존의 c스타일의 주석입니다. 여태 이렇게 사용했었죠? 자바스타일이 아니네요...

자바스타일? 먼가 또 있는건가? 당연합니다.. 자바라니깐요... 자바스타일의 주석은 문서화를 담당해 줍니다... 제가 꼭 해야된다고 이야기 했던 문서화.. 자바가 다~ 알아서 해 줍니다.

지난시간에 우리 API를 살펴 봤죠? 바로 그 API를 만들어 줍니다. 내가 만든 클래스도 API를 가질 수 있게 되는 겁니다.. 흥분되지 않나요?? 자바가 점점~ 매력적으로 보이시죠?? 누군가가 내가 만든 클래스를 사용하기 위해 나에게 소스코드를 보여주거나 할 것을 요구하지 않는다는 말입니다. 그냥 내가 만들어 놓은 API를 참고하면 되겠죠?

그냥 해 봅시다!!

%javadoc card.java

뭐 일단 에러도 있지만... 무언가 막 만들어집니다..

브라우져를 켜서 살펴봅시다.. index.html 오호~~~ 깔끔하게 문서화 되었습니다.

이제 어차피 주석을 써야했던 부분을 JAVA스타일의 주석으로 고쳐 보겠습니다.

고쳐보세요!!! 아래와 같이 /** 로 시작해서 */로 끝납니다.

클래스의 설명, 메소드의 설명을 넣어주세요..

아래의 예는 클래스의 설명만을 넣었습니다.. 각자 해 보시고 javadoc명령을 내려보세요...

  1. /**
  2. * Card클래스 일반적인 카드한장을 의미합니다. <br />
  3. * @author 내이름
  4. * @version 1.0

댓글

댓글 본문
  1. 레이웰라
     다음은 로또 발생 프로그램입니다.
    이런 기능으로 추가 하려 하는데 좀 도와주세요
    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 로 답변좀 부탁드립니다.