[Spring][혼곡] 4. νšŒμ› 관리 예제 - (2) νšŒμ› 도메인과 리포지토리 λ§Œλ“€κΈ°

2021. 7. 31. 17:07Β·πŸ“ Language/✏ JAVA

νšŒμ› κ΄€λ¦¬ μ˜ˆμ œ

2. νšŒμ› λ„메인과 λ¦¬ν¬μ§€ν† λ¦¬ λ§Œλ“€κΈ°

1) νšŒμ› 도메인 λ§Œλ“€κΈ°

domain/Member.java

  • damain νŒ¨ν‚€μ§€ 생성
  • Member 클래슀 생성: μš”κ΅¬μ‚¬ν•­ 데이터 μ •μ˜ν•œλ‹€.
package hello.hello.spring.domain;

public class Member {

    private Long id; // μ‹œμŠ€ν…œμ΄ μ €μž₯ν•œ μž„μ˜μ˜ κ°’
    private String name;

    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;
    }
}

 

2) 리포지토리 λ§Œλ“€κΈ°

MemberRepository.java

  • repository νŒ¨ν‚€μ§€ 생성: νšŒμ› 객체λ₯Ό μ €μž₯ν•œλ‹€.
  • MemberRepository μΈν„°νŽ˜μ΄μŠ€ 생성: νšŒμ› μ €μž₯ 및 쑰회 κΈ°λŠ₯을 λ§Œλ“ λ‹€.
  • MemoryMemberRepository 클래슀 생성: λ©”λͺ¨λ¦¬ 기반 κ΅¬ν˜„μ²΄μ΄λ‹€.
package hello.hello.spring.repository;

import hello.hello.spring.domain.Member;

import java.util.List;
import java.util.Optional;

public interface MemberRepository {
    Member save(Member member);
    Optional<Member> findById(Long id);
    Optional<Member> findByName(String name);
    List<Member> findAll();

    // Optional: null을 λ°˜ν™˜ν•  λ•Œ κ°μ‹Έμ„œ λ°˜ν™˜ν•œλ‹€.
}

 

package hello.hello.spring.repository;

import hello.hello.spring.domain.Member;

import java.util.*;

public class MemoryMemberRepository implements MemberRepository {

    // λ™μ‹œμ„± λ¬Έμ œκ°€ κ³ λ €λ˜μ–΄ μžˆμ§€ μ•ŠμŒ
    // μ‹€λ¬΄μ—μ„œλŠ” ConcurrentHashMap, AtomicLong μ‚¬μš© κ³ λ €
    private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L;

    @Override
    public Member save(Member member) {
        // name은 이미 고객이 λ“±λ‘ν•œ μƒνƒœμ΄λ‹€.
        member.setId(++sequence);
        store.put(member.getId(), member);
        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {
        // null이 λ°˜ν™˜λ  κ°€λŠ₯성이 μžˆμœΌλ―€λ‘œ Optional둜 감싼닀.
        return Optional.ofNullable(store.get(id));
    }

    @Override
    public Optional<Member> findByName(String name) {
        // values().stream(): value 값을 loop ν•œλ‹€.
        // filter(member -> member.getName().equals(name)): λžŒλ‹€ ν˜•μ‹μœΌλ‘œ ν•„ν„°λ§ν•œλ‹€.
        // findAny(): ν•˜λ‚˜λΌλ„ 찾으면 Optional μƒνƒœλ‘œ λ°˜ν™˜ν•œλ‹€.
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }

    @Override
    public List<Member> findAll() {
        // μ‹€λ¬΄μ—μ„œλŠ” Listλ₯Ό 많이 μ‚¬μš©ν•œλ‹€.
        return new ArrayList<>(store.values());
    }
}
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Spring][혼곡] 4. νšŒμ› 관리 예제 - (4) νšŒμ› μ„œλΉ„μŠ€ 개발
  • [Spring][혼곡] 4. νšŒμ› 관리 예제 - (3) ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μž‘μ„±
  • [Spring][혼곡] 4. νšŒμ› 관리 예제 - (1) λΉ„μ¦ˆλ‹ˆμŠ€ μš”κ΅¬μ‚¬ν•­ 정리
  • [Spring][혼곡] 4. μŠ€ν”„λ§ μ›Ή 개발 기초 - API (3)
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[Spring][혼곡] 4. νšŒμ› 관리 예제 - (2) νšŒμ› 도메인과 리포지토리 λ§Œλ“€κΈ°
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”