π§βπ» κ°μΈ νλ‘μ νΈ - μ£Όμλ‘ λ§λ€κΈ° (JAVA)
JAVAλ‘ κ΅¬νλ μ£Όμλ‘ κ΄λ¦¬ (CRUD) Project μ λλ€.
JAVA μ£Όμλ‘ κ΄λ¦¬ νλ‘κ·Έλ¨
1. νλ‘μ νΈ μκ°
γ €μ΄ νλ‘μ νΈλ JAVAλ‘ κ΅¬νλ μ£Όμλ‘ κ΄λ¦¬ νλ‘κ·Έλ¨μ λλ€.
γ €μ¬μ©μ μ 보λ₯Ό μ , μΆλ ₯ν μ μμΌλ©° μμ , μμ , μ‘°νκ° κ°λ₯ν©λλ€.
2. νλ‘μ νΈ κ΅¬μ‘°
μμΈ κ΅¬μ‘°λ νμ΄μ§ μλ¨μ κΉνλΈ λ§ν¬λ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ
πsrc βββπcommon.utils - πλ¬Έμμ΄ μ²λ¦¬, λ μ§ κ³μ°, νκΈ μ΄μ± μΆμΆ μ νΈλ¦¬ν° βββπconsole.academy - πμ£Όμλ‘ λ©λ΄ , CRUD λ‘μ§
3. μ£Όμ μ½λ
CommonUtils.java
μλ μ½λλ κ³΅ν΅ μ νΈλ¦¬ν° λ©μλλ€μ ν¬ν¨νκ³ μμ΅λλ€.
μ£Όμ κΈ°λ₯μΌλ‘λ λ¬Έμμ΄μ΄ μ«μμΈμ§ 체ν¬, λ λ μ§μ μ°¨μ΄λ₯Ό ꡬνλ λ©μλ, λ¬Έμμ΄μ int λ°°μ΄λ‘ λ³ννλ λ©μλ, νκΈ μ΄μ±μ μΆμΆνλ λ©μλ λ±μ΄ ν¬ν¨λμ΄ μμ΅λλ€.
public class CommonUtils {
// λ¬Έμμ΄μ΄ μ«μ νμμ΄λ©΄ true, μλλ©΄ false λ°ν λ©μλ
public static boolean isNumber(String value) {
for(int i=0; i < value.length(); i++) {
int code = Character.codePointAt(value, i);
if(!(code >= '0' && code <= '9')) return false; // μ«μκ° μλ λ¬Έμκ° μμΌλ©΄ false
}
return true; // λͺ¨λ λ¬Έμκ° μ«μμΌ κ²½μ° true λ°ν
}
// λ λ μ§ μ°¨μ΄λ₯Ό λ°ννλ λ©μλ
// λ§€κ°λ³μ: String νμ
μ λ λ μ§, λ μ§ ν¨ν΄, ꡬλΆμ(λ¨μ)
public static long getDiffBetweenDates(String stFDate, String stSDate, String pattern, char delim) throws ParseException {
// 1. λ§€κ°λ³μμ μ λ¬λ patternμΌλ‘ SimpleDateFormat κ°μ²΄ μμ±
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
// 2. λ μ§ νμμ String -> Date : parse()
Date fDate = dateFormat.parse(stFDate);
Date sDate = dateFormat.parse(stSDate);
// 3. μκ°μ°¨ ꡬνκΈ°: getTime()
long fTime = fDate.getTime();
long sTime = sDate.getTime();
long diff = Math.abs(fTime - sTime);
// 4. λ§€κ°λ³μ delimμ λ°λ₯Έ λ μ§ μ°¨μ΄ λ°ν
switch(Character.toUpperCase(delim)) {
case 'D': return diff / 1000 / 60 / 60 / 24; // λ μ§ μ°¨μ΄
case 'H': return diff / 1000 / 60 / 60; // μκ° μ°¨μ΄
case 'M': return diff / 1000 / 60; // λΆ μ°¨μ΄
default: return diff / 1000; // κΈ°λ³Έμ μΌλ‘ μ΄ μ°¨μ΄
}
}
// λ¬Έμμ΄μ int[] λ°°μ΄λ‘ λ³ν
public static int[] toIntArray(String value) {
int[] intArray = new int[value.length()];
for(int i = 0; i < value.length(); i++)
intArray[i] = (int)value.charAt(i); // κ° λ¬Έμμ λν μ λμ½λ κ°μΌλ‘ λ³ν
return intArray;
}
// μ£Όμ΄μ§ λ¬Έμμ μ΄μ±μ μΆμΆνλ λ©μλ
public static char getInitialConsonant(String value) {
// μ ν¨ν νκΈμΈμ§ 체ν¬
if(!Pattern.matches("^[κ°-ν£]{2,}$", value.trim())) return '0'; // νκΈμ΄ μλλ©΄ '0' λ°ν
char lastName = value.trim().charAt(0); // 첫 λ²μ§Έ λ¬Έμ κ°μ Έμ€κΈ°
// μ΄μ±μ μΈλ±μ€ κ³μ°
int index = (lastName - 'κ°') / 28 / 21;
char[] initialConsonant = {'γ±','γ²','γ΄','γ·','γΈ','γΉ','γ
','γ
','γ
','γ
','γ
','γ
','γ
','γ
','γ
','γ
','γ
','γ
','γ
'};
return initialConsonant[index]; // ν΄λΉ μ΄μ± λ°ν
}
}
AddressApp.java
μλ μ½λλ μ£Όμ κ΄λ¦¬ μ ν리μΌμ΄μ μ λ©μΈ λ‘μ§μ ꡬνν κ²μ λλ€.
μ¬μ©μλ λ©λ΄λ₯Ό μ ννμ¬ μ£Όμ κ΄λ ¨ μμ μ μνν μ μμ΅λλ€.
λ©μΈ λ©λ΄μμλ μ£Όμ μΆκ°, μμ , μμ λ±μ κΈ°λ₯μ μ 곡ν©λλ€.
public class AddressApp {
public static void main(String[] args) {
// AddressLogic κ°μ²΄ μμ±
AddressLogic logic = new AddressLogic();
while(true) {
// 1. λ©μΈ λ©λ΄ μΆλ ₯
logic.printMainMenu();
// 2. λ©μΈ λ©λ΄ λ²νΈ μ
λ ₯ λ°κΈ°
int mainMenu = logic.getMenuNumber();
// 3. λ©μΈ λ©λ΄μ λ°λ₯Έ λΆκΈ°
logic.seperateMainMenu(mainMenu);
}
}
}
AddressLogic.java
μλ μ½λλ μ£Όμλ‘ κ΄λ¦¬ μμΈ κΈ°λ₯μ λ΄λΉν©λλ€.
μ£Όμλ‘μ μ¬λμ μΆκ°, μμ , μμ , κ²μ λ° μΆλ ₯ν μ μμΌλ©° μ¬μ©μμκ² κΈ°λ₯μ λ§λ μ μ ν λ©μΈμ§λ₯Ό μ λ¬ν©λλ€.
public class AddressLogic {
//λ©€λ²λ³μ
List<Person> person;
//μμ±μ
public AddressLogic() {
person = new Vector<>();
}
//λ©€λ² λ©μλ
// 1.λ©λ΄ μΆλ ₯μ© λ©μλ
public void printMainMenu() {
System.out.println("====================μ£Όμλ‘ λ©λ΄====================");
System.out.println(" 1.μ
λ ₯ 2.μΆλ ₯ 3.μμ 4.μμ 5.κ²μ 9.μ’
λ£");
System.out.println("===============================================");
System.out.println("λ©λ΄ λ²νΈλ₯Ό μ
λ ₯νμΈμ?");
}
//2.λ©λ΄ λ²νΈ μ
λ ₯μ© λ©μλ
public int getMenuNumber() {
Scanner sc = new Scanner(System.in);
int menu = -1;
while(true) {
try {
String menuStr = sc.nextLine().trim();
menu = Integer.parseInt(menuStr);
break;
} catch(Exception e) {
System.out.println("μ«μλ§ μ
λ ₯νμΈμ");
}
} // while
return menu;
}
// 3.λ©λ΄ λ²νΈμ λ°λ₯Έ λΆκΈ°μ© λ©μλ
public void seperateMainMenu(int mainMenu) {
switch(mainMenu) {
case 1://μ
λ ₯
setPerson();
break;
case 2://μΆλ ₯
printPersonByInitial();
break;
case 3://μμ
updatePerson();
break;
case 4://μμ
deletePerson();
break;
case 5://κ²μ
searchPerson();
break;
case 9://μ’
λ£
System.out.println("νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€");
System.exit(0);
default:
System.out.println("λ©λ΄μ μλ λ²νΈμ
λλ€");
} // switch
}
public void setPerson() {
Scanner sc = new Scanner(System.in);
System.out.println(">>>μ΄λ¦μ μ
λ ₯νμΈμ?");
String name = sc.nextLine().trim();
System.out.println(">>>λμ΄λ₯Ό μ
λ ₯νμΈμ?");
int age = -1;
while(true) {
try {
age = Integer.parseInt(sc.nextLine().trim());
break;
} catch(NumberFormatException e) {
System.out.println("λμ΄λ μ«μλ‘λ§ μ
λ ₯νμΈμ");
}
}
System.out.println(">>μ¬λκ³³μ μ
λ ₯νμΈμ");
String place = sc.nextLine().trim();
System.out.println(">>>μ°λ½μ²λ₯Ό μ
λ ₯νμΈμ");
String PhoneNumber = sc.nextLine().trim();
person.add(new Person(name, age, place, PhoneNumber));
System.out.println("μ
λ ₯λμμ΅λλ€\r\n");
}
private void printPersonByInitial() {
Map<Character, List<Person>> personMap = new HashMap<>();
// μ΄λ¦μ μ΄μ±μ λ°λΌ μ¬λμ κ·Έλ£Ήν
for (Person p : person) {
char initialConsonant = CommonUtils.getInitialConsonant(p.name);
List<Person> group = personMap.getOrDefault(initialConsonant, new ArrayList<>());
group.add(p);
personMap.put(initialConsonant, group);
}
// μ΄μ±λ³λ‘ κ·Έλ£Ήνλ μ¬λλ€μ μΆλ ₯
boolean isEmpty = true; // λͺ
λ¨μ΄ λΉμ΄μλμ§ μ¬λΆλ₯Ό νμΈνκΈ° μν νλκ·Έ
for (char consonant = 'γ±'; consonant <= 'γ
'; consonant++) {
List<Person> group = personMap.get(consonant);
if (group != null && !group.isEmpty()) {
isEmpty = false; // λΉμ΄μμ§ μμ κ·Έλ£Ήμ΄ μ‘΄μ¬νλ©΄ νλκ·Έλ₯Ό falseλ‘ λ³κ²½
System.out.println("[" + consonant + " μΌλ‘ μμνλ λͺ
λ¨]");
for (Person p : group) {
p.print();
}
}
}
// λͺ
λ¨μ΄ λΉμ΄μμ λ λ©μμ§ μΆλ ₯
if (isEmpty) {
System.out.println("μΆλ ₯ν λͺ
λ¨μ΄ μμ΅λλ€");
}
}
//7.κ²μμ© λ©μλ
private void searchPerson() {
Person findPerson = findPersonByName("κ²μ");
if (findPerson != null) {
System.out.println(String.format("[%sλ‘ κ²μν κ²°κ³Ό]", findPerson.name));
findPerson.print();
}
}
public Person findPersonByName(String message) {
System.out.println(message + "ν μ¬λμ μ΄λ¦μ μ
λ ₯νμΈμ?");
Scanner sc = new Scanner(System.in);
String name = sc.nextLine().trim();
for (Person p : person)
if (p.name.equals(name))
return p;
System.out.println(name + "λ‘(μΌλ‘) κ²μλ μ λ³΄κ° μμ΄μ");
return null;
}
//9.μμ μ© λ©μλ
private void updatePerson() {
Person findPerson = findPersonByName("μμ ");
if (findPerson != null) {
Scanner sc = new Scanner(System.in);
System.out.printf("(νμ¬ λμ΄ %s) λͺ μ΄λ‘ μμ νμκ² μ΅λκΉ?%n", findPerson.age);
while(true) {
try {
findPerson.age = Integer.parseInt(sc.nextLine().trim());
break;
} catch(Exception e) {
System.out.println("λμ΄λ μ«μλ§ μ
λ ₯νμΈμ");
}
} // while
System.out.printf("(νμ¬ μ£Όμ %s) μ΄λ μ£Όμλ‘ μμ νμκ² μ΅λκΉ?%n", findPerson.place);
findPerson.place = sc.nextLine().trim();
System.out.printf("(νμ¬ μ°λ½μ² %s) μ΄λ€ λ²νΈλ‘ μμ νμκ² μ΅λκΉ?%n", findPerson.PhoneNumber);
findPerson.PhoneNumber = sc.nextLine().trim();
System.out.printf("[%sκ°(μ΄) μλμ κ°μ΄ μμ λμμ΅λλ€]%n", findPerson.name);
findPerson.print(); // μμ λ΄μ©μ νμΈνκΈ° μν μΆλ ₯
}
}
//10.μμ μ©
private void deletePerson() {
Person findPerson = findPersonByName("μμ ");
if (findPerson != null) {
for (Person p : person)
if (findPerson.equals(p)) {
person.remove(p);
System.out.printf("[%sκ°(μ΄) μμ λμμ΅λλ€]%n", findPerson.name);
break;
}
}
}
}
Person.java
μλ μ½λλ μ¬λμ μ 보λ₯Ό λνλ΄λ ν΄λμ€λ‘, μ΄λ¦, λμ΄, κ±°μ£Όμ§, μ°λ½μ²λ₯Ό νλλ‘ κ°μ§λλ€.
κΈ°λ³Έ μμ±μμ μΈμ μμ±μλ₯Ό μ 곡νλ©°, μ¬λμ μ 보λ₯Ό λ¬Έμμ΄ νμμΌλ‘ λ°ννλ λ©μλμ μΆλ ₯νλ λ©μλλ₯Ό κ°μ§κ³ μμ΅λλ€.
public class Person implements Serializable {
//[νλ] ν΄λμ€μ μμ± μ μ
public String name; // μ¬λμ μ΄λ¦
public int age; // μ¬λμ λμ΄
public String place; // μ¬λμ κ±°μ£Όμ§
public String PhoneNumber; // μ¬λμ μ°λ½μ²
// κΈ°λ³Έ μμ±μ - νλλ₯Ό μ΄κΈ°ννμ§ μκ³ κ°μ²΄λ₯Ό μμ±νλ μμ±μ
public Person() {}
// μΈμ μμ±μ - νλλ₯Ό μ΄κΈ°ννλ μμ±μ
public Person(String name, int age, String place, String PhoneNumber) {
this.name = name; // μ΄λ¦ μ΄κΈ°ν
this.age = age; // λμ΄ μ΄κΈ°ν
this.place = place; // κ±°μ£Όμ§ μ΄κΈ°ν
this.PhoneNumber = PhoneNumber; // μ°λ½μ² μ΄κΈ°ν
}
//λ©€λ² λ©μλ
// 1.μ¬λμ μ 보λ₯Ό λ°ννλ λ©μλ
String get() {
return String.format("μ΄λ¦:%s, λμ΄:%d, μ¬λ κ³³:%s, μ°λ½μ²:%s", name, age, place, PhoneNumber);
}
// 2.μ¬λμ μ 보λ₯Ό μΆλ ₯νλ λ©μλ
void print() {
System.out.println(get()); // get() λ©μλλ₯Ό νΈμΆνμ¬ μΆλ ₯
}
}