diff --git a/README.md b/README.md
index 0dff600..8a6114b 100644
--- a/README.md
+++ b/README.md
@@ -1,26 +1,12 @@
### 자바 과제3
-> 제출자 - 최은빈
+> 제출자 - 배종윤
> 출시일 - 23.04.11.
> 제출일 - 23.04.17.
- [Day5](https://echoiing-fastcampus.notion.site/3-49385516d4e7430da0bfb85012f22cd9) 문제를 풀어서 제출하시오.
-- 파일 이름 작성법
- - ````me.day05.practice```` 패키지 생성
- - ````Practice01, Practice02, Practice03, ...```` 클래스 생성하여 작성
-- 제출방법
- - 본인의 이름으로 ````branch````를 생성하여 ````push````후 ````pull request```` 작성
- - 예시
- - branch 이름 - ````FirstNameLastName````
- - commit 메시지 - ````Java Assignment3 upload by FirstNameLastName````
- - pull request는 본인이 하고 싶은 말이나 질문을 적어주세요.
- - ````코드리뷰 빡세게 부탁드립니다.```` ````클린한 코드인지 봐주세요.```` ````이 코드의 조금 더 나은 방법이 있을까요.````
- - ````~~번 문제 풀지 못했습니다.```` ````~~번 문제 풀이 방법을 알려주시면 감사하겠습니다.````
- - ````결과는 나왔는데 맞는지 모르겠습니다.````
-- 주의사항
- - 본인 ```branch``` -> ```main branch``` PR한 상태로 제출부탁드립니다.
- - ```main branch```에 본인 ```branch```의 ```commit```을 ```merge``` 하지 마시기 바랍니다.
-
+- branch name : JongYoonBae
+- Test File : Test.java
diff --git a/src/me/day05/practice/AuthMethod.java b/src/me/day05/practice/AuthMethod.java
new file mode 100644
index 0000000..ea70640
--- /dev/null
+++ b/src/me/day05/practice/AuthMethod.java
@@ -0,0 +1,25 @@
+package me.day05.practice;
+
+enum AuthMethod {
+ FINGER_PRINT("Finger Print"),
+ PATTERN("Pattern"),
+ PIN("PIN"),
+ FACE("Face"),
+ FOOT("Foot");
+
+ private final String authType;
+
+ AuthMethod(String authType) {
+ this.authType = authType;
+ }
+
+ public String getAuthType() {
+ return authType;
+ }
+
+ //useless in this time
+ /*public static boolean isValidAuthType(List authMethod){
+ return Arrays.stream(AuthMethod.values())
+ .anyMatch(authType -> authMethod.contains(authType));
+ }*/
+}
diff --git a/src/me/day05/practice/Company.java b/src/me/day05/practice/Company.java
new file mode 100644
index 0000000..63196eb
--- /dev/null
+++ b/src/me/day05/practice/Company.java
@@ -0,0 +1,22 @@
+package me.day05.practice;
+
+enum Company {
+ LG("LG"),
+ SAMSUNG("SAMSUNG"),
+ APPLE("APPLE"),
+ GOOGLE("GOOGLE");
+ private final String companyName;
+ Company(String companyName) {
+ this.companyName = companyName;
+ }
+
+ public String getCompanyName() {
+ return companyName;
+ }
+
+ //useless in this time
+ /*public static boolean isValidCompany(Company company){
+ return Arrays.asList(Company.values()).stream()
+ .anyMatch(companyName -> companyName == company);
+ }*/
+}
diff --git a/src/me/day05/practice/Define.java b/src/me/day05/practice/Define.java
new file mode 100644
index 0000000..ccd6e3e
--- /dev/null
+++ b/src/me/day05/practice/Define.java
@@ -0,0 +1,5 @@
+package me.day05.practice;
+
+public class Define {
+ public static final int DEFAULT_CAPACITY = 20;
+}
diff --git a/src/me/day05/practice/Electronic.java b/src/me/day05/practice/Electronic.java
new file mode 100644
index 0000000..02ec88c
--- /dev/null
+++ b/src/me/day05/practice/Electronic.java
@@ -0,0 +1,147 @@
+package me.day05.practice;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.Objects;
+
+public class Electronic {
+ private String productNo;
+ private static int productId;
+ private String modelName;
+ private String companyName;
+ private LocalDate dateOfMade;
+ private List authMethod;
+
+ Electronic(Builder builder){
+ modelName = builder.modelName;
+ companyName = builder.companyName;
+ dateOfMade = builder.dateOfMade;
+ productNo = this.dateOfMade.format(DateTimeFormatter.ofPattern("yyMMdd"))+String.format("%04d",productId+1);
+ authMethod = builder.authMethod;
+ //init productId > 9998
+ if (productId > 9998) {
+ productId = 0;
+ } else {
+ productId++;
+ }
+ }
+
+ /*
+ assignment 1
+ getter(), setter(), hashcode(), equals(), toString()
+ */
+ //add conditions in getter & setter if necessary
+
+ public String getProductNo() {
+ return productNo;
+ }
+
+ public void setProductNo(String productNo) {
+ this.productNo = productNo;
+ }
+
+ public static int getProductId() {
+ return productId;
+ }
+
+ public static void setProductId(int productId) {
+ Electronic.productId = productId;
+ }
+
+ public String getModelName() {
+ return modelName;
+ }
+
+ public void setModelName(String modelName) {
+ this.modelName = modelName;
+ }
+
+ public String getCompanyName() {
+ return companyName;
+ }
+
+ public void setCompanyName(String companyName) {
+ this.companyName = companyName;
+ }
+
+ public LocalDate getDateOfMade() {
+ return dateOfMade;
+ }
+
+ public void setDateOfMade(LocalDate dateOfMade) {
+ this.dateOfMade = dateOfMade;
+ }
+
+ public List getAuthMethod() {
+ return authMethod;
+ }
+
+ public void setAuthMethod(List authMethod) {
+ this.authMethod = authMethod;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof Electronic that)) return false;
+ return productNo.equals(that.productNo) && modelName.equals(that.modelName) && companyName.equals(that.companyName) && dateOfMade.equals(that.dateOfMade) && authMethod.equals(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=" + authMethod +
+ '}'+"\n";
+ }
+
+ public static class Builder{
+ private String modelName;
+ private String companyName;
+ private LocalDate dateOfMade;
+ private List authMethod;
+
+ public Builder modelName (String modelName) {
+ this.modelName = modelName;
+ return this;
+ }
+
+ public Builder companyName (String companyName){
+ this.companyName = companyName;
+ return this;
+ }
+
+ public Builder dateOfMade (LocalDate dateOfMade){
+ this.dateOfMade = dateOfMade;
+ return this;
+ }
+
+ public Builder authMethod (List authMethod){
+ this.authMethod = authMethod;
+ return this;
+ }
+
+ public Electronic build() {
+ return new Electronic(this);
+ }
+
+ @Override
+ public String toString() {
+ return "Builder{" +
+ "modelName='" + modelName + '\'' +
+ ", companyName='" + companyName + '\'' +
+ ", dateOfMade=" + dateOfMade +
+ ", authMethod=" + authMethod +
+ '}';
+ }
+ }
+}
diff --git a/src/me/day05/practice/Electronics.java b/src/me/day05/practice/Electronics.java
new file mode 100644
index 0000000..d18de10
--- /dev/null
+++ b/src/me/day05/practice/Electronics.java
@@ -0,0 +1,223 @@
+package me.day05.practice;
+
+import java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
+
+public class Electronics {
+ private List electronicList;
+ private Electronic[] electronicArray;
+
+ private int electronicArraySize;
+
+ static Electronics instance;
+ //set constructor as private for SingleTon
+ private Electronics(){
+ this.electronicArray = new Electronic[Define.DEFAULT_CAPACITY];
+ electronicList = new ArrayList<>();
+ electronicArraySize = 0;
+ }
+
+ //TODO: add validation check of modelName, dateOfMade
+ public boolean addElectronic(String modelName, Company company, LocalDate dateOfMade, List authMethod){
+ //Use List
+ //duplication check
+ Optional electronicOpt = electronicList
+ .stream().filter(electronic -> modelName.equals(electronic.getModelName()))
+ .findFirst();
+
+ if (electronicOpt.isPresent()) {
+ System.out.printf("%s Already Exists\n",modelName);
+ return false;
+ }
+
+ electronicList.add(new Electronic.Builder()
+ .modelName(modelName)
+ .companyName(company.getCompanyName())
+ .dateOfMade(dateOfMade)
+ .authMethod(authMethod)
+ .build());
+
+ return true;
+ }
+ public boolean addElectronicToArray(String modelName, Company company, LocalDate dateOfMade, List authMethod){
+ //use Array
+ //duplication check
+ for(Electronic electronic: electronicArray){
+ if(electronic != null && electronic.getModelName().equals(modelName)){
+ System.out.printf("%s Already Exists\n",modelName);
+ return false;
+ }
+ }
+
+
+ if(electronicArraySize == electronicArray.length){
+ resize(electronicArraySize + 10);
+ }
+
+ electronicArray[electronicArraySize] = (new Electronic.Builder()
+ .modelName(modelName)
+ .companyName(company.getCompanyName())
+ .dateOfMade(dateOfMade)
+ .authMethod(authMethod)
+ .build());
+ electronicArraySize++;
+ return true;
+ }
+
+ private void resize(int newLength){
+ electronicArray = Arrays.copyOf(this.electronicArray, newLength);
+ }
+ public void initElectronics(){
+ String[] modelNames = {"Ipad pro 11","Galaxy Tab S8+","V50s","Ipad pro 11","Galaxy S23"};
+ Company[] companies = {Company.APPLE, Company.SAMSUNG, Company.LG, Company.APPLE, Company.SAMSUNG};
+ LocalDate[] dateOfMade = {LocalDate.parse("2021-04-21"),LocalDate.parse("2022-02-10"), LocalDate.parse("2019-10-10"), LocalDate.parse("2021-04-21"), LocalDate.parse("2023-02-02")};
+ List [] authMethods = new List[]{Arrays.asList(AuthMethod.FACE, AuthMethod.PIN,AuthMethod.FINGER_PRINT),Arrays.asList(AuthMethod.FINGER_PRINT,AuthMethod.PIN,AuthMethod.PATTERN),Arrays.asList(AuthMethod.PATTERN,AuthMethod.FINGER_PRINT,AuthMethod.PIN), Arrays.asList(AuthMethod.FACE, AuthMethod.PIN,AuthMethod.FINGER_PRINT),Arrays.asList(AuthMethod.FACE, AuthMethod.PIN,AuthMethod.FINGER_PRINT, AuthMethod.PATTERN)};
+ //use List
+ System.out.println("Use List");
+ for(int i = 0 ; i < modelNames.length ; i++){
+ addElectronic(modelNames[i], companies[i], dateOfMade[i], authMethods[i]);
+ }
+ System.out.println("Use Array");
+ //use Array
+ for(int i = 0 ; i < modelNames.length ; i++){
+ addElectronicToArray(modelNames[i], companies[i], dateOfMade[i], authMethods[i]);
+ }
+ }
+
+ public static Electronics getInstance(){
+ if(instance == null){
+ instance = new Electronics();
+ }
+ return instance;
+ }
+
+ /*
+ assignment 3-2
+ find product by product Number
+ */
+ public Electronic findByProductNo(String productNo){
+ Optional electronicOpt = electronicList
+ .stream().filter(user -> productNo.equals(user.getProductNo()))
+ .findFirst();
+ if (electronicOpt.isPresent()) {
+ return electronicOpt.get();
+ }
+ System.out.printf("Product 'productNo : %s' Not Found\n",productNo);
+ return null;
+ }
+
+ public Electronic findByProductNoFromArray(String productNo){
+ for(Electronic electronic : electronicArray){
+ if(electronic != null && electronic.getProductNo().equals(productNo)) {
+ return electronic;
+ }
+ }
+ System.out.printf("Product 'productNo : %s' Not Found\n",productNo);
+ return null;
+ }
+
+ /*
+ assignment 3-3
+ find product list by company name
+ */
+ public List groupByCompanyName(Company company) {
+ List electronics = electronicList
+ .stream().filter(electronic -> electronic.getCompanyName().equals(company.name()))
+ .collect(Collectors.toList());
+
+ if (electronics.isEmpty()) {
+ System.out.printf("Product Made by '%s' Not Found\n",company.name());
+ return null;
+ }
+ return electronics;
+ }
+
+ public Electronic[] groupByCompanyNameFromArray(Company company) {
+ Electronic[] matchedElectronics = new Electronic[electronicArraySize];
+ int count=0;
+ for(Electronic electronic : electronicArray){
+ if(electronic != null && electronic.getCompanyName().equals(company.name())){
+ matchedElectronics[count] = electronic;
+ count++;
+ }
+ }
+ if(matchedElectronics.length==0){
+ System.out.printf("Product Made by '%s' Not Found\n",company.name());
+ return null;
+ }
+
+ //resize matchedElectronics to delete null
+ return Arrays.copyOf(matchedElectronics,count);
+ }
+
+ /*
+ assignment 3-4
+ find product list by authentication method
+ */
+ public List groupByAuthMethod(AuthMethod authMethod) {
+ List electronics = electronicList
+ .stream().filter(electronic -> electronic.getAuthMethod().contains(authMethod))
+ .collect(Collectors.toList());
+
+ if (electronics.isEmpty()) {
+ System.out.printf("Product Provide %s Authentication Not Found\n",authMethod);
+ return null;
+ }
+ return electronics;
+ }
+
+ public Electronic[] groupByAuthMethodFromArray(AuthMethod authMethod) {
+ Electronic[] matchedElectronics = new Electronic[electronicArraySize];
+ int count=0;
+ for(Electronic electronic : electronicArray){
+ if(electronic != null && electronic.getAuthMethod().contains(authMethod)){
+ matchedElectronics[count] = electronic;
+ count++;
+ }
+ }
+ if(matchedElectronics.length==0){
+ System.out.printf("Product Provide %s Authentication Not Found\n",authMethod);
+ return null;
+ }
+ //resize matchedElectronics to delete null
+ return Arrays.copyOf(matchedElectronics,count);
+ }
+ /*
+ assignment 3
+ getter(), setter(), hashcode(), equals(), toString()
+ */
+
+ public List getElectronicList() {
+ return electronicList;
+ }
+
+ public void setElectronicList(List electronicList) {
+ this.electronicList = electronicList;
+ }
+
+ public Electronic[] getElectronicArray() {
+ return electronicArray;
+ }
+
+ public void setElectronicArray(Electronic[] electronicArray) {
+ this.electronicArray = electronicArray;
+ }
+
+ @Override
+ public String toString() {
+ return electronicList.toString();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof Electronics that)) return false;
+ return Objects.equals(electronicList, that.electronicList);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(electronicList);
+ }
+}
diff --git a/src/me/day05/practice/Practice01.java b/src/me/day05/practice/Practice01.java
new file mode 100644
index 0000000..c9fffc9
--- /dev/null
+++ b/src/me/day05/practice/Practice01.java
@@ -0,0 +1,13 @@
+package me.day05.practice;
+
+public class Practice01 {
+ /*
+ assignment 1
+ File 참조
+ Class : User
+ Electronic
+ Enum : AuthMethod
+ Company
+ */
+}
+
diff --git a/src/me/day05/practice/Practice02.java b/src/me/day05/practice/Practice02.java
new file mode 100644
index 0000000..d6bd417
--- /dev/null
+++ b/src/me/day05/practice/Practice02.java
@@ -0,0 +1,10 @@
+package me.day05.practice;
+
+public class Practice02 {
+ /*
+ assignment 2
+ 2-1 : Users Class -> getInstance()
+ 2-2 : Users Class -> findByUserId(String userId)
+ 2-3 : User Class -> copy(User user)
+ */
+}
diff --git a/src/me/day05/practice/Practice03.java b/src/me/day05/practice/Practice03.java
new file mode 100644
index 0000000..afeef5a
--- /dev/null
+++ b/src/me/day05/practice/Practice03.java
@@ -0,0 +1,11 @@
+package me.day05.practice;
+
+public class Practice03 {
+ /*
+ assignment 3
+ 3-1 : Electronics Class -> getInstance()
+ 3-2 : Electronics Class -> findByProductNo(String productNo)
+ 3-3 : Electronics Class -> groupByCompanyName(Company company)
+ 3-4 : Electronics Class -> groupByAuthMethod(AuthMethod authMethod)
+ */
+}
diff --git a/src/me/day05/practice/Test.java b/src/me/day05/practice/Test.java
new file mode 100644
index 0000000..f4d0438
--- /dev/null
+++ b/src/me/day05/practice/Test.java
@@ -0,0 +1,123 @@
+package me.day05.practice;
+
+import java.time.LocalDate;
+import java.util.Arrays;
+
+public class Test {
+ public static void main(String[] args) {
+ Electronics electronics = Electronics.getInstance();
+ Users users = Users.getInstance();
+
+ System.out.println("======================");
+ System.out.println("Duplication Test");
+
+
+ //initialize Electronics for test
+ electronics.initElectronics();
+ System.out.println();
+ //initialize Users for test
+ users.initUsers();
+
+
+ System.out.println("\n\n\n======================");
+ User originalUser = new User.Builder().userId("copyTester1")
+ .userPassword("copyTester1PW")
+ .userPhoneNumber("010-9999-9999")
+ .userEmail("copyTester1@gmail.com")
+ .userBirthDate(LocalDate.parse("1999-12-31"))
+ .build();
+ //shallow copy object
+ User copyUser = originalUser;
+ System.out.println("Shallow copy");
+ System.out.println("Original User : " + originalUser + "");
+ System.out.println("Copy User : " + copyUser + "\n");
+
+ System.out.println("Modify Element's value : copyUserId only");
+ copyUser.setUserId("copyTester2(modified)");
+ System.out.println("Original User : " + originalUser + "");
+ System.out.println("Copy User : " + copyUser + "\n");
+
+ //undo userId value
+ copyUser.setUserId("copyTester1");
+ //deep copy Object
+ copyUser = User.copy(originalUser);
+
+ System.out.println("Deep copy");
+ System.out.println("Original User : " + originalUser + "");
+ System.out.println("Copy User : " + copyUser + "\n");
+ System.out.println("Modify Element's value : copyUserId only");
+ copyUser.setUserId("copyTester2(modified)");
+ System.out.println("Original User : " + originalUser + "");
+ System.out.println("Copy User : " + copyUser + "\n");
+
+ System.out.println("\n\n\n======================");
+ System.out.println("Use List");
+ //find by user ID
+ System.out.println("Find by User ID\n");
+ System.out.println("Find User ID : tester10");
+ printObject(users.findByUserId("tester10"));
+ System.out.println("Find User ID : tester01");
+ printObject(users.findByUserId("tester01"));
+ //find by product number
+ System.out.println("\nFind by Product No\n");
+ System.out.println("Find Product No : 2101210001");
+ printObject(electronics.findByProductNo("2101210001"));
+ System.out.println("Find Product No : 2104210001");
+ printObject(electronics.findByProductNo("2104210001"));
+
+
+ //find by Company
+ System.out.println("\nFind by Company\n");
+ System.out.println("Find Product Made by : GOOGLE");
+ printObject(electronics.groupByCompanyName(Company.GOOGLE));
+ System.out.println("Find Product Made by : SAMSUNG");
+ printObject(electronics.groupByCompanyName(Company.SAMSUNG));
+
+ System.out.println("\nFind by AuthMethod\n");
+ System.out.println("Find Product by Provide AuthMethod : FOOT");
+ printObject(electronics.groupByAuthMethod(AuthMethod.FOOT));
+ System.out.println("Find Product by Provide AuthMethod : Pattern");
+ printObject(electronics.groupByAuthMethod(AuthMethod.PATTERN));
+
+
+
+ System.out.println("\n\nUse Array");
+ //find by user ID
+ System.out.println("Find by User ID\n");
+ System.out.println("Find User ID : tester10");
+ printObject(users.findByUserIdFromArray("tester10"));
+ System.out.println("Find User ID : tester01");
+ printObject(users.findByUserIdFromArray("tester01"));
+ //find by product number
+ System.out.println("\nFind by Product No\n");
+ System.out.println("Find Product No : 2101210001");
+ printObject(Arrays.asList(electronics.findByProductNoFromArray("2104210001")));
+ System.out.println("Find Product No : 2101210005");
+ printObject(Arrays.asList(electronics.findByProductNoFromArray("2104210005")));
+
+ //find by Company
+ System.out.println("\nFind by Company\n");
+ System.out.println("Find Product Made by : GOOGLE");
+ printObject(Arrays.asList(electronics.groupByCompanyNameFromArray(Company.GOOGLE)));
+ System.out.println("Find Product Made by : SAMSUNG");
+ printObject(Arrays.asList(electronics.groupByCompanyNameFromArray(Company.SAMSUNG)));
+
+
+ //find by AuthMethod
+ System.out.println("\nFind by AuthMethod\n");
+ System.out.println("Find Product by Provide AuthMethod : FOOT");
+ printObject(electronics.groupByAuthMethod(AuthMethod.FOOT));
+ System.out.println("Find Product by Provide AuthMethod : Pattern");
+ printObject(Arrays.asList(electronics.groupByAuthMethodFromArray(AuthMethod.PATTERN)));
+
+
+
+ }
+
+ public static void printObject(Object o){
+ //print object values if Object != null
+ if(o!=null){
+ System.out.println(o.toString());
+ }
+ }
+}
diff --git a/src/me/day05/practice/User.java b/src/me/day05/practice/User.java
new file mode 100644
index 0000000..5856867
--- /dev/null
+++ b/src/me/day05/practice/User.java
@@ -0,0 +1,176 @@
+package me.day05.practice;
+
+import java.time.LocalDate;
+import java.util.Objects;
+
+public class User {
+ private String userId;
+ private String userPassword;
+ private String userPhoneNumber;
+ private String userEmail;
+ private LocalDate userBirthDate;
+ private Electronics electronicDevices;
+ private Long registerTime;
+
+ public User(Builder builder) {
+ userId = builder.userId;
+ userPassword = builder.userPassword;
+ userPhoneNumber = builder.userPhoneNumber;
+ userEmail = builder.userEmail;
+ userBirthDate = builder.userBirthDate;
+ electronicDevices = builder.electronicDevices;
+ registerTime = System.currentTimeMillis();
+ }
+ /*
+ assignment 2-3
+ Deep coy method
+ */
+ public User(User user) {
+ this.userId = user.userId;
+ this.userPassword = user.userPassword;
+ this.userPhoneNumber = user.userPhoneNumber;
+ this.userEmail = user.userEmail;
+ this.userBirthDate = user.userBirthDate;
+ this.electronicDevices = user.electronicDevices;
+ this.registerTime = user.registerTime;
+ }
+ public static User copy(User user){
+ return new User(user);
+ }
+
+ /*
+ assignment 1
+ getter(), setter(), hashcode(), equals(), toString()
+ */
+ //add conditions in getter & setter if necessary
+ public String getUserId() {
+ return userId;
+ }
+ //Setter for Testing Shallow & DeepCopy
+ 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 Electronics getElectronicDevices() {
+ return electronicDevices;
+ }
+
+ public void setElectronicDevices(Electronics electronicDevices) {
+ this.electronicDevices = electronicDevices;
+ }
+
+ public Long getRegisterTime() {
+ return registerTime;
+ }
+
+ public void setRegisterTime(Long registerTime) {
+ this.registerTime = registerTime;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof User user)) return false;
+ return userId == user.userId && userPassword.equals(user.userPassword) && Objects.equals(userPhoneNumber, user.userPhoneNumber) && Objects.equals(userBirthDate, user.userBirthDate) && Objects.equals(electronicDevices, user.electronicDevices) && registerTime.equals(user.registerTime);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(userId, userPassword, userPhoneNumber, userBirthDate, electronicDevices, registerTime);
+ }
+
+ @Override
+ public String toString() {
+ return "User{" +
+ "userId=" + userId +
+ ", userPassword='" + userPassword + '\'' +
+ ", userPhoneNumber='" + userPhoneNumber + '\'' +
+ ", userBirthDate=" + userBirthDate +
+ ", electronics=" + electronicDevices +
+ ", registerTime=" + registerTime +
+ '}' + "\n";
+ }
+
+ public static class Builder{
+ private String userId;
+ private String userPassword;
+ private String userPhoneNumber;
+ private String userEmail;
+ private LocalDate userBirthDate;
+ private Electronics electronicDevices;
+
+ public Builder userId (String userId) {
+ this.userId = userId;
+ return this;
+ }
+
+ public Builder userPassword (String userPassword){
+ this.userPassword = userPassword;
+ return this;
+ }
+
+ public Builder userPhoneNumber (String userPhoneNumber){
+ this.userPhoneNumber = userPhoneNumber;
+ return this;
+ }
+ public Builder userEmail (String userEmail){
+ this.userEmail = userEmail;
+ return this;
+ }
+
+ public Builder userBirthDate (LocalDate userBirthDate){
+ this.userBirthDate = userBirthDate;
+ return this;
+ }
+ /*public Builder registerTime (Long registerTime){
+ this.registerTime = registerTime;
+ return this;
+ }*/
+
+ public User build() {
+ return new User(this);
+ }
+
+ @Override
+ public String toString() {
+ return "Builder{" +
+ "userId='" + userId + '\'' +
+ ", userPassword='" + userPassword + '\'' +
+ ", userBirthDate=" + userBirthDate +
+ ", electronicDevices=" + electronicDevices +
+ '}';
+ }
+ }
+}
diff --git a/src/me/day05/practice/Users.java b/src/me/day05/practice/Users.java
new file mode 100644
index 0000000..343c965
--- /dev/null
+++ b/src/me/day05/practice/Users.java
@@ -0,0 +1,160 @@
+package me.day05.practice;
+
+import java.time.LocalDate;
+import java.util.*;
+
+public class Users {
+ private List userList = new ArrayList<>();
+ private User[] userArray;
+ private int userArraySize;
+ static Users instance;
+
+ //set constructor as private for SingleTon
+ private Users(){
+ this.userList = new ArrayList<>();
+ this.userArray = new User[Define.DEFAULT_CAPACITY];
+ this.userArraySize = 0;
+ }
+ /*
+ assignment 2-1
+ getInstance method
+ */
+ public static Users getInstance(){
+ if(instance == null){
+ instance = new Users();
+ }
+ return instance;
+ }
+
+
+ /*
+ assignment 2-2
+ find user by user's id
+ */
+ public User findByUserId(String userId){
+ Optional userOpt = userList
+ .stream().filter(user -> userId.equals(user.getUserId()))
+ .findFirst();
+ if (userOpt.isPresent()) {
+ return userOpt.get();
+ }
+ System.out.printf("'%s' Not Found\n",userId);
+ return null;
+ }
+
+ public User findByUserIdFromArray(String userId){
+ for(User user: userArray){
+ if(user != null && user.getUserId().equals(userId)){
+ return user;
+ }
+ }
+
+ System.out.printf("'%s' Not Found\n",userId);
+ return null;
+ }
+
+ //Todo : add validation check of userId, userPassword, userPhoneNumber, userEmail, userBirthDate
+ public boolean addUser(String userId, String userPassword, String userPhoneNumber, String userEmail, LocalDate userBirthDate){
+ //Use List
+ //duplication check
+ if(findByUserId(userId) != null){
+ System.out.printf("'%s' Already Exists\n",userId);
+ return false;
+ }
+
+ userList.add(new User.Builder()
+ .userId(userId)
+ .userPassword(userPassword)
+ .userPhoneNumber(userPhoneNumber)
+ .userEmail(userEmail)
+ .userBirthDate(userBirthDate)
+ .build());
+ return true;
+ }
+
+ public boolean addUserToArray(String userId, String userPassword, String userPhoneNumber, String userEmail, LocalDate userBirthDate){
+ //use Array
+ //duplication check
+ if(userArraySize > 0){
+ if(findByUserIdFromArray(userId) != null){
+ System.out.printf("'%s' Already Exists\n",userId);
+ return false;
+ }
+ }
+
+ if(userArraySize == userArray.length){
+ resize(userArraySize + 10);
+ }
+ userArray[userArraySize] = (new User.Builder()
+ .userId(userId)
+ .userPassword(userPassword)
+ .userPhoneNumber(userPhoneNumber)
+ .userEmail(userEmail)
+ .userBirthDate(userBirthDate)
+ .build());
+ userArraySize++;
+
+ return true;
+ }
+
+ private void resize(int newLength){
+ userArray = Arrays.copyOf(this.userArray, newLength);
+ }
+
+ public void initUsers(){
+ String[] userId = {"tester01","tester02","tester03","tester01"};
+ String[] userPassword = {"tester01PW","tester02PW","tester03PW","tester01PW"};
+ String[] userPhoneNumber = {"010-0000-0001", "010-0000-0002", "010-0000-0003", "010-0000-0001",};
+ String[] userEmail = {"tester01@gmail.com", "tester02@gmail.com", "tester03@gmail.com", "tester01@gmail.com"};
+ LocalDate[] userBirthDate = {LocalDate.parse("1965-12-14"),LocalDate.parse("1982-07-31"), LocalDate.parse("2019-10-10"), LocalDate.parse("2000-01-01")};
+ System.out.println("Use List");
+ for(int i = 0 ; i < userId.length ; i++){
+ //use List
+ addUser(userId[i], userPassword[i],userPhoneNumber[i], userEmail[i], userBirthDate[i]);
+ }
+ System.out.println("Use Array");
+ for (int i = 0 ; i < userId.length ; i++){
+ //use Array
+ addUserToArray(userId[i], userPassword[i],userPhoneNumber[i], userEmail[i], userBirthDate[i]);
+ }
+ }
+
+ /*
+ assignment 2
+ getter(), setter(), hashcode(), equals(), toString()
+ */
+ public List getUserList() {
+ return userList;
+ }
+
+ public void setUserArray(User[] userArray) {
+ this.userArray = userArray;
+ }
+
+ public void setUserList(List userList) {
+ this.userList = userList;
+ }
+
+ public User[] getUserArray() {
+ return userArray;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof Users users)) return false;
+ return Objects.equals(userList, users.userList);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(userList);
+ }
+
+ @Override
+ public String toString() {
+ return "Users{" +
+ "userList=" + userList +
+ '}';
+ }
+}