diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/KDTBE5_Java_Assignment3.iml b/.idea/KDTBE5_Java_Assignment3.iml
new file mode 100644
index 0000000..b107a2d
--- /dev/null
+++ b/.idea/KDTBE5_Java_Assignment3.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ 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..12e7bfa
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ 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/src/practice01/Electronic.java b/src/practice01/Electronic.java
new file mode 100644
index 0000000..f1aa8ca
--- /dev/null
+++ b/src/practice01/Electronic.java
@@ -0,0 +1,108 @@
+package src.practice01;
+
+import src.practice01.db.AuthMethod;
+import src.practice01.db.Company;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Objects;
+
+public class Electronic {
+ private static int serialNumber = 0;
+
+ String productNo;
+ String modelName;
+ Company companyName;
+ LocalDate dateOfMade;
+ ArrayList authMethods = new ArrayList<>();
+
+ public Electronic (
+ String productNo, String modelName,
+ Company companyName, LocalDate dateOfMade,
+ AuthMethod auth
+
+ ) {
+ LocalDate today = LocalDate.now();
+
+
+ serialNumber++;
+ this.modelName = modelName;
+
+ this.productNo = today.format(DateTimeFormatter.ofPattern("yyMMdd"));
+ this.productNo += String.format("%04d", serialNumber);
+ this.companyName = companyName;
+ authMethods.add(auth);
+ }
+
+ public static int getSerialNumber() {
+ return serialNumber;
+ }
+
+ public String getProductNo() {
+ return productNo;
+ }
+
+ public void setProductNo(String productNo) {
+ this.productNo = 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 LocalDate getDateOfMade() {
+ return dateOfMade;
+ }
+
+ public void setDateOfMade(LocalDate dateOfMade) {
+ this.dateOfMade = dateOfMade;
+ }
+
+ public ArrayList getAuthMethods() {
+ return authMethods;
+ }
+
+ public void setAuthMethods(ArrayList 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;
+ return Objects.equals(productNo, that.productNo) &&
+ Objects.equals(modelName, that.modelName) && companyName == that.companyName &&
+ Objects.equals(dateOfMade, that.dateOfMade) &&
+ Objects.equals(authMethods, that.authMethods);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(productNo, modelName, companyName, dateOfMade, authMethods);
+ }
+
+ @Override
+ public String toString() {
+ return "Electronic{" +
+ "productNo='" + productNo + '\'' +
+ ", modelName='" + modelName + '\'' +
+ ", companyName=" + companyName +
+ ", dateOfMade=" + dateOfMade +
+ ", authMethods=" + authMethods +
+ '}';
+ }
+}
diff --git a/src/practice01/User.java b/src/practice01/User.java
new file mode 100644
index 0000000..ab6905e
--- /dev/null
+++ b/src/practice01/User.java
@@ -0,0 +1,116 @@
+package src.practice01;
+
+import java.time.LocalDate;
+import java.util.ArrayList;
+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 ArrayList electronicDevices = new ArrayList<>();
+ private LocalDate registerTime;
+
+ public User() {}
+
+ public User (
+ String userId,
+ String userPassword,
+ String userPhoneNumber,
+ String userEmail,
+ String userBirthDate
+
+ ) {
+ 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 ArrayList getElectronicDevices() {
+ return electronicDevices;
+ }
+
+ public void setElectronicDevices(ArrayList electronicDevices) {
+ this.electronicDevices = electronicDevices;
+ }
+
+
+ @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) &&
+ Objects.equals(electronicDevices, user.electronicDevices) &&
+ Objects.equals(registerTime, user.registerTime);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(userId, userPassword,
+ userPhoneNumber, userEmail, userBirthDate,
+ electronicDevices, registerTime);
+ }
+
+ @Override
+ public String toString() {
+ return "User{" +
+ "userId='" + userId + '\'' +
+ ", userPassword='" + userPassword + '\'' +
+ ", userPhoneNumber='" + userPhoneNumber + '\'' +
+ ", userEmail='" + userEmail + '\'' +
+ ", userBirthDate='" + userBirthDate + '\'' +
+ ", electronicDevices=" + electronicDevices +
+ ", registerTime=" + registerTime +
+ '}';
+ }
+}
diff --git a/src/practice01/db/AuthMethod.java b/src/practice01/db/AuthMethod.java
new file mode 100644
index 0000000..5722097
--- /dev/null
+++ b/src/practice01/db/AuthMethod.java
@@ -0,0 +1,8 @@
+package src.practice01.db;
+
+public enum AuthMethod {
+ FINGERPRINT,
+ PATTERN,
+ PIN,
+ FACE
+}
diff --git a/src/practice01/db/Company.java b/src/practice01/db/Company.java
new file mode 100644
index 0000000..c31e162
--- /dev/null
+++ b/src/practice01/db/Company.java
@@ -0,0 +1,8 @@
+package src.practice01.db;
+
+public enum Company {
+ SAMSUN,
+ LG,
+ APPLE
+
+}
diff --git a/src/practice02/Users.java b/src/practice02/Users.java
new file mode 100644
index 0000000..5be36de
--- /dev/null
+++ b/src/practice02/Users.java
@@ -0,0 +1,68 @@
+package src.practice02;
+
+import src.practice01.User;
+
+import java.util.ArrayList;
+import java.util.Objects;
+
+public class Users {
+ private ArrayList userList = new ArrayList<>();
+
+ // 싱글톤
+ private static Users instance;
+ public Users() {}
+ public static Users getInstance() {
+ if (instance == null) {
+ instance = new Users();
+ }
+ return instance;
+ }
+
+ public ArrayList getUserList() {
+ return userList;
+ }
+
+ public void setUserList(ArrayList userList) {
+ this.userList = userList;
+ }
+
+ public User findByUserId(String userId) {
+ for (User user : userList) {
+ if (userId.equals(user.getUserId())) {
+ return user;
+ }
+ }
+ return null;
+ }
+
+ public User Copy(User user) {
+ User copyUser = new User();
+ copyUser.setUserId(user.getUserId());
+ copyUser.setUserPassword(user.getUserPassword());
+ copyUser.setUserEmail(user.getUserEmail());
+ copyUser.setUserPhoneNumber(user.getUserPhoneNumber());
+ copyUser.setUserBirthDate(user.getUserBirthDate());
+ copyUser.setElectronicDevices(user.getElectronicDevices());
+ return copyUser;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ Users users = (Users) o;
+ return Objects.equals(userList, users.userList);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(userList);
+ }
+
+ @Override
+ public String toString() {
+ return "Users{" +
+ "userList=" + userList +
+ '}';
+ }
+}
diff --git a/src/practice03/Electronics.java b/src/practice03/Electronics.java
new file mode 100644
index 0000000..1fc7826
--- /dev/null
+++ b/src/practice03/Electronics.java
@@ -0,0 +1,120 @@
+package src.practice03;
+
+import src.practice01.Electronic;
+import src.practice01.db.AuthMethod;
+import src.practice01.db.Company;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+public class Electronics {
+
+ private static Electronics instance;
+ private static final int DEFAULT_CAPACITY = 10;
+ private Electronic[] electronicList;
+ private int size = 0;
+ private int capacity = 0;
+
+ private Electronics() {
+ this.electronicList = new Electronic[DEFAULT_CAPACITY];
+ }
+
+ public void add(Electronic electronic) {
+ if (size == capacity) {
+ grow();
+ add(electronic);
+ } else {
+ electronicList[size++] = electronic;
+ }
+ }
+
+ public int size() {
+ return size;
+ }
+
+ private void grow() {
+ if (capacity < DEFAULT_CAPACITY) {
+ capacity = DEFAULT_CAPACITY;
+ } else {
+ capacity = size * 2;
+ }
+
+ copy();
+ }
+
+ private void copy() {
+ electronicList = Arrays.copyOf(electronicList, this.capacity);
+ }
+
+ 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;
+ }
+ }
+ return null;
+ }
+
+ public Electronic[] groupByCompanyName(Company company) {
+ Electronic[] groupByCompanyElectronic = new Electronic[size];
+ int count = 0;
+ for (int i = 0; i < electronicList.length; i++) {
+ if (electronicList[i].getCompanyName().equals(company)) {
+ groupByCompanyElectronic[count] = electronicList[i];
+ }
+ }
+
+ return Arrays.copyOf(groupByCompanyElectronic, count);
+ }
+
+ public Electronic[] groupByAuthMethod(AuthMethod authMethod) {
+ Electronic[] groupByCompanyElectronic = new Electronic[size];
+ int count = 0;
+ for (int i = 0; i < electronicList.length; i++) {
+ if (electronicList[i].getAuthMethods().equals(authMethod)) {
+ groupByCompanyElectronic[count] = electronicList[i];
+ }
+ }
+
+ return Arrays.copyOf(groupByCompanyElectronic, count);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ Electronics that = (Electronics) o;
+ return size == that.size && capacity == that.capacity && Arrays.equals(electronicList, that.electronicList);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = Objects.hash(size, capacity);
+ result = 31 * result + Arrays.hashCode(electronicList);
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ return "Electronics{" +
+ "electronicList=" + Arrays.toString(electronicList) +
+ ", size=" + size +
+ ", capacity=" + capacity +
+ '}';
+ }
+}