[Android/Flutter 교육] 12일차

MSU·2024년 1월 11일

Android-Flutter

목록 보기
12/85
post-thumbnail

재직자 과정 교육 추천

어제에 이어서 미니 프로젝트 진행

프로젝트 과정 중 변경사항이 있을 경우 반드시 기획서 먼저 수정한 후 작업 하기

클래스에 주생성자에 프로퍼티를 정의하는건 객체를 생성할때 무조건 값을 전달받겠다는 것임
메서드를 호출하여 프로퍼티를 초기화 하는 방법은 메서드를 호출하지 않을 경우가 있어 위험
생성자나 init블록에 해당 메서드를 호출하게 해야 함

강사님은 외부에서 입력받고 객체 생성할때 입력받은 데이터를 전달하는 방식을 택함

미니 프로젝트 - 학생 관리 프로그램

step01

  • src 폴더에 각 역할에 대한 패키지를 생성한다.

com.lion.project1.controller
com.lion.project1.model
com.lion.project1.view
com.lion.project1.dao
com.lion.project1.activity
com.lion.project1.util

step02

  • 프로그램의 상태를 정의하고 상태에 대한 열거형을 정의한다.

총 6가지의 상태로 구분한다.
1. 메뉴를 보여주는 상태
2. 학생 정보를 입력하는 상태
3. 학생 정보를 검색하는 상태
4. 학생 정보 전체를 출력하는 상태
5. 각 과목별 총점과 평균을 확인하는 상태
6. 종료 상태

//ValueUtil.kt

// 프로그램 전체 상태를 정의한다.
enum class ProgramState{
    // 메뉴를 보여주는 상태
    PROGRAM_STATE_SHOW_MENU,
    // 학생 정보를 입력하는 상태
    PROGRAM_STATE_INPUT_STUDENT_INFO,
    // 학생 정보를 검색하는 상태
    PROGRAM_STATE_SEARCH_STUDENT_INFO,
    // 학생 정보 전체를 출력하는 상태
    PROGRAM_STATE_SHOW_STUDENT_INFO_ALL,
    // 각 과목별 총점과 평균을 확인하는 상태
    PROGRAM_STATE_SHOW_POINT_TOTAL_AVG,
    // 종료 상태
    PROGRAM_STATE_TERMINATE
}

step03

MainController 파일 작성
기본 코드 작성

    // main 함수가 호출하는 메서드
    fun run(){

    }

    // 상태값에 따라 객체를 생성해서 반환하는 메서드
    fun getStateClass(){

    }

step04

모든 Activity가 상속받을 BaseActivity파일 생성


abstract class BaseActivity {

    // 초기화 메서드
    abstract fun initActivity()

    // 데이터 처리 메서드
    abstract fun processActivity()

    // 화면에 그리는 처리
    abstract fun showActivity()

    // 수행이 끝났을 때 호출되는 메서드
    abstract fun finishActivity()
}

step05

main.kt에서
MainController 객체 생성후 run 메서드 호출

import com.lion.project1.controller.MainController

fun main() {

    // Controller의 run 메서드를 호출한다.
    val mainController = MainController()
    mainController.run()

}

step06

상태값을 담을 변수 정의

// MainController.kt

val programState = ProgramState.PROGRAM_STATE_TERMINATE

step07

상태별로 분기

// MainController.kt

    // 상태값에 따라 객체를 생성해서 반환하는 메서드
    fun getStateClass() = when(programState){
        ProgramState.PROGRAM_STATE_SHOW_MENU -> null
        ProgramState.PROGRAM_STATE_INPUT_STUDENT_INFO -> null
        ProgramState.PROGRAM_STATE_SEARCH_STUDENT_INFO -> null
        ProgramState.PROGRAM_STATE_SHOW_STUDENT_INFO_ALL -> null
        ProgramState.PROGRAM_STATE_SHOW_POINT_TOTAL_AVG -> null
        ProgramState.PROGRAM_STATE_TERMINATE -> null
    }

step08

각 상태별 Activity 클래스 생성
activity 패키지에 각자 클래스 파일 생성

ShowMenuActivity
InputStudentInfoActivity
SearchStudentInfoActivity
ShowStudentInfoAllActivity
ShowPointTotalAvgActivity
TerminateActivity

step09

상태별로 객체 생성해서 반환

// MainController.kt

    // 상태값에 따라 객체를 생성해서 반환하는 메서드
    fun getStateClass() = when(programState){
        ProgramState.PROGRAM_STATE_SHOW_MENU -> ShowMenuActivity()
        ProgramState.PROGRAM_STATE_INPUT_STUDENT_INFO -> InputStudentInfoActivity()
        ProgramState.PROGRAM_STATE_SEARCH_STUDENT_INFO -> SearchStudentInfoActivity()
        ProgramState.PROGRAM_STATE_SHOW_STUDENT_INFO_ALL -> ShowStudentInfoAllActivity()
        ProgramState.PROGRAM_STATE_SHOW_POINT_TOTAL_AVG -> ShowPointTotalAvgActivity()
        ProgramState.PROGRAM_STATE_TERMINATE -> TerminateActivity()
    }

step10

