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 + + '}'; + } +}