diff --git a/Practice01/AuthMethod.java b/Practice01/AuthMethod.java
new file mode 100644
index 0000000..035616e
--- /dev/null
+++ b/Practice01/AuthMethod.java
@@ -0,0 +1,5 @@
+package Practice01;
+
+public class AuthMethod {
+    public enum authMethod{Fingerprint, Pattern, Pin, Face};
+}
diff --git a/Practice01/Company.java b/Practice01/Company.java
new file mode 100644
index 0000000..f12d9f9
--- /dev/null
+++ b/Practice01/Company.java
@@ -0,0 +1,5 @@
+package Practice01;
+
+public class Company {
+    public enum companyName {SAMSUNG, LG, APPLE}
+}
diff --git a/Practice01/Electronic.java b/Practice01/Electronic.java
new file mode 100644
index 0000000..adfbd7e
--- /dev/null
+++ b/Practice01/Electronic.java
@@ -0,0 +1,78 @@
+package Practice01;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+public class Electronic {
+    private String productNo;
+    private String modelName;
+    private  String dateOfMade;
+
+    private Company companyName;
+    private AuthMethod[] arrAuth;
+
+
+    @Override
+    public String toString() {
+        return "Electronic{" +
+                "productNo='" + productNo + '\'' +
+                ", modelName='" + modelName + '\'' +
+                ", 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 String getDateOfMade() {
+        return dateOfMade;
+    }
+
+    public void setDateOfMade(String dateOfMade) {
+        this.dateOfMade = dateOfMade;
+    }
+
+    public AuthMethod[] getArrAuth() {
+        return arrAuth;
+    }
+
+    public void setArrAuth(AuthMethod[] arrAuth) {
+        this.arrAuth = arrAuth;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Electronic e = (Electronic) o;
+        return Objects.equals(productNo, e.productNo) &&
+                Objects.equals(modelName, e.modelName) &&
+                Objects.equals(dateOfMade, e.dateOfMade);
+    }
+
+    @Override
+    public int hashCode() {
+        int result=Objects.hash(productNo, modelName, dateOfMade);
+        result=31*result+ Arrays.hashCode(arrAuth);
+        return result;
+    }
+}
diff --git a/Practice01/User.java b/Practice01/User.java
new file mode 100644
index 0000000..a0ac22a
--- /dev/null
+++ b/Practice01/User.java
@@ -0,0 +1,101 @@
+package Practice01;
+
+import java.time.LocalTime;
+import java.util.ArrayList;
+import java.util.Objects;
+
+public class User {
+
+    String userId;
+    String userPassword;
+    String userPhoneNumber;
+    String userEmail;
+    String userBirthDate;
+
+    ArrayList<String> electronicDevices =new ArrayList<>();
+    LocalTime registertime=LocalTime.now();//현재 시간 출력
+
+
+
+    public String toString(){
+        return "[User info] Id: " + userId+"PassWord: "+userPassword+"PhoneNumber: "
+                +userPhoneNumber+"Email: "+userEmail+"BirthDate: "+userBirthDate+
+                "Registertime: "+registertime+"electronicDevices: "+electronicDevices;
+    }
+
+    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<String> getElectronicDevices() {
+        return electronicDevices;
+    }
+
+    public void setElectronicDevices(ArrayList<String> electronicDevices) {
+        this.electronicDevices = electronicDevices;
+    }
+
+    public LocalTime getRegistertime() {
+        return registertime;
+    }
+
+    public void setRegistertime(LocalTime registertime) {
+        this.registertime = registertime;
+    }
+
+    @Override
+    public int hashCode(){
+        return Objects.hash(electronicDevices, registertime, userBirthDate, userEmail, userId, userPassword,
+                userPhoneNumber);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        User u = (User) o;
+        return Objects.equals(electronicDevices, u.electronicDevices) &&
+                Objects.equals(registertime, u.registertime)&&
+                Objects.equals(userBirthDate, u.userBirthDate)&&
+                Objects.equals(userEmail, u.userEmail)&&
+                Objects.equals(userId, u.userId)&&
+                Objects.equals(userPassword, u.userPassword)&&
+                Objects.equals(userPhoneNumber, u.userPhoneNumber) ;
+    }
+}
diff --git a/Practice02/Users.java b/Practice02/Users.java
new file mode 100644
index 0000000..60d503a
--- /dev/null
+++ b/Practice02/Users.java
@@ -0,0 +1,84 @@
+package Practice02;
+
+import Practice01.User;
+
+import java.util.Arrays;
+
+//실습2.  객체 배열 `User[] userList`를 필드로 있는 `Users` 클래스를 작성하시오.
+//    - 필드 - User[] userList (생성된 User 객체들을 모두 저장)
+//    - 메소드 - 생성자, getter(), setter(), hashCode(), equals(), toString()
+public class Users {
+    private static User[] userslist;
+    private static Users singleton;
+    private Users(){
+        userslist =new User[10];
+    }
+
+    public User[] getUserslist() {
+        return userslist;
+    }
+
+    public void setUserslist(User[] userslist) {
+        this.userslist = userslist;
+    }
+
+    @Override
+    public int hashCode() {
+        return Arrays.hashCode(userslist);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Users u = (Users) o;
+        return Arrays.equals(userslist, u.userslist);
+    }
+
+    @Override
+    public String toString() {
+        String s="";
+        for(int i=0;i<userslist.length;i++){
+            s+=userslist[i];
+        }
+        return s;
+    }
+
+    //2-1 Users 클래스의 객체를 싱글톤으로 생성하는 함수를 작성(Double Checked Locking 방식)
+
+    public Users getInstance(){
+         if(singleton==null){
+             synchronized (Users.class) {
+                 if (singleton == null) {
+                     singleton = new Users();
+                 }
+             }
+         }
+         return singleton;
+    }
+
+    //2-2 회원 아이디 userId를 통해 인자로 주어진 회원번호에 해당하는 회원을 반환하는 함수를 작성
+    public User findByUserId(String userId){
+        for(int i=0; i<userslist.length;i++){
+            if(userslist[i].getUserId()==userId){
+                return userslist[i];
+            }
+        }
+        return null;
+    }
+
+
+    //2-3 인자로 주어진 회원 정보를 깊은 복사 (deepCopy - '실제 값'을 새로운 메모리 공간에 복사하는 것) 하는 함수를 작성
+    public User copy(User user){
+        User copy =new User();
+        copy.setUserId(user.getUserId());
+        copy.setUserPassword(user.getUserPassword());
+        copy.setUserEmail(user.getUserEmail());
+        copy.setUserBirthDate(user.getUserBirthDate());
+        copy.setUserPhoneNumber(user.getUserPhoneNumber());
+        copy.setElectronicDevices(user.getElectronicDevices());
+        copy.setRegistertime(user.getRegistertime());
+
+        return copy;
+    }
+}
diff --git a/Practice03/Electronics.java b/Practice03/Electronics.java
new file mode 100644
index 0000000..c98be0c
--- /dev/null
+++ b/Practice03/Electronics.java
@@ -0,0 +1,92 @@
+package Practice03;
+
+import Practice01.AuthMethod;
+import Practice01.Company;
+import Practice01.Electronic;
+import Practice02.Users;
+
+import java.util.*;
+import java.util.Arrays;
+
+public class Electronics {
+//- 객체 배열 `Electronic[] electronicList`를 필드로 가지고 있는 `Electronics`클래스를 작성하시오.
+//    - 필드 - Electronic[] electronicList (생성된 Electronic 객체들을 모두 저장)
+//    - 메소드 - 생성자, getter(), setter(), hashCode(), equals(), toString()
+    private static Electronic[] electroniclist;
+    private Electronics singleton;
+    private Electronics(){
+
+    }
+
+    public Electronic[] getElectroniclist() {
+        return electroniclist;
+    }
+
+    public void setElectroniclist(Electronic[] electroniclist) {
+        this.electroniclist = electroniclist;
+    }
+    @Override
+    public int hashCode() {
+        return Arrays.hashCode(electroniclist);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Electronics e = (Electronics) o;
+        return Arrays.equals(electroniclist, e.electroniclist);
+    }
+
+    @Override
+    public String toString() {
+
+        return Arrays.toString(electroniclist);
+    }
+
+    //3-1 Electronic 클래스의 객체를 싱글톤으로 생성하는 함수를 작성(Double Checked Locking 방식)
+
+    public Electronics getInstance(){
+        if(singleton==null){
+            synchronized (Users.class) {
+                if (singleton == null) {
+                    singleton = new Electronics();
+                }
+            }
+        }
+        return singleton;
+    }
+
+    //3-2 전자제품 일련번호 productNo를 통해 인자로 주어진 일련번호에 해당하는 전자제품을 반환하는 함수를 작성
+    public static Electronic findByProductNo(String productNo){
+        for(int i=0; i<electroniclist.length;i++){
+            if(electroniclist[i].getProductNo()==productNo){
+                return electroniclist[i];
+            }
+        }
+        return null;
+    }
+
+    //3-3 전자제품들 중 인자로 주어진 제조 회사를 찾아서 하나의 배열에 반환하는 함수를 작성
+    public static List<Electronic> groupByCompanyName(Company company){
+        List<Electronic> groupByCompanyNamelist =new ArrayList<>();
+        for(int i=0; i<electroniclist.length;i++){
+            if(electroniclist[i].getCompanyName().equals(company)){
+                groupByCompanyNamelist.add(electroniclist[i]);
+            }
+        }
+        return groupByCompanyNamelist;
+    }
+
+    //3-4 전자제품들 중 인자로 주어진 인증 방법을 찾아서 하나의 배열에 반환하는 함수를 작성
+    public static List<Electronic> groupByAuthMethod(AuthMethod authMethod){
+
+        List<Electronic>  groupByAuthMethodlist =new ArrayList<>();
+        for(int i=0; i<electroniclist.length;i++){
+            if(electroniclist[i].getArrAuth().equals(authMethod)){
+                groupByAuthMethodlist.add(electroniclist[i]);
+            }
+        }
+        return groupByAuthMethodlist ;
+    }
+}