From 3bdc5da0280469a3212543a16788e0e2322518e7 Mon Sep 17 00:00:00 2001 From: Coding9nt Date: Tue, 18 Apr 2023 00:44:43 +0900 Subject: [PATCH] =?UTF-8?q?[ADD]=20Mingi=20Park's=20=EB=8B=B5=EB=B3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- me/day05/practice/Practice01/Auth.java | 8 + me/day05/practice/Practice01/Company.java | 7 + me/day05/practice/Practice01/Electronic.java | 121 +++++++++++++++ me/day05/practice/Practice01/User.java | 133 +++++++++++++++++ me/day05/practice/Practice02/Users.java | 88 +++++++++++ me/day05/practice/Practice03/Electronics.java | 141 ++++++++++++++++++ 6 files changed, 498 insertions(+) create mode 100644 me/day05/practice/Practice01/Auth.java create mode 100644 me/day05/practice/Practice01/Company.java create mode 100644 me/day05/practice/Practice01/Electronic.java create mode 100644 me/day05/practice/Practice01/User.java create mode 100644 me/day05/practice/Practice02/Users.java create mode 100644 me/day05/practice/Practice03/Electronics.java diff --git a/me/day05/practice/Practice01/Auth.java b/me/day05/practice/Practice01/Auth.java new file mode 100644 index 0000000..5ccbdd5 --- /dev/null +++ b/me/day05/practice/Practice01/Auth.java @@ -0,0 +1,8 @@ +package me.day05.practice.Practice01; + +public enum Auth { + FINGERPRINT, + PATTERN, + PIN, + FACE +} diff --git a/me/day05/practice/Practice01/Company.java b/me/day05/practice/Practice01/Company.java new file mode 100644 index 0000000..0955a59 --- /dev/null +++ b/me/day05/practice/Practice01/Company.java @@ -0,0 +1,7 @@ +package me.day05.practice.Practice01; + +public enum Company { + SAMSUNG, + LG, + APPLE +} diff --git a/me/day05/practice/Practice01/Electronic.java b/me/day05/practice/Practice01/Electronic.java new file mode 100644 index 0000000..ed9454b --- /dev/null +++ b/me/day05/practice/Practice01/Electronic.java @@ -0,0 +1,121 @@ +package me.day05.practice.Practice01; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Objects; + +/** + * - `Electronic` 클래스 + * - 필드 + * - 제품 일련번호 `productNo` + * - 제품 번호는 `Electronic` 클래스의 객체 생성시 자동 생성한다고 가정 + * - 등록한 날짜 + * - 연도 (2자리) + 월 (2자리) + 일 (자리) — [LocalDate](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) 클래스 이용 + * - 등록된 제품 순서 + * - 4자리 등록 순서 — static 변수로 총 객체 수 저장 + * - 예시 + * - 현재 작성일 기준 일자는 2023/03/30 이다. + * - 230330 + 0001 (4자리 등록 순서) ⇒ *2303300001* + * - 전자기기 모델명 `modelName` + * - 제조 회사명 `companyName` + * - SAMSUNG, LG, APPLE — Enum형으로 정의 + * - 하나의 전자 기기에는 다수의 인증 방법이 있을 수도 있음 — 배열로 정의 + * - + * - 메소드 + * - 생성자, getter(), setter(), hashCode(), equals(), toString() + */ +public class Electronic { + private String productNo; + private String modelName; + private Company companyName; + private LocalDate dateOfMade; + private ArrayList authMethods = new ArrayList<>(); + private static int serialNum = 0; + + public Electronic() {} + + public Electronic(String productNo, String modelName, Company companyName, LocalDate dateOfMade, Auth auth) { + LocalDate dt = LocalDate.now(); + serialNum++; + this.modelName = modelName; + this.productNo = dt.format(DateTimeFormatter.ofPattern("yyMMdd")); + this.productNo += String.format("%04d", serialNum); + this.companyName = companyName; + authMethods.add(auth); + + this.productNo = productNo; + this.modelName = modelName; + this.companyName = companyName; + this.dateOfMade = dateOfMade; + } + + 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/me/day05/practice/Practice01/User.java b/me/day05/practice/Practice01/User.java new file mode 100644 index 0000000..f376b8c --- /dev/null +++ b/me/day05/practice/Practice01/User.java @@ -0,0 +1,133 @@ +package me.day05.practice.Practice01; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Objects; + +/** + * - `User` 클래스 + * - 필드 + * - 회원 아이디 `userId` + * - 회원 비밀번호 `userPassword` + * - 회원 핸드폰번호 `userPhoneNumber` + * - 회원 이메일 `userEmail` + * - 회원 생년월일 `userBirthDate` + * - 사용 중인 전자 제품들 `electronicDevices` + * - 하나의 사용자는 여러 개의 사용 중인 전자 제품이 있을 수 있음 — 배열로 정의 + * - 회원 정보가 등록된 시스템 시간 `registerTime` + * - 객체 생성시 시스템 시간으로 자동 설정됨 + * - 메소드 + * - 생성자, getter(), setter(), hashCode(), equals(), toString() + * + */ +public class User { + + private String userId; + private String userPassword; + private String userPhoneNumber; + private String userEmail; + private LocalDate userBirthDate; + private LocalDate registerTime; + private ArrayList electronicDevices; + + public User() {} + + public User(String userId, String userPassword, String userPhoneNumber, String userEmail, LocalDate userBirthDate) { + this.userId = userId; + this.userPassword = userPassword; + this.userPhoneNumber = userPhoneNumber; + this.userEmail = userEmail; + this.userBirthDate = userBirthDate; + registerTime = setRegisterTime(); + } + + 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 LocalDate getUserBirthDate() { + return userBirthDate; + } + + public void setUserBirthDate(LocalDate userBirthDate) { + this.userBirthDate = userBirthDate; + } + + public LocalDate getRegisterTime() { + return registerTime; + } + + public LocalDate setRegisterTime() { + return LocalDate.now(ZoneId.systemDefault()); + } + + 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(registerTime, user.registerTime) && + Objects.equals(electronicDevices, user.electronicDevices); + } + + @Override + public int hashCode() { + return Objects.hash(userId, userPassword, userPhoneNumber, userEmail, userBirthDate, registerTime, electronicDevices); + } + + @Override + public String toString() { + return "User{" + + "userId='" + userId + '\'' + + ", userPassword='" + userPassword + '\'' + + ", userPhoneNumber='" + userPhoneNumber + '\'' + + ", userEmail='" + userEmail + '\'' + + ", userBirthDate=" + userBirthDate + + ", registerTime=" + registerTime + + ", electronicDevices=" + electronicDevices + + '}'; + } +} diff --git a/me/day05/practice/Practice02/Users.java b/me/day05/practice/Practice02/Users.java new file mode 100644 index 0000000..df2e9db --- /dev/null +++ b/me/day05/practice/Practice02/Users.java @@ -0,0 +1,88 @@ +package me.day05.practice.Practice02; + +import me.day05.practice.Practice01.Electronic; +import me.day05.practice.Practice01.User; + +import java.util.ArrayList; +import java.util.Arrays; + +/** + * - 객체 배열 `User[] userList`를 필드로 있는 `Users` 클래스를 작성하시오. + * - 필드 - User[] userList (생성된 User 객체들을 모두 저장) + * - 메소드 - 생성자, getter(), setter(), hashCode(), equals(), toString() + * - `Users` 클래스를 통해 아래의 문제를 해결해보세요. + * 1. `Users` 클래스의 객체를 싱글톤으로 생성하는 함수를 작성하시오. + * -> Users getInstance(); + * 2. 회원 아이디 userId를 통해 인자로 주어진 회원번호에 해당하는 회원을 반환하는 함수를 작성하시오. + * -> User findByUserId(String userId); + * 3. 인자로 주어진 회원 정보를 깊은 복사 (deepCopy) 하는 함수를 작성하시오. + * -> User findByUserId(String userId); + */ +public class Users { + private User [] userList; //생성된 User 객체들을 모두 저장 + private static Users instance; + + + private Users () {} + + public User[] getUserList() { + return userList; + } + + public void setUserList(User[] userList) { + this.userList = userList; + } + + public static Users getInstance() { + if (instance == null) { + instance = new Users(); + } + return instance; + } + //2. 회원 아이디 userId를 통해 인자로 주어진 회원번호에 해당하는 회원을 반환하는 함수를 작성. + public User findByUserId(String userId) { + if (userId == null) return null; + + for (User user : userList) { + if (user == null) continue; + if (user.getUserId().equals(userId)) return user; + } + return null; + } + + public User copy(User user) { + if (user == null) return null; + int userListsize = user.getElectronicDevices().size(); + + User copyUser = new User(user.getUserId(), user.getUserPassword(), user.getUserPhoneNumber(), user.getUserEmail(), user.getUserBirthDate()); + + ArrayList usingDevices = new ArrayList(); + + for (int i = 0; i < userListsize; i++) { + usingDevices.add(user.getElectronicDevices().get(i)); + } + copyUser.setElectronicDevices(usingDevices); + + 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 Arrays.equals(userList, users.userList); + } + + @Override + public int hashCode() { + return Arrays.hashCode(userList); + } + + @Override + public String toString() { + return "Users{" + + "userList=" + Arrays.toString(userList) + + '}'; + } +} diff --git a/me/day05/practice/Practice03/Electronics.java b/me/day05/practice/Practice03/Electronics.java new file mode 100644 index 0000000..ba75c3c --- /dev/null +++ b/me/day05/practice/Practice03/Electronics.java @@ -0,0 +1,141 @@ +package me.day05.practice.Practice03; + +import me.day05.practice.Practice01.Auth; +import me.day05.practice.Practice01.Company; +import me.day05.practice.Practice01.Electronic; + +import java.util.Arrays; +import java.util.Objects; + +/** + * + * - 객체 배열 `Electronic[] electronicList`를 필드로 가지고 있는 `Electronics`클래스를 작성하시오. + * - 필드 - Electronic[] electronicList (생성된 Electronic 객체들을 모두 저장) + * - 메소드 - 생성자, getter(), setter(), hashCode(), equals(), toString() + * - `Electronics` 클래스를 통해 아래의 문제를 해결해보세요. + * 1. `Electronics` 클래스의 객체를 싱글톤으로 생성하는 함수를 작성하시오. + * + * ```java + * Electronic getInstance(); + * ``` + * + * 2. 전자제품 일련번호 `productNo`를 통해 인자로 주어진 일련번호에 해당하는 전자제품을 반환하는 함수를 작성하시오. + * + * ```java + * Electronic findByProductNo(String productNo); + * ``` + * + * 3. 전자제품들 중 인자로 주어진 제조 회사를 찾아서 하나의 배열에 반환하는 함수를 작성하시오. + * + * ```java + * Electronic[] groupByCompanyName(Company company); + * ``` + * + * 4. 전자제품들 중 인자로 주어진 인증 방법을 찾아서 하나의 배열에 반환하는 함수를 작성하시오. + * + * + */ +public class Electronics { + private static Electronics instance; + private static Electronics electronics; + 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) { + increase(); + add(electronic); + } else { + electronicList[size++] = electronic; + } + } + + private void increase() { + 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(Auth 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 + + '}'; + } +}