@startuml
'https://plantuml.com/class-diagram

skinparam classAttributeIconSize 0

' PlantUML Parser 자동 생성
class employee.Employee {
- EmployeeNumber employeeNum
- Name name
- CareerLevel cl
- PhoneNumber phoneNum
- BirthDay birthday
- CertificationLevel certi
+ boolean isValid()
+ String toString()
+ String getFullEmployeeNumber()
+ EmployeeNumber getEmployeeNum()
+ void setEmployeeNum(EmployeeNumber)
+ Name getName()
+ void setName(Name)
+ CareerLevel getCl()
+ void setCl(CareerLevel)
+ PhoneNumber getPhoneNum()
+ void setPhoneNum(PhoneNumber)
+ BirthDay getBirthday()
+ void setBirthday(BirthDay)
+ CertificationLevel getCerti()
+ void setCerti(CertificationLevel)
}
class option.print.CountPrintOption {
+ String report(List<Employee>,String)
+ int getPrintLimit()
}
class employee.EmployeeNumber {
- String fullNumber
- String shortNumber
+ String getFullNumber()
+ void setFullNumber()
+ String getShortNumber()
+ void setShortNumber(String)
+ String toString()
+ boolean isValid()
+ boolean isValidString(String)
}
abstract class employee.EmployeeField {
+ String toString()
+ boolean isValid()
+ boolean isValidString(String)
}
interface option.print.IPrintOption {
~ String report(List<Employee>,String)
~ int getPrintLimit()
}
class command.ModifyCommand {
+ String getCommandType()
+ void run()
- Employee getUpdatedEmployee(Employee,String,String)
}
class employee.PhoneNumber {
- String middleNumber
- String lastNumber
+ String getMiddleNumber()
+ void setMiddleNumber(String)
+ String getLastNumber()
+ void setLastNumber(String)
+ String toString()
+ boolean isValid()
+ boolean isValidString(String)
}
abstract class commandParser.commandValidChecker.OptionValidChecker {
+ void check(String,List<String>)
# {abstract}boolean isValid(String,List<String>)
# {abstract}String getErrorMessage()
}
class employee.Name {
- String firstName
- String lastName
+ String getFirstName()
+ void setFirstName(String)
+ String getLastName()
+ void setLastName(String)
+ String toString()
+ boolean isValid()
+ boolean isValidString(String)
}
class command.CommandFactory {
- Database database
+ Command getCommand(String)
}
class employee.CertificationLevel {
- String certi
+ String getCerti()
+ void setCerti(String)
+ String toString()
+ boolean isValid()
+ boolean isValidString(String)
}
class utility.Logger {
- {static} File file
- {static} String DEFAULT_OUTPUT_FILE_PATH
- {static} String outputFilePath
- {static} ArrayList<String> printBuffer
+ {static} void setOutputFilePath(String)
+ {static} void logConsole(String)
+ {static} void appendLog(String)
+ {static} void flushLogToFile()
+ {static} void flushLogToConsole()
+ {static} void logFile(String)
- {static} boolean getOrCreateFile()
}
class exceptions.InvalidCommandException {
}
class option.Option {
- IPrintOption printOption
- CompareOption compareOption
+ IPrintOption getPrintOption()
+ CompareOption getCompareOption()
}
class commandParser.CommandParser {
- {static} int MIN_SPLIT_CNT
- String delimiter
- CommandTypeChecker commandTypeChecker
- List<OptionValidChecker> optionCheckerList
- CommandFactory commandFactory
- int printLimit
+ Command parseCommand(String)
- boolean isValidCommandLine(String)
- void checkArgsValidation(String,List<String>,List<String>)
- Command getCommand(String,List<String>,List<String>)
- Option getCommandOption(List<String>,List<String>)
- IPrintOption getPrintOption(String)
- CompareOption getCompareOption(String,String,String)
}
class command.SearchCommand {
- List<Employee> testResult
+ String getCommandType()
+ void run()
+ List<Employee> getTestResult()
}
class commandParser.commandValidChecker.PrintOptionChecker {
+ boolean isValid(String,List<String>)
# String getErrorMessage()
}
class command.DeleteCommand {
+ String getCommandType()
+ void run()
}
class commandParser.commandValidChecker.CommandTypeChecker {
- List<String> commandList
+ void check(String)
+ boolean isValid(String)
}
class database.Database {
- List<Employee> employees
- Set<String> usedEmpNumbers
- boolean sorted
+ List<Employee> select()
+ List<Employee> select(CompareOption)
+ List<Employee> select(CompareOption,int)
+ void delete(Employee)
+ void insert(Employee)
+ void update(Employee,Employee)
- void sortDatabase()
- boolean isDuplicateEmployeeNumber(String)
}
class commandParser.commandValidChecker.CompareOptionChecker {
- Map<String,List<String>> columnOptionMap
+ boolean isValid(String,List<String>)
# String getErrorMessage()
}
class EmployeeManager {
- CommandParser commandParser
+ void runCommand(String)
}
class exceptions.ImproperlyConfigured {
}
class employee.CareerLevel {
- String cl
+ String getCl()
+ void setCl(String)
+ String toString()
+ boolean isValid()
+ boolean isValidString(String)
}
abstract class option.compare.CompareOption {
# String query
+ {abstract}boolean compare(Employee)
}
class option.print.ListPrintOption {
- int printLimit
+ String report(List<Employee>,String)
+ int getPrintLimit()
}
'class option.compare.FirstNameCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.EmployeeNumberCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.NameCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.LastNameCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.DefaultCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.CareerLevelCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.BirthdayYearCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.BirthdayCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.CertificationCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.BirthdayMonthCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.PhoneNumberCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.LastPhoneNumberCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.MiddlePhoneNumberCompareOption {
'+ boolean compare(Employee)
'}
'class option.compare.BirthdayDayCompareOption {
'+ boolean compare(Employee)
'}
abstract class command.Command {
# int paramCount
# Database database
# Option option
# List<String> params
# void print(List<Employee>)
# boolean isParamCountValid()
+ Database getDatabase()
+ Option getOption()
+ void setOption(Option)
+ List<String> getParams()
+ void setParams(List<String>)
+ {abstract}String getCommandType()
+ {abstract}void run()
}
class commandParser.commandValidChecker.Option3Checker {
+ boolean isValid(String,List<String>)
# String getErrorMessage()
}
class employee.BirthDay {
- String year
- String month
- String day
+ String getYear()
+ void setYear(String)
+ String getMonth()
+ void setMonth(String)
+ String getDay()
+ void setDay(String)
+ String toString()
+ boolean isValid()
+ boolean isValidString(String)
}
class command.AddCommand {
+ String getCommandType()
+ void run()
- Employee makeNewbie(List<String>)
}
class AmongUs {
- {static} String DEFAULT_INPUT_FILE_PATH
- {static} String DEFAULT_OUTPUT_FILE_PATH
- {static} String inputFileName
- {static} String outputFileName
+ {static} void main(String[])
- {static} void setupFiles(String[])
}


