ABOUT ME

-

오늘
-
어제
-
-
  • KOSTA 교육 20일차(Project)
    Review 2020. 6. 21. 17:35

    18.11.23(금)

     

    배운 내용

     

    1. 자바 미니프로젝트

    1. Project(프로젝트)

    2일에 걸쳐 완성한 프로젝트를 소개 및 정리해보려 한다.
    주제는 식당의 식단표 및 식권시스템으로 날짜에 맞는 식단표를 입력하고 출력하여 식단표를 확인할 수 있고, 식권을 구입하여 식사를 할 수 있도록 하는 시스템을 구현하였다.

    • 프로젝트를 분석설계하는 과정에서도 순서가 매우 중요하다.
    • 이 중에서도 요구분석이 매우 중요한데 그 이유는 사용자의 요구에 따른 분석이 철저해야 그에 맞는 정확한 기능를 구현시킬 수 있기 때문이다.
    • 순서로는 다음과 같다
      1. 주제 선정
      2. Use case 만들기
      3. 요구분석 정의서 작성
      4. 요구분석 명세서 작성
      5. 도메인 설계
      6. 구현(코딩), 테스트
      7. 보고서 작성(PPT)
      8. 구현 후 Class Diagram 작성
    • 이 순서에 맞추어 PPT를 작성한다.

     

    • 추상클래스인 user클래스를 생성하여 customer와 admin클래스를 상속시켜준다.
    • 공통으로 사용되는 변수들을 선언하고 생성자와 getter, setter를 선언해준다.
    • showMenu() 메소드를 선언하여 각 클래스별로 메뉴를 불러올 수 있도록 한다.

     

    • 해당되는 추가 변수를 선언하고 super함수로 상속받은 변수들을 선언하여 주고, toString을 통하여 변수값을 return해준다.
    • showMenu() 메소드를 오버라이딩 하고 키보드로 입력받아 해당 입력값을 return한다.
    • 본인 클래스에만 해당되는 메소드를 추가해주어 구현한다.

     

    • 해당되는 추가 변수를 선언하고 super함수를 통하여 상속받은 변수를 선언한다.
    • showMenu()를 오버라이딩 하고 admin클래스에 해당되는 메소드를 선언하고 구현한다.

     

    • Menu클래스에서는 4가지 메뉴에 관한 배열을 생성하여 반복문을 사용해 순서대로 4가지 메뉴가 출력될 수 있도록 메소드를 생성하고 setter, getter도 선언한다.
    • toString으로 return을 해준다.

     

    • ArrayList를 Menu 타입으로 선언한다. 월별 달력을 사용할 것이기 때문에 Calendar를 선언하고 daynum 변수로 월 최종일 수를 선언한다.
    • addMenu() 메소드의 파라미터 값을 day(해당 날짜)와 menu를 선언하고 try, catch문을 사용하여 최종일(n)이 0이 될 때 최종일로 표시될 수 있도록 한다. 이유는 최종일이 출력되야하지만 0이 나올 수 있기 때문이다.
    • ArrayList의 특성 상 값을 넣어주면 값의 뒤로 기존 값들이 밀리기 때문에 기존의 값을 삭제 했다가 다시 넣어주면 그 자리에 들어가기 때문에 동일한 자리에 있게 된다.
    • modify()메소드도 동일하게 day값을 미리 삭제했다가 day의 메뉴를 수정하면 그 자리에 값이 들어간다.
    • remove() 메소드는 해당 일이 휴일이기 때문에 메뉴를 휴일로 작성하고 출력한 후에 뒤로 밀린 날짜는 삭제하여 데이터 공간을 확보한다.
    • print() 메소드는 해당 day를 출력한다.
    • printAll() 메소드는 전체출력으로 dayof를 요일로 나타내고 해당 요일과 더한 i가 0이 되면 토요일이 되고 이 값을 endofweek으로 선언하고 break 한다.
    • 금주 날짜 입력은 day가 endofweek보다 작거나 같을 때 n을 입력하여 날짜를 나타내준다.
    • 금주 메뉴 입력은 총 4개의 메뉴이므로 4보다 작을 때 그리고 dayof(요일)에 맞추어 띄어쓰기를 해준 후 day가 endofweek 보다 작거나 같을 때 n값에 j반복으로 메뉴를 입력해준다.
    • 차주 날짜 입력은 endofweek + 1 이 endofweek + 7 보다 작거나 같을 때 n값을 입력하여 날짜를 나타내는데 + 1의 이유는 토요일이 0이기 때문에 +1을 해주어 일요일을 나타내고 +7은 토요일을 나타내기 위함이다.
    • 차주 메뉴 입력은 금주메뉴와 동일하게 n값에 j반복으로 메뉴를 입력한다.

     

    • user class를 ArrayList 배열 타입으로 선정하고 MenuManager 객체를 호출한다.
    • join() 메소드는 회원가입 메소드로서 둘 중에 하나를 선택하여 가입하는데 switch문을 사용하여 각 해당되는 선택지별 값을 출력한다.
      만약 입력 id가 기존id와 같다면 예외를 던진다. 같지 않다면 반복문 내에서 각 해당되는 입력값을 입력하고 customer객체의 파라미터 값들을 배열에 추가한다. admin도 같은 과정이다.
    • login() 메소드는 로그인 메소드로서 id와 pw를 입력하는데 여기서 index값을 이용하여 true false를 판별한다. 만약 두개 다 true라면 index 값이 i로서 userList에 확인되어 로그인이 된다. 만약 틀리다면 id가 틀릴경우 및 pw가 틀릴경우에 맞게 출력한다.
    • showMenu()는 user에 있는 메소드를 return한다.
    • deposit() 메소드는 Customer와 형변환이 된다면 해당 클래스의 메소드를 호출한다.
    • printBalance(), buy(), information(),modify(), ticketUse(), profit(), addMenu(), menumodify()메소드도 이하 동문
    • sell()메소드는 빈 좌석 에서 sell(식권판매)을 감하여 나타낸다.

     

    • manager 객체를 생성하고 반복문을 이용하여 키보드로 입력하여 동작할 수 있게 한다.
    • switch문으로 각 기능별 메소드를 호출하여 입력 시 출력하고 continue를 통하여 계속 반복할 수 있도록 한다.
    • 여기서 admin과 customer 출력 메소드를 구별해주어야 하기 때문에 manager에서 선언한 current를 활용하여 출력한다. 이때 강제로 형변환을 하여 해당 클래스에 해당되는 값을 출력할 수 있게끔 한다.

    프로젝트 간 느낀점

    자바를 약 한 달간 배우면서 정말 많은 것들을 배웠지만 사실 해당되는 이론의 교육을 받고 해당 예제만 풀었을 때는 당연히 그 이론을 사용하여 풀어야 했기 때문에 그런 것에 대한 고민은 하지 않아도 되서 해당 이론의 코딩고민만 하면 됐었다.

     

    하지만 프로젝트를 하면 처음 요구사항 분석부터 해서 코딩하여 구현까지 하는 과정 모두 자기 자신이 생각해야하는 부분이기 때문에 정해진 것이 없어 구현하기 굉장히 시행착오가 많았다.

     

    여기서 정말 크게 느낀 부분은 코딩 뿐만이 아니라 설계 과정에서 잘 해놔야 코딩을 할 때도 헷갈리지 않고 할 수 있다는 것을 느꼈고, 혼자서는 생각이 나지 않고 해결이 안되었던 부분들이 함께라면 가능했다는 점이 와 닿았다.

     

    첫 언어를 배우고 첫 프로젝트를 해본 소감은 내가 공부할 부분들이 정말 많고 지속적으로 공부하여 많은 프로젝트를 통해 계속 성장해나가야만 이 언어를 이해하고 생각대로 구현할 수 있겠다는 것을 깨달았다.
    단지 이론만 안다고 해서 구현을 할 수 있지않다는 것을 뼈저리게 느꼈고 앞으로의 학습방법의 방향을 바꿔야겠다는 생각을 했다.
    다음 주부터는 SQL을 학습하는데 또 새로운 마음으로 열심히 해야겠다는 마음가짐으로 임해야겠다.

     

    “ 새로운 언어도 화이팅!!!!!”

    댓글