[Java] 회원 관리 시스템 구현하기 - 1탄

2025. 2. 4. 14:22·☁️ 구름 x 카카오 Deep Dive 풀스택/Java
728x90

 

오늘은 순수 자바 코드로 간단한 회원 관리 시스템을 구현해볼 거예요!

저는 인텔리제이를 사용하고 있습니다. :)


 

📌 프로젝트 구조

 

 

 

📌 Grade.java (회원 등급)

 

회원 등급은 일반 등급과 VIP 등급으로 나누었어요.

왜냐하면 추후에 등급에 따른 할인 정책을 적용할 예정이기 때문이죠.

package hello.core.member;

public enum Grade {
    BASIC,
    VIP
}

 

 

 

📌 Member.java (회원 객체)

 

회원은 간단하게 이름, id, 등급을 멤버 변수로 가질 거예요.

Getter 및 Setter를 사용하여 값에 접근이 가능합니다.

package hello.core.member;

public class Member {

    private Long id;
    private String name;
    private Grade grade;

    // 생성자 생성
    public Member(Long id, String name, Grade grade) {
        this.id = id;
        this.name = name;
        this.grade = grade;
    }

    // 해당 메소드를 통해서  private의 값 세팅 가능
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Grade getGrade() {
        return grade;
    }

    public void setGrade(Grade grade) {
        this.grade = grade;
    }
}

 

 

 

📌 MemberRepository.java (회원 저장소 인터페이스)

 

회원을 저장하고 회원 id로 회원 찾기가 가능하도록 인터페이스를 구현합니다.

Save() -> 회원 저장

findById -> ID로 회원 찾기

package hello.core.member;

public interface MemberRepository {
    // 회원 저장
    void save(Member member);
    // 회원 id로 회원 찾기
    Member findById(Long memberId);
}

 

 

 

📌 MemoryMemberRepository.java (메모리 저장소 구현체)

 

회원 정보를 HashMap에 저장

store.put(id, member) → 회원 저장
store.get(id) → 회원 조회

package hello.core.member;

import java.util.HashMap;
import java.util.Map;

public class MemoryMemberRepository implements MemberRepository {

    // 저장소
    // HashMap 사용 시 동시성 이슈가 있을 수 있음 => 여러 곳에서 접근 시
    private static Map<Long, Member> store = new HashMap<>();

    @Override
    public void save(Member member) {
        store.put(member.getId(), member);
    }

    @Override
    public Member findById(Long memberId) {
        return store.get(memberId);
    }
}

 

⚠️ 문제점

여기서 HashMap을 사용했는데, HashMap의 경우 여러 스레드에서 동시에 접근하면

동시성 이슈가 있을 수 있습니다. 따라서 추후에 ConcurrentHashMap을 사용하는 것을 권장드립니다.

지금은 정말 간단하게 구현할 것이기 때문에 HashMap을 사용했습니다.

 

 

 

📌 MemberService.java (회원 서비스 인터페이스)

 

회원 가입 및 조회 기능을 제공하는 인터페이스를 만듭니다.

package hello.core.member;

public interface MemberService {

    void join(Member member);

    Member findMember(Long memberId);
}

 

 

 

📌 MemberServiceImpl.java (회원 서비스 구현체)

 

(비즈니스 로직 담당)
join() → 회원 저장
findMember() → 회원 조회

package hello.core.member;

// 구현체가 한 개만 있을 때는 인터페이스 명 뒤에 Impl 많이 씀.
public class MemberServiceImpl implements MemberService{

    private final MemberRepository memberRepository = new MemoryMemberRepository();

    @Override
    public void join(Member member) {
        memberRepository.save(member);
    }

    @Override
    public Member findMember(Long memberId) {
        return memberRepository.findById(memberId);
    }
}

 

⚠️ 문제점
구현체를 직접 생성 (new MemoryMemberRepository())
→ 향후 DBMemberRepository 등을 추가하면 수정해야 함.
Spring을 적용하면 DI(의존성 주입)으로 해결 가능

 

 

 

📌 MemberApp.java

 

지금까지 작성했던 코드를 실행할 클래스입니다.

회원을 저장하고, 회원을 찾고, 회원 가입한 이름과 조회한 회원의 이름을 출력하는 코드입니다.

package hello.core;

import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;

public class MemberApp {