MainController.kt 의 run 메서드에
showActivity 메서드 호출 코드 작성

        // 화면을 출력하는 메서드를 호출한다.
        activity.showActivity()

step11

ShowMenuActivity.kt 의 showActivity 구현

    override fun showActivity() {
        println("[ 메인 메뉴 ]")
        println("1. 학생 정보 입력")
        println("2. 학생 정보 검색")
        println("3. 학생 정보 전체 출력")
        println("4. 각 과목별 총점과 평균 확인")
        println("5. 종료")
        print("번호를 입력해주세요 : ")
    }

step12

InputStudentInfoActivity.kt 의 showActivity 구현

    override fun showActivity() {
        println("[ 학생정보 입력 ]")
        println("현재 입력된 학생 수 : 10명")
        println("학생 이름 :")
        println("학생 나이 :")
        println("국어 점수 :")
        println("영어 점수 :")
        println("수학 점수 :")
    }

InputStudentInfoActivity.kt 의 showActivity 구현

    override fun showActivity() {
        println("[ 학생정보 입력 ]")
        println("현재 입력된 학생 수 : 10명")
        println("학생 이름 :")
        println("학생 나이 :")
        println("국어 점수 :")
        println("영어 점수 :")
        println("수학 점수 :")
    }

SearchStudentInfoActivity.kt 의 showActivity 구현

     override fun showActivity() {
         // 여러분들이 작업한 부분

         // 강사랑 같이 작업한 부분
         println("[ 학생 정보 검색 ]")
         println("검색할 학생 이름 : ")
         println("학생 이름 : 0000 ")
         println("학생 나이 : 0000 ")
         println("국어 점수 : 0000 ")
         println("영어 점수 : 0000 ")
         println("수학 점수 : 0000 ")
     }

ShowPointTotalAvgActivity.kt 의 showActivity 구현'

    override fun showActivity() {
        // 여러분들이 작업한 부분

        // 강사랑 같이 작업한 부분
        println("[ 점수 통계 ]")
        println("국어 총점 : 0000")
        println("영어 총점 : 0000")
        println("수학 총점 : 0000")
        println("국어 평균 : 0000")
        println("영어 평균 : 0000")
        println("수학 평균 : 0000")
    }

ShowStudentInfoAllActivity.kt 의 showActivity 구현

override fun showActivity() {
        // 여러분들이 작업한 부분

        // 강사랑 같이 작업한 부분
        println("[ 학생 전체 정보 ]")
        println("학생 이름 : 0000")
        println("학생 나이 : 0000")
        println("국어 점수 : 0000")
        println("영어 점수 : 0000")
        println("수학 점수 : 0000")
        println()
        println("학생 이름 : 0000")
        println("학생 나이 : 0000")
        println("국어 점수 : 0000")
        println("영어 점수 : 0000")
        println("수학 점수 : 0000")
        println()
        println("학생 이름 : 0000")
        println("학생 나이 : 0000")
        println("국어 점수 : 0000")
        println("영어 점수 : 0000")
        println("수학 점수 : 0000")
        println()
    }

TerminateActivity.kt 의 showActivity 구현

step13

각 상태별로 필요한 기능들을 정리한다.

메뉴를 보여주는 상태

  • 메뉴의 번호를 입력받는 기능

학생 정보를 입력하는 상태

  • 현재 입력된 학생의 수를 보여주는 기능
  • 학생의 정보를 입력하는 기능
  • 입력받은 학생 정보를 저장하는 기능(잘못 입력된 경우를 대비한다)

학생 정보를 검색하는 상태

  • 학생 이름을 입력받는 기능
  • 입력받은 학생의 정보를 출력하는 기능(이름이 같은 학생들이 있을 경우 모두 출력)
  • 학생 정보가 없을 경우에 안내 문구를 보여주는 기능

학생 전체 정보를 출력하는 상태

  • 학생 한명의 정보를 출력하는 기능
  • 모든 학생들의 정보를 출력하는 기능
  • 입력한 학생 정보가 없을 경우 안내 문구를 보여주는 기능

각 과목별 총점과 평균을 보여주는 상태

  • 각 과목별 총점 계산하는 기능
  • 각 과목별 평균 계산하는 기능
  • 입력한 학생 정보가 없을 경우 안내 문구를 보여주는 기능

프로그램을 종료하는 상태

  • 프로그램을 종료하는 기능
  • 종료 안내 문구를 출력하는 기능

스트림

자바와 같은 프로그래밍 언어에서 프로그램과 외부와의 연결통로를 스트림(Stream)이라고 한다.
데이터를 외부에 보낼 때 데이터를 압축해주는 필터스트림을 거치고 출력스트림을 통해 외부로
외부에서 입력스트림을 통해 압축해제필터 스트림을 거쳐 데이터를 프로그램으로 들여옴

기본 스트림은 데이터 입출력 담당
필터 스트림은 데이터 가공 담당
파일, 서버, 프린터 등 연결 대상에 따라 기본 스트림 코드는 다 다르지만 모두 똑같은 객체를 반환함
연결 대상에 상관없이 필터스트림은 동일함

profile
안드로이드공부

0개의 댓글