Java 응용

Java 응용 (5. 이메일 검색 서비스)

Kw_w 2024. 3. 14. 20:04
 “훌륭한 사람은 레이저 같은 집중력을 가진 평범한 사람입니다.”
– 브루스 리

검색 서비스를 구현해보자

사용자로부터 email을 입력받으면 서비스를 통해 사용자를 검색하고 입력된 사용자의 정보를 출력해보는 프로그램

사용자 정보는 이름과 이메일을 포함하고, 필수적인 정보는 이메일이다. 이름이 없는 경우 no name으로 표기된다.

사용자 정보는 기존 db에 5건이 저장되어 있으며, 추가 사용자를 등록시 중복된 이메일이 온다면 db에 저장되지 않는다.

Customer

import java.util.Objects;

public class Customer {
    String name;
    String email;

    public Customer(String name, String email){
        this.email = email;
        this.name = name;
    }
    public Customer(String email){
        this("no name",email);
    }

    @Override
    public String toString() {
        return "Customer{" +
                "name='" + name + '\\'' +
                ", email='" + email + '\\'' +
                '}';
    }
    @Override
    public int hashCode() {
        return Objects.hashCode(email);
    }
    @Override
    public boolean equals(Object obj) {
        return Objects.equals(this.email,((Customer)obj).email);
    }
}

 

toString() 메서드는 객체를 문자열로 표현할 때 사용

이 메서드를 오버라이드하여 객체를 읽기 쉬운 형태로 문자열로 변환,  위 코드는 Customer 객체의 이름과 이메일을 문자열로 반환하여 객체를 표현

hashCode() 메서드는 객체의 해시 코드를 반환

이 메서드를 오버라이드하여 객체의 동등성 검사나 해시 맵과 같은 자료 구조에서 객체를 검색할 때 사용, 위 코드는 이메일을 기반으로 한 해시 코드를 생성하여 동일한 이메일을 가진 객체를 동일하게 처리

equals() 메서드는 객체의 동등성을 비교

이 메서드를 오버라이드하여 두 객체가 동일한지 여부를 결정, 위 코드는 객체의 이메일이 같은 경우에만 두 객체를 동일하다고 판단

Repository

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

public final class Repository {
    private static Set<Customer> database;
    static {
        database = new HashSet<>();
        database.add(new Customer("Kevin","001@gmail.com"));
        database.add(new Customer("002@gmail.com"));
        database.add(new Customer("003@gmail.com"));
        database.add(new Customer("Cooper","004@gmail.com"));
        database.add(new Customer("Lisa","005@gmail.com"));
    }
    public static void addCustomer(String name, String email){
        database.add(new Customer(name, email));
    }
    public static void addCustomer(String email){
        database.add(new Customer(email));
    }
    public static Customer findCustomer(String email){
        for(var customer : database){
            if(Objects.equals(email, customer.email))return customer;
        }
        return null;
    }
}

 

  1. private static Set<Customer> database;
    • Customer 객체를 저장할 수 있는 Set 타입의 database 변수를 선언
  2. static { ... }
    • 정적 초기화 블록을 사용하여 database를 초기화
  3. database = new HashSet<>();
    • HashSet 객체를 생성하여 database 변수에 할당, 이 HashSet은 중복된 요소를 허용하지 않음

RepositoryService

public class RepositoryService {
    public void addCustomer(String name, String email){
        Repository.addCustomer(name, email);
    }
    public void addCustomer(String email){
        Repository.addCustomer(email);
    }
    public Customer findCustomer(String email){
        return Repository.findCustomer(email);
    }
}
  1. public void addCustomer (String name, String email)
    • 이메일과 이름 두개 다 입력할 때 고객을 추가하는 경우
  2. public void addCustomer (String email)
    • 이메일만 입력 했을 때 고객을 추가하는 경우
  3. public Customer findCustomer (String  email)
    • email을 입력하여 고객을 찾음 Repository의 findCustomer을 불러옴

UI

public class UI {
    public static void main(String[] args) {
        var service = new RepositoryService();
        service.addCustomer("toss@gmail.com");
        service.addCustomer("Lili","006@gmail.com");

        System.out.println(service.findCustomer("001@gmail.com"));
        System.out.println(service.findCustomer("toss@gmail.com"));
    }

}