본문 바로가기

토이 프로젝트

[토이프로젝트 Java] 게시판 만들기01 - 회원기능

간단한 게시판 프로그램을 구성해보려고 합니다.

콘솔창으로 표현되는 게시판이라 조잡하지만 기본 개념을 복습한다는 생각으로 만들어보겠습니다

 

회원으로 로그인 해서 게시판을 읽고 게시글을 수정, 삭제할 수 있는 기본 게시판 기능을 탑재하겠습니다.

손 가는대로 코딩하다 보니 게시판 보다 회원가입 기능을 먼저 구현했네요 (설계실패..)

 

 

기능

회원 가입, 회원정보 읽기, 회원정보 수정, 회원 삭제 등 CRUD

콘솔창에서 요청 입력

 

 

 

패키지 구조

 

 


 

코드

 

MemberVO.class

VO(Value Object) 클래스를 생성합니다.

참고로 toString() 메서드의 경우 IDE 자동완성 기능을 활용하면 쉽게 오버라이드해 생성할 수 있습니다.

import java.util.Date;

public class MemberVO {
    private String id;
    private String name;
    private String pw;
    private String email;
    private Date registerDate;

    public String getId() {
        return id;
    }

    public MemberVO setId(String id) {
        this.id = id;
        return this;
    }

    public String getName() {
        return name;
    }

    public MemberVO setName(String name) {
        this.name = name;
        return this;
    }

    public String getPw() {
        return pw;
    }

    public MemberVO setPw(String pw) {
        this.pw = pw;
        return this;
    }

    public String getEmail() {
        return email;
    }

    public MemberVO setEmail(String email) {
        this.email = email;
        return this;
    }

    public Date getRegisterDate() {
        return registerDate;
    }

    public MemberVO setRegisterDate(Date registerDate) {
        this.registerDate = registerDate;
        return this;
    }

//회원정보 확인
    @Override
    public String toString() {
        return "MemberVO{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", pw='" + pw + '\'' +
                ", email='" + email + '\'' +
                ", registerDate=" + registerDate +
                '}';
    }
}

 

 

 

MemberService.class

회원 관련 서비스를 수행할 수 있는 코드를 작성합니다.

먼저 인터페이스에 필요한 메서드를 코딩합니다.

import java.util.List;

public interface MemberService {
    boolean memberSearch(String id);
    void memberInsert(MemberVO vo);
    MemberVO memberRead(String id);
    void memberUpdate(MemberVO vo);
    boolean memberDelete(String id);
    List<MemberVO> memberAll();
}

 

 

 

MemoryMemberServiceImpl.class

위에서 작성한 MemberService 인터페이스의 구현체를 작성합니다. 

메서드를 오버라이드해 로직코드를 작성합니다.

현재는 메모리에 임시로 저장하고 나중에 DB 연결할 예정이니까 Memory라고 이름을 붙여주었습니다.

import java.util.ArrayList;
import java.util.List;

public class MemoryMemberServiceImpl implements MemberService {
    private static List<MemberVO> memberList;

    public MemoryMemberServiceImpl() {
        memberList = new ArrayList<>();
    }

    private static List<MemberVO> getMemberList(){
        return memberList;
    }

    //회원정보 조회
    @Override
    public boolean memberSearch(String id) {
        List<MemberVO> list = getMemberList();
        for (MemberVO member : list) {
            if(member.getId().equals(id)){
                return true;
            }
        }
        return false;
    }

    //회원가입
    @Override
    public void memberInsert(MemberVO vo) {
        System.out.println("MemberServiceImpl.memberInsert");
        List<MemberVO> list = getMemberList();
        list.add(vo);
    }

    //회원정보 읽기
    @Override
    public MemberVO memberRead(String id) {
        System.out.println("MemberServiceImpl.memberRead");
        List<MemberVO> list = getMemberList();
        MemberVO result = new MemberVO();
        for (MemberVO member : list) {
            if(member.getId().equals(id)){
                result.setId(member.getId())
                    .setPw(member.getPw())
                    .setName(member.getName())
                    .setEmail(member.getEmail())
                    .setRegisterDate(member.getRegisterDate());
                break;
            }
        }
        return result;
    }

    //회원정보 수정
    @Override
    public void memberUpdate(MemberVO vo) {
        System.out.println("MemberServiceImpl.memberUpdate");
        List<MemberVO> list = getMemberList();
        MemberVO result = null;
        for (MemberVO member : list) {
            if(member.getId().equals(vo.getId())){
                result.setPw(member.getPw())
                    .setName(member.getName())
                    .setEmail(member.getEmail());
                break;
            }
        }
    }
    
    //회원정보 삭제
    @Override
    public boolean memberDelete(String id) {
        System.out.println("MemberServiceImpl.memberDelete");
        List<MemberVO> list = getMemberList();
        for (MemberVO member : list) {
            if(member.getId().equals(id)){
                list.remove(member);
                return true;
            }
        }
        return false;
    }

