λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ–₯️ μ›Ή(Web)/μŠ€ν”„λ§

μŠ€ν”„λ§ setName

by bekki 2025. 4. 19.
@Test
	void 쀑볡_νšŒμ›_μ˜ˆμ™Έ() throws Exception {
		//Given
		Member member1 = new Member();
		member1.setName("spring");
		Member member2 = new Member();
		member2.setName("spring");
		//When
		memberService.join(member1);
		IllegalStateException e = assertThrows(IllegalStateException.class,
				() -> memberService.join(member2));//μ˜ˆμ™Έκ°€ λ°œμƒν•΄μ•Ό ν•œλ‹€.
		assertThat(e.getMessage()).isEqualTo("이미 μ‘΄μž¬ν•˜λŠ” νšŒμ›μž…λ‹ˆλ‹€.");
	}

new Member(); λ₯Ό 두 번 ν•΄μ„œ setName을 각각 ν•˜λŠ” μ΄μœ λŠ”?

new Member();λ₯Ό 두 번 ν•œ μ΄μœ λŠ”?

Member member1 = new Member();
member1.setName("spring");

Member member2 = new Member();
member2.setName("spring");

μ΄λ ‡κ²Œ 두 개의 Member 객체λ₯Ό μƒμ„±ν•œ μ΄μœ λŠ” 이름(name)이 같은 λ‹€λ₯Έ 객체 두 개λ₯Ό λ§Œλ“  κ²ƒμ΄μ—μš”.
→ 즉, λ™μΌν•œ 이름을 κ°€μ§„ λ‹€λ₯Έ μ‚¬μš©μž 등둝을 μ‹œλ„ν•˜λ €λŠ” ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€.

member1κ³Ό member2λŠ” λ©”λͺ¨λ¦¬ μƒμ—μ„œ μ„œλ‘œ λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€μ§€λ§Œ, 이름 "spring"은 κ°™κΈ° λ•Œλ¬Έμ—, μ„œλΉ„μŠ€ λ‘œμ§μ—μ„œ 쀑볡 νšŒμ›μœΌλ‘œ νŒλ‹¨ν•˜κ³  μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€.

 

 setName()을 ν•˜λ©΄ DB에 μ €μž₯λ˜λŠ” κ±΄κ°€μš”?

μ•„λ‹ˆμš”! setName()은 λ‹¨μˆœνžˆ 객체의 ν•„λ“œ 값을 μ„€μ •ν•˜λŠ” λ©”μ„œλ“œμΌ 뿐이고, DBμ™€λŠ” μ „ν˜€ 관련이 μ—†μŠ΅λ‹ˆλ‹€.

μ‹€μ œλ‘œ DB에 μ €μž₯λ˜λŠ” μ‹œμ μ€ 이 λΌμΈμž…λ‹ˆλ‹€:

memberService.join(member1);

즉, join() λ©”μ„œλ“œκ°€ λ‚΄λΆ€μ μœΌλ‘œ MemberRepository.save(member) 같은 κ±Έ ν˜ΈμΆœν•΄μ„œ μ˜μ†ν™”(persist)λ₯Ό μ‹œλ„ν•˜κ³ , κ·Έ κ³Όμ •μ—μ„œ DB에 μ €μž₯λ©λ‹ˆλ‹€.

 

DBλŠ” μ–΄λ”” μžˆλŠ” κ±°μ˜ˆμš”?

이 ν…ŒμŠ€νŠΈ μ½”λ“œ μžμ²΄μ—μ„œλŠ” DB의 μ’…λ₯˜κ°€ λͺ…ν™•ν•˜μ§€ μ•Šμ§€λ§Œ, 보톡 ν…ŒμŠ€νŠΈμ—μ„œλŠ” 인메λͺ¨λ¦¬ DB(H2 λ“±) λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜, κ°€μ§œ μ €μž₯μ†Œ(Mock, Memory Repository) λ₯Ό μ”λ‹ˆλ‹€.

μ˜ˆμ‹œ:

  • μ‹€μ œ ν™˜κ²½: MySQL, PostgreSQL, Oracle, etc.
  • ν…ŒμŠ€νŠΈ ν™˜κ²½: H2, MemoryMemberRepository λ“±
// 예: ν…ŒμŠ€νŠΈμš© λ©”λͺ¨λ¦¬ μ €μž₯μ†Œ
public class MemoryMemberRepository implements MemberRepository {
    private static Map<Long, Member> store = new HashMap<>();
    //...
}

 


🧠 μš”μ•½ν•˜λ©΄

  • new Member(); 두 번 ν•œ 건 λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€μ§€λ§Œ 같은 이름을 κ°€μ§€κ²Œ ν•˜κΈ° μœ„ν•¨
  • setName()은 DB μ €μž₯이 μ•„λ‹Œ 객체의 name ν•„λ“œ μ„€μ •
  • μ‹€μ œ DB μ €μž₯은 memberService.join() 같은 λ©”μ„œλ“œλ₯Ό 톡해 λ°œμƒ
  • DBλŠ” ν…ŒμŠ€νŠΈ 상황에 따라 λ©”λͺ¨λ¦¬ DB(H2) λ˜λŠ” Fake Repository 일 수 있음