    public static void main(String[] args) {
        MemberService memberService = new MemberServiceImpl();
        Member member = new Member(1L, "memberA", Grade.VIP);
        memberService.join(member);

        Member findMember = memberService.findMember(1L);
        System.out.println("new member = " + member.getName());
        System.out.println("find Member = " + findMember.getName());
    }
}

 

 

 

해당 코드를 실행하면 저장된 회원과 조회한 회원이 일치하는 것을 확인할 수 있습니다.


 

해당 코드가 잘 작동하는지 테스트를 해보겠습니다.

 

 

기존에 코드를 작성하던 main 디렉토리 말고 test 디렉토리에서 테스트를 할 수 있습니다.

저는 MemberServiceTest 라는 이름으로 테스트용 java 클래스를 생성했어요.

 

 

 

📌 MemberServiceTest.java (JUnit 테스트)

 

회원 가입 및 조회 테스트
Assertions.assertThat(member).isEqualTo(findMember());로 회원 가입 및 조회 검증

package hello.core.member;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

public class MemberServiceTest {

    MemberService memberService = new MemberServiceImpl();

    @Test
        //given
    void join() {
        Member member = new Member(1L, "memberA", Grade.VIP);

        // when
        memberService.join(member);
        Member findMember = memberService.findMember(1L);

        // then (검증하는 api)
        Assertions.assertThat(member).isEqualTo(findMember);
    }
}

 

 

 

해당 테스트 파일을 실행하면 실행이 잘 되는 것을 확인할 수 있습니다.

 


 

2탄에서는 간단한 할인 정책을 추가해보도록 하겠습니다!

 

[Java] 회원 관리 시스템 구현하기 - 2탄

오늘은 지난번에 간단하게 구현했던 회원 관리 시스템에서 할인 정책을 추가할 거예요. 앞서 구현한 1탄 먼저 보고 와주세요! [Java] 회원 관리 시스템 구현하기 - 1탄오늘은 순수 자바 코드로 간

zero-talk.tistory.com

 

 

 

 

 

728x90
저작자표시 비영리 동일조건 (새창열림)

'☁️ 구름 x 카카오 Deep Dive 풀스택 > Java' 카테고리의 다른 글

[Java] 회원 관리 시스템 구현하기 - 2탄  (1) 2025.02.05
[Java] 문자열 처리 과정에 있어서 메모리 사용랑과 처리 속도 효율적으로 하기  (0) 2025.01.14
'☁️ 구름 x 카카오 Deep Dive 풀스택/Java' 카테고리의 다른 글
  • [Java] 회원 관리 시스템 구현하기 - 2탄
  • [Java] 문자열 처리 과정에 있어서 메모리 사용랑과 처리 속도 효율적으로 하기
gxxg
gxxg
함께 일하고 싶은 개발자를 꿈꾸는 예비개발자의 공부 기록
  • gxxg
    공공
    gxxg
  • 전체
    오늘
    어제
    • 분류 전체보기 (138)
      • ☁️ 구름 x 카카오 Deep Dive 풀스택 (7)
        • html, css (1)
        • Java (3)
        • 스프링 MVC (0)
      • 💻 코딩테스트 (89)
        • 백준 (2)
        • programmers (87)
      • SQLD (1)
      • Language (3)
        • Java (2)
        • JavaScript (1)
      • Style Sheet (0)
        • CSS (0)
        • SCSS & SASS (0)
      • DBMS (2)
        • Oracle (2)
        • MySQL (0)
        • postgresql (0)
        • 데이터베이스 기초 이론 (0)
      • React (0)
      • SpringBoot (0)
      • JSP (2)
      • 알고리즘 (0)
      • 2023-02 몰입형 SW 정규 교육 (24)
        • 9월 프로젝트 (8)
      • 벽돌깨기 (4)
      • Etc (4)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    HTML
    JSP
    java
    Lv2
    eclipse
    2단계
    이클립스
    코테
    프로그래머스
    programmers
    spring
    티스토리챌린지
    0단계
    코딩테스트
    Lv0
    POST
    프로젝트 구조
    구현체
    회원 관리 시스템
    CSS
    junit 테스트
    톰캣
    LV3
    javascript
    DFS
    오블완
    3단계
    springboot
    자바스크립트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gxxg
[Java] 회원 관리 시스템 구현하기 - 1탄
상단으로

티스토리툴바