    //전체 회원정보 가져오기
    @Override
    public List<MemberVO> memberAll() {
        System.out.println("MemberServiceImpl.memberAll");
        return getMemberList();
    }
}

 

 

 

Assembler.class

의존성 주입을 위해 구현객체를 지정해 조립(assemble)해주는 클래스입니다.

어떤 MemberService 구현체를 선택할지 지정하는 역할을 수행합니다.

public class Assembler {
    public MemberService getMemberService() {
        return new MemoryMemberServiceImpl();
    }
}

 

 

 

Main.class

코드가 꽤 깁니다. 일단 실행되는 것을 확인하기 위한 코드 입니다. 

실행시켜보면 잘 되는데 추후 간결한 코드로 수정해보겠습니다.

public class Main {
    private static final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    private static final Assembler assembler = new Assembler();
    private static final MemberService memberService = assembler.getMemberService();
    private static final String ONLY_NUMBER = "숫자만 입력바랍니다";
    private static MemberVO memberVO;

    public static void main(String[] args) {
        try {
            while(true){
                memberRequest();
            }
        } catch (IOException ignored) {
        }
    }

    public static void memberRequest() throws IOException {
        printHelp();
        String input = reader.readLine();
        System.out.println("입력값 = " + input);

        if(!isNumber(input)){
            System.out.println(ONLY_NUMBER);
            return;
        }
        int request = Integer.parseInt(input);

        switch (request){
            case 0: //종료
                exit();

            case 1: //가입
                String id = "";
                while(true){
                    System.out.print("id : ");
                    id = reader.readLine().trim();
                    break;
                }
                memberService.memberSearch(id);

                System.out.print("name : ");
                String name = reader.readLine().trim();

                System.out.print("pw : ");
                String pw = reader.readLine().trim();

                System.out.print("email : ");
                String email = reader.readLine().trim();

                memberVO = new MemberVO();
                memberVO.setId(id)
                        .setPw(pw)
                        .setName(name)
                        .setEmail(email)
                        .setRegisterDate(new Date());
                memberService.memberInsert(memberVO);
                break;

            case 2: //정보 확인
                System.out.print("검색할 id : ");
                String searchId = reader.readLine().trim();
                memberVO = memberService.memberRead(searchId);
                if(memberVO.getId() == null){
                    System.out.println("검색결과가 없습니다");
                } else {
                    System.out.println(memberVO);
                }
                
                break;

            case 3: //정보 수정
                boolean search = false;
                String updateId = null;
                int count = 3;
                for (int i = 1; i <= count; i++) {
                    System.out.print("수정할 id : ");
                    updateId = reader.readLine().trim();
                    search = memberService.memberSearch(updateId);
                    if(search) {
                        break;
                    }
                    System.out.println("다시 입력해주세요");
                }
                if(!search){
                    break;
                }

                System.out.print("수정할 name : ");
                String updateName = reader.readLine().trim();

                System.out.print("수정할 pw : ");
                String updatePw = reader.readLine().trim();

                System.out.print("수정할 email : ");
                String updateEmail = reader.readLine().trim();

                memberVO.setId(updateId)
                        .setPw(updateName)
                        .setName(updatePw)
                        .setEmail(updateEmail);
                memberService.memberUpdate(memberVO);
                break;

            case 4: //정보 삭제
                System.out.print("삭제할 id : ");
                String deleteId = reader.readLine().trim();
                boolean result = memberService.memberDelete(deleteId);
                if(result){
                    System.out.println("회원정보 삭제되었습니다");
                } else {
                    System.out.println("삭제된 정보가 없습니다");
                }
                break;

            case 5: //정보 현황
                List<MemberVO> list = memberService.memberAll();
                if(list.isEmpty()){
                    System.out.println("회원 검색결과가 없습니다");
                    break;
                }
                System.out.println("전체 회원 현황");
                for (MemberVO member : list) {
                    System.out.println(member);
                }
                System.out.println("end");
                break;

            default:
                System.out.println("숫자를 다시 입력해주세요");
        }
    }

    public static void printHelp() {
        StringBuilder sb = new StringBuilder();
        sb.append("\n-------------------------")
            .append("\n원하는 서비스를 선택하세요")
            .append("\n 0. 프로그램 종료")
            .append("\n 1. 회원 가입")
            .append("\n 2. 회원정보 확인")
            .append("\n 3. 회원정보 수정")
            .append("\n 4. 회원정보 삭제")
            .append("\n 5. 전체회원 현황")
            .append("\n-------------------------")
            .append("\n입력 : ");
        System.out.print(sb);
        sb.setLength(0);
    }

    public static boolean isNumber(String s) {
        boolean isNumber = false;
        try {
            Integer.parseInt(s);
            isNumber = true;
        } catch (NumberFormatException ignored) {
            System.out.println("숫자변환 실패");
        }
        return isNumber;
    }

    public static void exit() throws IOException {
        reader.close();
        System.exit(0);
    }
}

 

 

 

실행 결과