diff --git a/src/me/day05/practice/Practice01/AuthMethod.java b/src/me/day05/practice/Practice01/AuthMethod.java new file mode 100644 index 0000000..d03c0ee --- /dev/null +++ b/src/me/day05/practice/Practice01/AuthMethod.java @@ -0,0 +1,8 @@ +package me.day05.practice.Practice01; + +public enum AuthMethod { + FINGERPRINT, PATTERN, PIN, FACE + +} + + diff --git a/src/me/day05/practice/Practice01/CompanyName.java b/src/me/day05/practice/Practice01/CompanyName.java new file mode 100644 index 0000000..70e7fa7 --- /dev/null +++ b/src/me/day05/practice/Practice01/CompanyName.java @@ -0,0 +1,5 @@ +package me.day05.practice.Practice01; + +public enum CompanyName { + SAMSUNG, LG, APPLE +} diff --git a/src/me/day05/practice/Practice01/Electronic.java b/src/me/day05/practice/Practice01/Electronic.java new file mode 100644 index 0000000..3cd581e --- /dev/null +++ b/src/me/day05/practice/Practice01/Electronic.java @@ -0,0 +1,123 @@ +package me.day05.practice.Practice01; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.Objects; + +public class Electronic { + private static int serialNum = 0; + private String productNo; + private String modelName; + private CompanyName companyName; + private LocalDate dateOfMade; + private AuthMethod[] authMethod; + + private Electronic() { + serialNum++; + setProductNo(); + } + + public Electronic(String productNo) { + this.productNo = productNo; + } + + public Electronic(String modelName, CompanyName companyName, LocalDate dateOfMade, AuthMethod[] authMethod) { + this(); + this.modelName = modelName; + this.companyName = companyName; + this.dateOfMade = dateOfMade; + this.authMethod = authMethod; + } + + public String getProductNo() { + return productNo; + } + + private String setProductNo() { + + StringBuilder sb = new StringBuilder(10); + sb.append(LocalDate.now().format(DateTimeFormatter.ofPattern("yyMMdd"))); + + if ( (int)Math.log10(serialNum)+1 == 1){ + sb.append("000"); + sb.append(serialNum); + } else if ( (int)Math.log10(serialNum)+1 == 2) { + sb.append("00"); + sb.append(serialNum); + } else if ( (int)Math.log10(serialNum)+1 == 3) { + sb.append("0"); + sb.append(serialNum); + } else { + sb.append(serialNum); + } + String order = String.format("%04d", serialNum); + String date = LocalDate.now(ZoneId.systemDefault()).toString().replace("-", "").substring(2); + + productNo = String.valueOf(sb); + return productNo; + } + + public String getModelName() { + return modelName; + } + + public void setModelName(String modelName) { + this.modelName = modelName; + } + + public CompanyName getCompanyName() { + return companyName; + } + + public void setCompanyName(CompanyName companyName) { + this.companyName = companyName; + } + + public LocalDate getDateOfMade() { + return dateOfMade; + } + + public void setDateOfMade(LocalDate dateOfMade) { + this.dateOfMade = dateOfMade; + } + + public AuthMethod[] getAuthMethod() { + return authMethod; + } + + public void setAuthMethod(AuthMethod[] authMethod) { + this.authMethod = authMethod; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Electronic that = (Electronic) o; + return Objects.equals(productNo, that.productNo) && Objects.equals(modelName, that.modelName) && companyName == that.companyName && Objects.equals(dateOfMade, that.dateOfMade) && Objects.equals(authMethod, that.authMethod); + } + + @Override + public int hashCode() { + return Objects.hash(productNo, modelName, companyName, dateOfMade, authMethod); + } + + @Override + public String toString() { + return "Electronic{" + + "productNo='" + productNo + '\'' + + ", modelName='" + modelName + '\'' + + ", companyName=" + companyName + + ", dateOfMade=" + dateOfMade + + ", authMethod=" + Arrays.toString(authMethod) + + '}'; + } + + public int authMethodSize(){ + AuthMethod[] values = AuthMethod.values(); + + return values.length; + } +} diff --git a/src/me/day05/practice/Practice01/User.java b/src/me/day05/practice/Practice01/User.java new file mode 100644 index 0000000..ffa87f2 --- /dev/null +++ b/src/me/day05/practice/Practice01/User.java @@ -0,0 +1,124 @@ +package me.day05.practice.Practice01; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.Objects; + +public class User { + private String userId; + private String userPassword; + private String userPhoneNumber; + private String userEmail; + private LocalDate userBirthDate; + private String[] electronicDevices; + private LocalDateTime registerTime; + + public User() { + registerTime = LocalDateTime.now(); + } + + public User(String userId) { + this.userId = userId; + } + + public User(String userId, String userPassword) { + this(); + this.userId = userId; + this.userPassword = userPassword; + } + + public User(String userId, String userPassword, String userPhoneNumber, String userEmail, LocalDate userBirthDate, String[] electronicDevices) { + this(); + this.userId = userId; + this.userPassword = userPassword; + this.userPhoneNumber = userPhoneNumber; + this.userEmail = userEmail; + this.userBirthDate = userBirthDate; + this.electronicDevices = electronicDevices; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserPassword() { + return userPassword; + } + + public void setUserPassword(String userPassword) { + this.userPassword = userPassword; + } + + public String getUserPhoneNumber() { + return userPhoneNumber; + } + + public void setUserPhoneNumber(String userPhoneNumber) { + this.userPhoneNumber = userPhoneNumber; + } + + public String getUserEmail() { + return userEmail; + } + + public void setUserEmail(String userEmail) { + this.userEmail = userEmail; + } + + public LocalDate getUserBirthDate() { + return userBirthDate; + } + + public void setUserBirthDate(LocalDate userBirthDate) { + this.userBirthDate = userBirthDate; + } + + public String[] getElectronicDevices() { + return electronicDevices; + } + + public void setElectronicDevices(String[] electronicDevices) { + this.electronicDevices = electronicDevices; + } + + public LocalDateTime getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(LocalDateTime registerTime) { + this.registerTime = registerTime; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + User user = (User) o; + return Objects.equals(userId, user.userId) && Objects.equals(userPassword, user.userPassword) && Objects.equals(userPhoneNumber, user.userPhoneNumber) && Objects.equals(userEmail, user.userEmail) && Objects.equals(userBirthDate, user.userBirthDate) && Arrays.equals(electronicDevices, user.electronicDevices) && Objects.equals(registerTime, user.registerTime); + } + + @Override + public int hashCode() { + int result = Objects.hash(userId, userPassword, userPhoneNumber, userEmail, userBirthDate, registerTime); + result = 31 * result + Arrays.hashCode(electronicDevices); + return result; + } + + @Override + public String toString() { + return "User{" + + "userId='" + userId + '\'' + + ", userPassword='" + userPassword + '\'' + + ", userPhoneNumber='" + userPhoneNumber + '\'' + + ", userEmail='" + userEmail + '\'' + + ", userBirthDate=" + userBirthDate + + ", electronicDevices=" + Arrays.toString(electronicDevices) + + ", registerTime=" + registerTime + + '}'; + } +} diff --git a/src/me/day05/practice/Practice01/userTest.java b/src/me/day05/practice/Practice01/userTest.java new file mode 100644 index 0000000..a29f468 --- /dev/null +++ b/src/me/day05/practice/Practice01/userTest.java @@ -0,0 +1,64 @@ +package me.day05.practice.Practice01; + +import me.day05.practice.Practice02.Users; +import me.day05.practice.Practice03.Electronics; + +import java.time.LocalDate; +import java.util.Arrays; + +import static me.day05.practice.Practice01.AuthMethod.*; + + +public class userTest { + public static void main(String[] args) { + User userSong = new User("Song", "a1234"); + + System.out.println(userSong); + + String[] electronicDevices = {"GalaxyS", "GalaxyTablet"}; + + User userTae = new User("Tae","b5678", + "010-8885-9677","ussu1112@naver.com", LocalDate.of(1995,8,29), electronicDevices); + + System.out.println(userTae); + + + //Users user = new Users(); - 싱글톤 패턴이기 때문에 불가능 + Users user = Users.getInstance(); + User userHyoung = user.createUser("Hyoung", "c8901"); + User userTaeHyoung = user.createUser("TaeHyoung", "d9021"); + User userSonng = user.createUser("Tae","b5678", + "010-8885-9677","ussu1112@naver.com", LocalDate.of(1995,8,29), electronicDevices); + + System.out.println(userHyoung); + System.out.println(userTaeHyoung); + System.out.println(userSonng); + System.out.println(Arrays.toString(user.getUserList())); + System.out.println(user.findByUserId("Hyoung")); + System.out.println(Users.copy(userHyoung)); + + System.out.println("==========================="); + + Electronics electronics = Electronics.getInstance(); + + AuthMethod[] authArray = {FINGERPRINT, PIN}; + AuthMethod[] authArray2 = {PATTERN, FACE}; + + Electronic electronic = electronics.createElectronic("Galaxy", CompanyName.SAMSUNG, LocalDate.now(), authArray); + Electronic electronic2 = electronics.createElectronic("IPhone", CompanyName.APPLE, LocalDate.now(), authArray2); + + System.out.println(electronic); + System.out.println(electronic2); + + System.out.println("==========================="); + + Electronic electronicsA = electronics.createElectronic("Galaxy", CompanyName.SAMSUNG, LocalDate.now(), authArray); + Electronic electronicsB = electronics.createElectronic("IPhone", CompanyName.APPLE, LocalDate.now(), authArray2); + + System.out.println(electronicsA); + System.out.println(electronics.findByProductNo("2304250003")); + System.out.println(Arrays.toString(electronics.groupByCompanyName(CompanyName.SAMSUNG))); + System.out.println(Arrays.toString(electronicsB.getAuthMethod())); + System.out.println(Arrays.toString(electronics.groupByAuthMethod(FINGERPRINT))); + } +} diff --git a/src/me/day05/practice/Practice02/Users.java b/src/me/day05/practice/Practice02/Users.java new file mode 100644 index 0000000..2aee79b --- /dev/null +++ b/src/me/day05/practice/Practice02/Users.java @@ -0,0 +1,114 @@ +package me.day05.practice.Practice02; + +import me.day05.practice.Practice01.User; + +import java.time.LocalDate; +import java.util.Arrays; +import java.util.Objects; + +public class Users{ + + /* + * Q. Users 클래스의 객체를 싱글톤으로 생성하는 함수를 작성하시오. + * */ + private final int arrSize = 10; + private User[] userList = new User[arrSize]; + private static Users instance; // 정적 참조 변수 + + private Users() { + // private 생성자 + } + + // 객체 변환 정적 메서드 + public static Users getInstance() { + if(instance == null){ + instance = new Users(); + } + + return instance; + } + + public User createUser(String userId, String userPassword){ + User user = new User(userId, userPassword); + for (int i = 0; i < userList.length; i++){ + if (userList[i] == null){ + userList[i] = user; + break; + } + } + return user; + } + + public User createUser(String userId, String userPassword, String userPhoneNumber, String userEmail, LocalDate userBirthDate, String[] electronicDevices){ + User user = new User(userId, userPassword, userPhoneNumber, userEmail, userBirthDate, electronicDevices); + for (int i = 0; i < userList.length; i++){ + if (userList[i] == null){ + userList[i] = user; + break; + } + } + return user; + } + + /* + * Q. 회원 아이디 userId를 통해 인자로 주어진 회원번호에 해당하는 회원을 반환하는 함수를 작성하시오. + * */ + public User findByUserId(String userId){ + User newUser = new User(userId); + for (User user : userList) { + if (user.getUserId().equals(userId)) { + newUser = user; + System.out.println(user); + break; + } + } + return newUser; + } + + /* + * Q. 인자로 주어진 회원 정보를 깊은 복사 (deepCopy) 하는 함수를 작성하시오.*/ + + public static User copy(User user) { + User copiedUser = new User(); + + copiedUser.setUserId(user.getUserId()); + copiedUser.setUserPassword(user.getUserPassword()); + copiedUser.setUserPhoneNumber(user.getUserPhoneNumber()); + copiedUser.setUserEmail(user.getUserEmail()); + copiedUser.setUserBirthDate(user.getUserBirthDate()); + copiedUser.setElectronicDevices(user.getElectronicDevices()); + + return copiedUser; + } + + public User[] getUserList() { + return userList; + } + + public void setUserList(User[] userList) { + this.userList = userList; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Users users = (Users) o; + return Arrays.equals(userList, users.userList); + } + + @Override + public int hashCode() { + int result = Objects.hash(arrSize); + result = 31 * result + Arrays.hashCode(userList); + return result; + } + + @Override + public String toString() { + return "Users{" + + "arrSize=" + arrSize + + ", userList=" + Arrays.toString(userList) + + '}'; + } +} diff --git a/src/me/day05/practice/Practice03/Electronics.java b/src/me/day05/practice/Practice03/Electronics.java new file mode 100644 index 0000000..5c6c193 --- /dev/null +++ b/src/me/day05/practice/Practice03/Electronics.java @@ -0,0 +1,135 @@ +package me.day05.practice.Practice03; + +import me.day05.practice.Practice01.AuthMethod; +import me.day05.practice.Practice01.CompanyName; +import me.day05.practice.Practice01.Electronic; + +import java.time.LocalDate; +import java.util.Arrays; +import java.util.Objects; + +public class Electronics { + + /* + * Q. Electronics 클래스의 객체를 싱글톤으로 생성하는 함수를 작성하시오. + * */ + final int arrSize = 10; + private static Electronics electronics; + private Electronic[] electronicList = new Electronic[arrSize]; + + private Electronics() { + } + + public static Electronics getInstance() { + if (electronics == null){ + electronics = new Electronics(); + } + return electronics; + } + + public Electronic createElectronic(String modelName, CompanyName companyName, LocalDate dateOfMade, AuthMethod[] authMethod){ + Electronic electronic = new Electronic(modelName, companyName, dateOfMade, authMethod); + + for (int i = 0; i < electronicList.length; i++){ + if (electronicList[i] == null){ + electronicList[i] = electronic; + break; + } + } + return electronic; + } + + + /* + * Q.전자제품 일련번호 productNo를 통해 인자로 주어진 일련번호에 해당하는 전자제품을 반환하는 함수를 작성하시오.*/ + public Electronic findByProductNo(String productNo){ + Electronic newElectronic = new Electronic(productNo); + for (Electronic electronic : electronicList) { + if (electronic.getProductNo().equals(productNo)) { + newElectronic = electronic; + break; + } + } + return newElectronic; + + } + + /* + * Q. 전자제품들 중 인자로 주어진 제조 회사를 찾아서 하나의 배열에 반환하는 함수를 작성하시오.*/ + + public Electronic[] groupByCompanyName(CompanyName companyName){ + Electronic[] companyArray = new Electronic[arrSize]; + int cnt = 0; + for (Electronic electronic : electronicList) { + if (electronic != null && electronic.getCompanyName().equals(companyName)) { + companyArray[cnt] = electronic; + cnt++; + } + } + return companyArray; + } + + /* + * Q. 전자제품들 중 인자로 주어진 인증 방법을 찾아서 하나의 배열에 반환하는 함수를 작성하시오.*/ + public Electronic[] groupByAuthMethod(AuthMethod authMethod){ + Electronic[] authMethodArray = new Electronic[arrSize]; +// int cnt = 0; +// for (Electronic electronic : electronicList){ +// if (electronic.getAuthMethod() == null || electronic.getAuthMethod() == null) continue; +// for (AuthMethod method : electronic.getAuthMethod()){ +// if(method.equals(authMethod)){ +// if (electronic.getAuthMethod() == null) continue; +// authMethodArray[cnt] = electronic; +// cnt++; +// break; +// } +// } +// } + + for (int i = 0; i < electronicList.length; i++) { + if (electronicList[i] == null) continue; + if (electronicList[i].getCompanyName() == null || electronicList[i].getAuthMethod().length == 0) continue; + for (int j = 0; j < electronicList[i].getAuthMethod().length; j++) { + if (electronicList[i].getAuthMethod()[j] == null) continue; + if (electronicList[i].getAuthMethod()[j] == authMethod) { + authMethodArray[i] = electronicList[i]; + break; + } + } + } + return authMethodArray; + } + + public Electronic[] getElectronicList() { + return electronicList; + } + + public void setElectronicList(Electronic[] electronicList) { + this.electronicList = electronicList; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Electronics that = (Electronics) o; + return Arrays.equals(electronicList, that.electronicList); + } + + + @Override + public int hashCode() { + int result = Objects.hash(arrSize); + result = 31 * result + Arrays.hashCode(electronicList); + return result; + } + + @Override + public String toString() { + return "Electronics{" + + "arrSize=" + arrSize + + ", electronicList=" + Arrays.toString(electronicList) + + '}'; + } + +}