
재직자 과정 교육 추천
어제에 이어서 미니 프로젝트 진행
프로젝트 과정 중 변경사항이 있을 경우 반드시 기획서 먼저 수정한 후 작업 하기
클래스에 주생성자에 프로퍼티를 정의하는건 객체를 생성할때 무조건 값을 전달받겠다는 것임
메서드를 호출하여 프로퍼티를 초기화 하는 방법은 메서드를 호출하지 않을 경우가 있어 위험
생성자나 init블록에 해당 메서드를 호출하게 해야 함
강사님은 외부에서 입력받고 객체 생성할때 입력받은 데이터를 전달하는 방식을 택함
com.lion.project1.controller
com.lion.project1.model
com.lion.project1.view
com.lion.project1.dao
com.lion.project1.activity
com.lion.project1.util
총 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
}
MainController 파일 작성
기본 코드 작성
// main 함수가 호출하는 메서드
fun run(){
}
// 상태값에 따라 객체를 생성해서 반환하는 메서드
fun getStateClass(){
}
모든 Activity가 상속받을 BaseActivity파일 생성
abstract class BaseActivity {
// 초기화 메서드
abstract fun initActivity()
// 데이터 처리 메서드
abstract fun processActivity()
// 화면에 그리는 처리
abstract fun showActivity()
// 수행이 끝났을 때 호출되는 메서드
abstract fun finishActivity()
}
main.kt에서
MainController 객체 생성후 run 메서드 호출
import com.lion.project1.controller.MainController
fun main() {
// Controller의 run 메서드를 호출한다.
val mainController = MainController()
mainController.run()
}
상태값을 담을 변수 정의
// MainController.kt
val programState = ProgramState.PROGRAM_STATE_TERMINATE
상태별로 분기
// 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
}
각 상태별 Activity 클래스 생성
activity 패키지에 각자 클래스 파일 생성
ShowMenuActivity
InputStudentInfoActivity
SearchStudentInfoActivity
ShowStudentInfoAllActivity
ShowPointTotalAvgActivity
TerminateActivity

상태별로 객체 생성해서 반환
// 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()
}
MainController.kt 의 run 메서드에
showActivity 메서드 호출 코드 작성
// 화면을 출력하는 메서드를 호출한다.
activity.showActivity()
override fun showActivity() {
println("[ 메인 메뉴 ]")
println("1. 학생 정보 입력")
println("2. 학생 정보 검색")
println("3. 학생 정보 전체 출력")
println("4. 각 과목별 총점과 평균 확인")
println("5. 종료")
print("번호를 입력해주세요 : ")
}
override fun showActivity() {
println("[ 학생정보 입력 ]")
println("현재 입력된 학생 수 : 10명")
println("학생 이름 :")
println("학생 나이 :")
println("국어 점수 :")
println("영어 점수 :")
println("수학 점수 :")
}
override fun showActivity() {
println("[ 학생정보 입력 ]")
println("현재 입력된 학생 수 : 10명")
println("학생 이름 :")
println("학생 나이 :")
println("국어 점수 :")
println("영어 점수 :")
println("수학 점수 :")
}
override fun showActivity() {
// 여러분들이 작업한 부분
// 강사랑 같이 작업한 부분
println("[ 학생 정보 검색 ]")
println("검색할 학생 이름 : ")
println("학생 이름 : 0000 ")
println("학생 나이 : 0000 ")
println("국어 점수 : 0000 ")
println("영어 점수 : 0000 ")
println("수학 점수 : 0000 ")
}
override fun showActivity() {
// 여러분들이 작업한 부분
// 강사랑 같이 작업한 부분
println("[ 점수 통계 ]")
println("국어 총점 : 0000")
println("영어 총점 : 0000")
println("수학 총점 : 0000")
println("국어 평균 : 0000")
println("영어 평균 : 0000")
println("수학 평균 : 0000")
}
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()
}
각 상태별로 필요한 기능들을 정리한다.
자바와 같은 프로그래밍 언어에서 프로그램과 외부와의 연결통로를 스트림(Stream)이라고 한다.
데이터를 외부에 보낼 때 데이터를 압축해주는 필터스트림을 거치고 출력스트림을 통해 외부로
외부에서 입력스트림을 통해 압축해제필터 스트림을 거쳐 데이터를 프로그램으로 들여옴
기본 스트림은 데이터 입출력 담당
필터 스트림은 데이터 가공 담당
파일, 서버, 프린터 등 연결 대상에 따라 기본 스트림 코드는 다 다르지만 모두 똑같은 객체를 반환함
연결 대상에 상관없이 필터스트림은 동일함