diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/KDTBE5_Java_Assignment3.iml b/.idea/KDTBE5_Java_Assignment3.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/KDTBE5_Java_Assignment3.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..30bab2a --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..639900d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..d0b4c67 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/day05assignment/day05assignment.iml b/day05assignment/day05assignment.iml new file mode 100644 index 0000000..e7b98ac --- /dev/null +++ b/day05assignment/day05assignment.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/day05assignment/src/me/day05/practice/practice01/Electronic.java b/day05assignment/src/me/day05/practice/practice01/Electronic.java new file mode 100644 index 0000000..5c26511 --- /dev/null +++ b/day05assignment/src/me/day05/practice/practice01/Electronic.java @@ -0,0 +1,109 @@ +package me.day05.practice.practice01; + +import me.day05.practice.practice01.constant.AuthMethod; +import me.day05.practice.practice01.constant.Company; + +import java.time.LocalDate; +import java.util.Arrays; +import java.util.Objects; + +public class Electronic { + private static int autoIncrementNumber = 0; + private String productNo; + private String modelName; + private Company companyName; + private String dateOfDate; + private AuthMethod[] authMethods; + + public Electronic(String productNo, + String modelName, + Company companyName, + String dateOfDate + ) { + this.productNo = this.generateProductNo(); + this.modelName = modelName; + this.companyName = companyName; + this.dateOfDate = dateOfDate; + this.authMethods = new AuthMethod[10]; + } + + private String generateProductNo() { + StringBuilder builder = new StringBuilder(); + String id = String.format("%04d", ++autoIncrementNumber); + String generatedDate = LocalDate.now().toString().replace("-", "").substring(2); + builder.append(generatedDate).append(id); + return builder.toString(); + } + + public String getProductNo() { + return productNo; + } + + public String getModelName() { + return modelName; + } + + public void setModelName(String modelName) { + this.modelName = modelName; + } + + public Company getCompanyName() { + return companyName; + } + + public void setCompanyName(Company companyName) { + this.companyName = companyName; + } + + public String getDateOfDate() { + return dateOfDate; + } + + public void setDateOfDate(String dateOfDate) { + this.dateOfDate = dateOfDate; + } + + public AuthMethod[] getAuthMethods() { + return authMethods; + } + + public void setAuthMethods(AuthMethod[] authMethods) { + this.authMethods = authMethods; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Electronic that = (Electronic) o; + + if (!Objects.equals(productNo, that.productNo)) return false; + if (!Objects.equals(modelName, that.modelName)) return false; + if (companyName != that.companyName) return false; + if (!Objects.equals(dateOfDate, that.dateOfDate)) return false; + // Probably incorrect - comparing Object[] arrays with Arrays.equals + return Arrays.equals(authMethods, that.authMethods); + } + + @Override + public int hashCode() { + int result = productNo != null ? productNo.hashCode() : 0; + result = 31 * result + (modelName != null ? modelName.hashCode() : 0); + result = 31 * result + (companyName != null ? companyName.hashCode() : 0); + result = 31 * result + (dateOfDate != null ? dateOfDate.hashCode() : 0); + result = 31 * result + Arrays.hashCode(authMethods); + return result; + } + + @Override + public String toString() { + return "Electronic{" + + "productNo='" + productNo + "'" + + ", modelName='" + modelName + "'" + + ", companyName=" + companyName + + ", dateOfDate='" + dateOfDate + "'" + + ", authMethod=" + Arrays.toString(authMethods) + + '}'; + } +} diff --git a/day05assignment/src/me/day05/practice/practice01/User.java b/day05assignment/src/me/day05/practice/practice01/User.java new file mode 100644 index 0000000..9c7446b --- /dev/null +++ b/day05assignment/src/me/day05/practice/practice01/User.java @@ -0,0 +1,126 @@ +package me.day05.practice.practice01; + +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 String userBirthDate; + private Electronic[] electronicDevices; + private LocalDateTime registerTime; + + public User(String userId, + String userPassword, + String userPhoneNumber, + String userEmail, + String userBirthDate + ) { + this.electronicDevices = new Electronic[10]; + this.registerTime = LocalDateTime.now(); + this.userId = userId; + this.userPassword = userPassword; + this.userPhoneNumber = userPhoneNumber; + this.userEmail = userEmail; + this.userBirthDate = userBirthDate; + } + + 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 String getUserBirthDate() { + return userBirthDate; + } + + public void setUserBirthDate(String userBirthDate) { + this.userBirthDate = userBirthDate; + } + + public LocalDateTime getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(LocalDateTime registerTime) { + this.registerTime = registerTime; + } + + public Electronic[] getElectronicDevices() { + return electronicDevices; + } + + public void setElectronicDevices(Electronic[] electronicDevices) { + this.electronicDevices = electronicDevices; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || this.getClass() != obj.getClass()) return false; + + User user = (User) obj; + + if (!Objects.equals(userId, user.userId)) return false; + if (!Objects.equals(userPassword, user.userPassword)) return false; + if (!Objects.equals(userPhoneNumber, user.userPhoneNumber)) return false; + if (!Objects.equals(userEmail, user.userEmail)) return false; + if (!Objects.equals(userBirthDate, user.userBirthDate)) return false; + + return Objects.equals(registerTime, user.registerTime); + } + + @Override + public int hashCode() { + return Objects.hash(userId, + userPassword, + userPhoneNumber, + userEmail, + userBirthDate, + registerTime + ); + } + + @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/day05assignment/src/me/day05/practice/practice01/constant/AuthMethod.java b/day05assignment/src/me/day05/practice/practice01/constant/AuthMethod.java new file mode 100644 index 0000000..32efe46 --- /dev/null +++ b/day05assignment/src/me/day05/practice/practice01/constant/AuthMethod.java @@ -0,0 +1,5 @@ +package me.day05.practice.practice01.constant; + +public enum AuthMethod { + FINGER_PRINT, PATTERN, PIN, FACE; +} diff --git a/day05assignment/src/me/day05/practice/practice01/constant/Company.java b/day05assignment/src/me/day05/practice/practice01/constant/Company.java new file mode 100644 index 0000000..9f0f83b --- /dev/null +++ b/day05assignment/src/me/day05/practice/practice01/constant/Company.java @@ -0,0 +1,5 @@ +package me.day05.practice.practice01.constant; + +public enum Company { + SAMSUNG, LG, APPLE; +} diff --git a/day05assignment/src/me/day05/practice/practice02/Users.java b/day05assignment/src/me/day05/practice/practice02/Users.java new file mode 100644 index 0000000..c882454 --- /dev/null +++ b/day05assignment/src/me/day05/practice/practice02/Users.java @@ -0,0 +1,83 @@ +package me.day05.practice.practice02; + +import me.day05.practice.practice01.User; + +import java.util.Arrays; + +public class Users { + private static final int DEFAULT_SIZE = 50; + private static Users instance; + private User[] userList; + + private Users() { + userList = new User[DEFAULT_SIZE]; + } + + public static Users getInstance() { + if (instance == null) { + instance = new Users(); + } + + return instance; + } + + public User[] getUserList() { + return userList; + } + + public void setUserList(User[] userList) { + this.userList = userList; + } + + public User findByUserId(String userId) { + for (User user : userList) { + if (user.getUserId().equals(userId)) { + return user; + } + } + throw new IllegalArgumentException("찾는 " + userId + "는 존재하지 않습니다."); + } + + public static User copy(User original) { + User user = new User( + original.getUserId(), + original.getUserPassword(), + original.getUserPhoneNumber(), + original.getUserEmail(), + original.getUserBirthDate() + ); + user.setElectronicDevices(original.getElectronicDevices().clone()); + user.setRegisterTime(original.getRegisterTime()); + + return user; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + + Users users = (Users) obj; + + if (userList.length != users.userList.length) return false; + for (int i = 0; i < users.userList.length; i++) { + if (!userList[i].equals(users.userList[i])) { + return false; + } + } + + return true; + } + + @Override + public int hashCode() { + return Arrays.hashCode(userList); + } + + @Override + public String toString() { + return "Users{" + + "userList=" + Arrays.toString(userList) + + '}'; + } +} diff --git a/day05assignment/src/me/day05/practice/practice03/Electronics.java b/day05assignment/src/me/day05/practice/practice03/Electronics.java new file mode 100644 index 0000000..0dbf254 --- /dev/null +++ b/day05assignment/src/me/day05/practice/practice03/Electronics.java @@ -0,0 +1,89 @@ +package me.day05.practice.practice03; + +import me.day05.practice.practice01.Electronic; +import me.day05.practice.practice01.constant.AuthMethod; +import me.day05.practice.practice01.constant.Company; + +import java.util.Arrays; +import java.util.Objects; + +public class Electronics { + private static final int DEFAULT_SIZE = 50; + private static Electronics instance; + private Electronic[] electronicList; + + private Electronics() { + this.electronicList = new Electronic[DEFAULT_SIZE]; + } + + public static Electronics getInstance() { + if (instance == null) { + instance = new Electronics(); + } + + return instance; + } + + public Electronic[] getElectronicList() { + return electronicList; + } + + public void setElectronicList(Electronic[] electronicList) { + this.electronicList = electronicList; + } + + public Electronic findByProductNo(String productNo) { + for (Electronic electronic : electronicList) { + if (electronic.getProductNo().equals(productNo)) { + return electronic; + } + } + throw new IllegalArgumentException("찾는 " + productNo + "에 해당하는 제품은 존재하지 않습니다."); + } + + public Electronic[] groupByCompanyName(Company company) { + return Arrays.stream(electronicList) + .filter(Objects::nonNull) + .filter(electronic -> (electronic.getCompanyName() == company) + ).toArray(Electronic[]::new); + } + + public Electronic[] groupByAuthMethod(AuthMethod authMethod) { + return Arrays.stream(electronicList) + .filter(Objects::nonNull) + .filter(electronic -> + Arrays.stream(electronic.getAuthMethods()) + .filter(Objects::nonNull) + .anyMatch(method -> (method == authMethod)) + ).toArray(Electronic[]::new); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + + Electronics that = (Electronics) obj; + + if (that.electronicList.length != this.electronicList.length) return false; + for (int i = 0; i < electronicList.length; i++) { + if (!electronicList[i].equals(that.electronicList[i])) { + return false; + } + } + + return true; + } + + @Override + public int hashCode() { + return Arrays.hashCode(electronicList); + } + + @Override + public String toString() { + return "Electronics{" + + "electronicList=" + Arrays.toString(electronicList) + + '}'; + } +} diff --git a/out/production/day05assignment/me/day05/practice/practice01/Electronic.class b/out/production/day05assignment/me/day05/practice/practice01/Electronic.class new file mode 100644 index 0000000..30d6778 Binary files /dev/null and b/out/production/day05assignment/me/day05/practice/practice01/Electronic.class differ diff --git a/out/production/day05assignment/me/day05/practice/practice01/Test.class b/out/production/day05assignment/me/day05/practice/practice01/Test.class new file mode 100644 index 0000000..0408953 Binary files /dev/null and b/out/production/day05assignment/me/day05/practice/practice01/Test.class differ diff --git a/out/production/day05assignment/me/day05/practice/practice01/User.class b/out/production/day05assignment/me/day05/practice/practice01/User.class new file mode 100644 index 0000000..82255d6 Binary files /dev/null and b/out/production/day05assignment/me/day05/practice/practice01/User.class differ diff --git a/out/production/day05assignment/me/day05/practice/practice01/constant/AuthMethod.class b/out/production/day05assignment/me/day05/practice/practice01/constant/AuthMethod.class new file mode 100644 index 0000000..a7290a3 Binary files /dev/null and b/out/production/day05assignment/me/day05/practice/practice01/constant/AuthMethod.class differ diff --git a/out/production/day05assignment/me/day05/practice/practice01/constant/Company.class b/out/production/day05assignment/me/day05/practice/practice01/constant/Company.class new file mode 100644 index 0000000..1077aeb Binary files /dev/null and b/out/production/day05assignment/me/day05/practice/practice01/constant/Company.class differ