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