본문 바로가기
프로젝트/학점 산출 프로그램

[Do it 최종프로젝트] 마무리 ('방송댄스'과목 추가)

by 마진 2021. 5. 30.

지난 오답노트를 통해 부족했던 부분을 고려하여 다시 코드를 작성한 뒤 결과를 확인하고 

교재에 적혀있는 마지막 조건을 추가하였습니다.

 

'Do it 자바 프로그래밍 입문' 교재에서 해당 프로젝트의 코드는 4번 작성하였습니다.

 

 


1. 교재 조건만 보고 소스 없이 코드작성

2. 교재 설명 확인 및 코드 타이핑

  > 보완이 필요한 부분 확인

 

3. 위에서 확인한 부분을 반영하여 전체적인 코드 수정

4. 마지막 조건인 '방송댄스'과목 추가


 

 

세번째 작성 때 생각보다 많은 시행착오를 겪었습니다.

 구성이 조악하지만 책없이 도전해봤고 직접 책의 코드들도 따라쳐봤기 때문에 매우 손쉽게 할 수 있을 것으로 판단했습니다. 하지만 클래스들의 관계를 책과 비슷하게 가져가려고 했을 때 값의 계산과 인스턴스의 저장이 매우 복잡해짐을 확인할 수 있었습니다.

 

해당 프로젝트를 통해 중요하다고 느낀 점은 다음과 같습니다.

(입문자의 개인적인 느낌이기 때문에 실제 프로그래밍과 다를 수 있습니다.)

 

 


 

 - 현실성

 이 프로젝트는 학생들의 등급을 출력하는 프로그램의 구현이였고 당연히 학교는 하나입니다. 

그렇기 때문에 학교의 객체(인스턴스)는 하나이며 싱글톤 패턴으로 구현되었습니다. 객체의 실재 특징을 통해 코드를 효과적으로 작성할 수 있다는 점이 인상깊었습니다.

( 과목클래스에 과목을 신청한 학생들을 고려하여 학생리스트를 넣는 것 역시 인상적입니다. )

 

 - 일반화 (formatting?)

 교재의 소스작성 방식을 모방하여 별도의 클래스와 출력메소드를 만든 뒤 main()메소드 내에서 해당 메소드를 호출하였습니다. 중구난방으로 main()메소드에서 출력방식을 설정했을 때 보다 훨씬 더 간결해짐을 확인했습니다.

  > 간결하고 패턴화된 코드작성 지향

 

 

 - 자료형 (data type)

 인스턴스를 클래스의 메소드를 사용하기 위해 만드는 것으로만 생각하다시피 했지만 인스턴스에 데이터를 저장하여 이를 활용할 수 있다는 생각이 들었습니다. 

 

예를 들어 아래처럼 필드만 있는 클래스를 가정했을 때,

public class Fruit {
    private String name;
    private int price;
    //...
   
    public static void main(String[] args){
    Fruit a1=new Fruit(apple, 1000);
    Fruit a2=new Fruit(banana, 1200);
    
    //...
    }
}

변수 a1과 a2는 각각 자료(Data)를 저장하는 Data Set(저장매체)가 되어 활용될 수 있다는 생각이 들었습니다. 

 

(물론 인스턴스가 객체의 속성과 기능을 의미한다고 (혹은 나타낸다고) 배우나 실질적으로 체감이 되진 않았습니다.)

 

 

 

 

※ 다양한 프로젝트를 통해 코드실력의 향상 필요!


 

 

[수정이 필요한 사항]

- 출력메소드 기능 개선(비효율적)

- 기능 구현에 사용되지 않으며 중복되는 필드 및 메소드 정리 (성적등급관련...)

- 출력결과 모양 다듬기

 

 

 

<작성 소스:  gradesys패키지>

https://github.com/JaewookMun/margin

 

JaewookMun/margin

Contribute to JaewookMun/margin development by creating an account on GitHub.

github.com

 

<클래스 다이어그램>

프로그램 구상

 

1차 구현

 

3차 & 4차 구현

 

 

    <출력결과>

프로젝트 출력결과