option.print.IPrintOption <|.. option.print.CountPrintOption
employee.EmployeeField <|-- employee.EmployeeNumber
command.Command <|-- command.ModifyCommand
employee.EmployeeField <|-- employee.PhoneNumber
employee.EmployeeField <|-- employee.Name
employee.EmployeeField <|-- employee.CertificationLevel
exceptions.RuntimeException <|-- exceptions.InvalidCommandException
command.Command <|-- command.SearchCommand
commandParser.commandValidChecker.OptionValidChecker <|-- commandParser.commandValidChecker.PrintOptionChecker
command.Command <|-- command.DeleteCommand
commandParser.commandValidChecker.OptionValidChecker <|-- commandParser.commandValidChecker.CompareOptionChecker
exceptions.RuntimeException <|-- exceptions.ImproperlyConfigured
employee.EmployeeField <|-- employee.CareerLevel
option.print.IPrintOption <|.. option.print.ListPrintOption
'option.compare.CompareOption <|-- option.compare.EmployeeNumberCompareOption
'option.compare.CompareOption <|-- option.compare.NameCompareOption
'option.compare.CompareOption <|-- option.compare.DefaultCompareOption
'option.compare.CompareOption <|-- option.compare.CertificationCompareOption
'option.compare.CompareOption <|-- option.compare.FirstNameCompareOption
'option.compare.CompareOption <|-- option.compare.LastNameCompareOption
'option.compare.CompareOption <|-- option.compare.CareerLevelCompareOption
'option.compare.CompareOption <|-- option.compare.BirthdayYearCompareOption
'option.compare.CompareOption <|-- option.compare.BirthdayCompareOption
'option.compare.CompareOption <|-- option.compare.BirthdayMonthCompareOption
'option.compare.CompareOption <|-- option.compare.PhoneNumberCompareOption
'option.compare.CompareOption <|-- option.compare.LastPhoneNumberCompareOption
'option.compare.CompareOption <|-- option.compare.MiddlePhoneNumberCompareOption
'option.compare.CompareOption <|-- option.compare.BirthdayDayCompareOption
commandParser.commandValidChecker.OptionValidChecker <|-- commandParser.commandValidChecker.Option3Checker
employee.EmployeeField <|-- employee.BirthDay
command.Command <|-- command.AddCommand

' Manual 작성
AmongUs ..> EmployeeManager
EmployeeManager --> commandParser.CommandParser
commandParser.CommandParser --> commandParser.commandValidChecker.CommandTypeChecker
commandParser.CommandParser --> commandParser.commandValidChecker.OptionValidChecker
commandParser.CommandParser --> command.CommandFactory
command.CommandFactory ..> command.Command: <<create>>

command.Command *-- database.Database
command.Command *-- option.Option

database.Database *-- employee.Employee
employee.Employee *-- employee.EmployeeField

AmongUs .> utility.Logger
command.Command .up.> utility.Logger

option.Option *-- option.print.IPrintOption
option.Option *-- option.compare.CompareOption

' Hide Option
hide members
'hide fields
'hide methods

'hide circle
'hide stereotype

@enduml
