<์ถœ์ฒ˜ ์ธํ”„๋Ÿฐ>

 

์•„์ฃผ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์˜ ๊ธฐ์ดˆ ํ‹€์„ ๋งŒ๋“œ๋Š” ๊ฐ•์˜์˜€๋‹ค. ์—ฌ๊ธฐ์—์„œ ์•Œ์•„๋‘˜ ๊ฒƒ์€ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด๋‹ค. ํ˜„์žฌ ๊ฐ•์˜ ์‹œ์ ์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์™„๋ฒฝํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜์ง„ ๋ชปํ–ˆ๋Š”๋ฐ, ๊ทธ ๋ฌธ์ œ์ ์„ ํ†ตํ•ด ์ถ”ํ›„ ์–ด๋–ค ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ์•ผํ•˜๋ฉฐ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด์˜ ๊ด€๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ •๋ฆฝํ•ด์•ผํ• ์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋Š” ๊ฐ•์˜๊ฐ€ ์ด๋ค„์ง„๋‹ค. ์–ด์จŒ๋“  ํ˜„์žฌ ์‹œ์ ์—์„  ํ”„๋กœ์ ํŠธ์˜ ํ‹€์„ ์–ด๋–ค์‹์œผ๋กœ ์งœ์•ผํ•˜๋ฉฐ enum, interface, class๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์™œ ์žˆ๋Š”์ง€๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

๐Ÿงธ

์ž˜๋ชป๋œ ์ •๋ณด๋ฅผ ์ ์—ˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”

 


๐Ÿงธ ๊ตฌ์กฐํŒŒ์•… ๋ ˆ์ธ ๊ผฌ์šฐ- ๐Ÿงธ

โœ”๏ธ   ์ด ์„ธ๊ฐ€์ง€์˜ package๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

  • member
    ใ„ด class : Member, MemberServiceImpl, MemoryMemberRepository
    ใ„ด interface : MemberService, MemberRepository
    ใ„ด enum : Grade
  • discount
    ใ„ด class : FixDiscountPolicy
    ใ„ด interface : DiscountPolicy
  • order
    ใ„ด class : Order, OrderServiceimpl
    ใ„ด interface : OrderService

 


โœ”๏ธ  member

โ–บ  Member

ํšŒ์›์ €์žฅ์†Œ ๊ด€๋ฆฌ

 

 

GetterSetter(public)

: private ๊ฐ’์„ ์™ธ๋ถ€๋กœ ๋นผ๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.

 

id, name, grade์ธ ์ด 3๊ฐ€์ง€ private ์ •๋ณด๋ฅผ ๋„ฃ์—ˆ๋‹ค.

 

 

- GetterSetter ์ถœ์ฒ˜ 

 

[OOP] Getter์™€ Setter๋Š” ์ง€์–‘ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค

๋ชฉ์ฐจ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์–ผ๋งˆ ์ „ ์‚ฌ๋‚ด์—์„œ Getter์™€ Setter๋ฅผ ํ•จ๋ถ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ์„ธ๋ฏธ๋‚˜๊ฐ€ ์žˆ์—ˆ๋‹ค. Setter์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋Š” ์›Œ๋‚™ ๋งŽ์ด ์•Œ๋ ค์ ธ์žˆ์—ˆ์ง€๋งŒ Getter์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋Š” ์ž˜ ํ•˜์ง€ ์•Š

colabear754.tistory.com

 

 

 

 

โ–บ MemoryMemberRepository

ํšŒ์›์ •๋ณด๋ฅผ store์— ์ €์žฅํ•˜๋Š” ํšŒ์›์ €์žฅ์†Œ

 

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

 

save๋ผ๋Š” ๋ฉ”์„œ๋“œ๋Š” Member ํด๋ž˜์Šค์— ์ •์˜ํ•œ ๊ฐ์ฒด๋ฅผ ๋”ฐ๋ฅด๋ฉฐ Member์— ์žˆ๋Š” getter๋ฅผ ํ†ตํ•ด id ๊ฐ’์„ ์–ป๊ณ  ๊ทธ id ๊ฐ’์„ store์— put ํ•˜๊ฒ ๋‹ค๋Š” ๋‚ด์šฉ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— save ์•ž์— void๋ฅผ ๋ถ™์—ฌ์ค€ ๊ฒƒ์ด๋‹ค. ๋ฐ˜ํ™˜ํ•˜๋Š” ํƒ€์ž…์— void๋ฅผ ๋ถ™์—ฌ ํ˜ธ์ถœํ•œ ์ชฝ์— ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๋ช…์‹œํ•œ ๊ฒƒ์ด๋‹ค. (ํ˜ธ์ถœ ์ชฝ์€ ๋„ฃ์–ด๋‹ฌ๋ผ ํ–ˆ์œผ๋‹ˆ ๋„ฃ์œผ๋ฉด ๋์ธ ๊ฒƒ์ด๋‹ค.)

 

 

 

โ€ขโ€ขโ€ข ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ โ€ขโ€ขโ€ข

 

 

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

 

findById

: id๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ ์‹ค์ œ ๊ฐ์ฒด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

id๋Š” Member ํด๋ž˜์Šค์— private Long id;๋ผ๊ณ  ์„ ์–ธ๋˜์–ด์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— Map<Long, Member>๋ผ๊ณ  ์„ ์–ธํ•˜๊ณ  store์—์„œ id๋ฅผ ์ฐพ์„ ๋•Œ๋„ Long ํƒ€์ž…์œผ๋กœ ์ ์€ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด findById ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ฐพ์€ id๋Š” Member ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

 

 

Q. findById์™€ getById์™€์˜ ์ฐจ์ด์ ์€?

A. ํ˜„์žฌ inteliJ์—์„œ getById๋ณด๋‹ค getReferenceById๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์œ ํ•˜๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ getReferenceById๋Š” findById์™€ ๋‹ค๋ฅด๊ฒŒ ์‹ค์ œ ๊ฐ์ฒด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ null์ด ์•„๋‹Œ EntityNotFoundException ์˜ˆ์™ธ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค.

 

 

Q. Member member์˜ Member์™€ Long memberId์˜ Long, ์™œ ํƒ€์ž…์ด ๋‹ค๋ฅธ๊ฐ€?

A. ๊ณ ๊ฐ์ด ์žˆ๋‹ค. ๊ณ ๊ฐ์˜ ์ •๋ณด๋Š” ์ด ์„ธ๊ฐ€์ง€์ธ id, name, grade๊ฐ€ ๋œ๋‹ค. ์ด ์ค‘์— ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ณ ์œ ํ•œ ๊ฐ’์€ id ๋ฟ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๊ณ ๊ฐ์˜ ์ •๋ณด๋ฅผ ์ฐพ๊ณ ์ž ํ•  ๋•Œ id๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Member ๊ฐ์ฒด ์† id ํ•„๋“œ๋งŒ์„ ์ด์šฉํ•˜์—ฌ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์— memberId ์•ž์—” Long ํƒ€์ž…์œผ๋กœ ์ ์–ด์ค€ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  id๋ฅผ ํ†ตํ•ด ๊ณ ๊ฐ์˜ ์ •๋ณด๋ฅผ ์ฐพ์•„์˜ค๋ฉด ๊ทธ ์†์— name๊ณผ grade๋„ ํฌํ•จ๋˜์–ด ์žˆ๊ฒŒ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— Member ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

- findById์™€ getById์˜ ์ฐจ์ด ์ถœ์ฒ˜

 

220905 TIL getById() vs findById()

๊ธˆ์š”์ผ ์ฝ”๋”ฉ ์ธํ„ฐ๋ทฐ ์‹œ๊ฐ„์— ๋ฐ›์•˜๋˜ ์งˆ๋ฌธ ์ค‘ ์ œ๋Œ€๋กœ ๋Œ€๋‹ตํ•˜์ง€ ๋ชปํ–ˆ๋˜ ์งˆ๋ฌธ์ธ findById์™€ getById์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ดค๋‹ค. getById ์šฐ์„  getById()๋Š” Spring Data JPA 2.7.2๋ถ€ํ„ฐ Deprecated ๋˜๊ณ  getReferenceById()๋กœ ๋ณ€๊ฒฝ์ด

seungjjun.tistory.com

 

 

 

 

 

โ–บ MemberServiceImpl

ํšŒ์›๊ฐ€์ž…๊ณผ ํšŒ์›์กฐํšŒ ํ•œ๋‹ค. (ํšŒ์›์„œ๋น„์Šค์ œ๊ณต)

 

 

[ํ…Œ์ŠคํŠธ ํ•  ๋•Œ]

// ํ…Œ์ŠคํŠธ MemberServiceTest 
MemberService memberService = new MemberServiceImpl();
...
์œ„์˜ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ํšŒ์›์ •๋ณด๊ฐ€ ๋“ค์–ด์˜จ๋‹ค.

MemberServiceImpl ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. MemberServiceImpl ํด๋ž˜์Šค๋Š” MemberService๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ MemberServiceImpl์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ MemberService์ธ ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•œ ์ด์œ ๋Š” ๋‹คํ˜•์„ฑ์„ ์œ„ํ•จ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์–ด๋–ค ๊ตฌํ˜„์ฒด์™€ ์—ฐ๊ด€๋˜์—ˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค. 

MemberServiceImpl memberServiceImpl = new MemberServiceImpl( );์€ ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฐ๋‹ค. ์™œ๋ƒํ•˜๋ฉด MemberServiceImpl์— ์†ํ•ด์žˆ๋Š” ๋ฉ”์„œ๋“œ๋งŒ ์ด์šฉ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ํƒ€์ž…์„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋‹ค๋ฅธ ๊ตฌ์ฒด ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ์—ฌ๋„ ๋™์ž‘ ๋ฐฉ์‹์ด ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ๋ฅผ ํ›จ์”ฌ ์œ ์—ฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋ฉฐ ์œ ์ง€๋ณด์ˆ˜์—๋„ ์ข‹๋‹ค.

 

 

// MemberServiceImpl ํด๋ž˜์Šค

private final MemberRepository memberRepository = new MemoryMemberRepository();

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

 

MemoryMemberRepository(ํšŒ์›์ €์žฅ์†Œ)์— ์žˆ๋Š” ์ •๋ณด๋ฅผ ์›ํ• ํ•˜๊ฒŒ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•ด
'private final MemberRepository memberRepository = new MemoryMemberRepository();' ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค.

์•„๊นŒ test ์ฝ”๋“œ์—์„œ ๋ณธ ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํƒ€์ž… ๊ทธ๋ฆฌ๊ณ  ์ธํ„ฐํŽ˜์ด์Šค์— ์—ฐ๊ฒฐํ•  ๊ตฌํ˜„์ฒด๋ฅผ ์„ ์–ธํ–ˆ๋‹ค. ํ›„์— ๋ฐฐ์šฐ๊ฒ ์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์“ฐ๋Š” ๋ฐฉ์‹์ด ๋งž๋Š” ๋ฐฉ์‹์€ ์•„๋‹ˆ๋‹ค. ๋งŒ์ผ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ๊ตฌํ˜„์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์„ ์–ธ๋˜์–ด์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฐฉ๋ฌธํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—(์˜์กด์„ฑ ๋ฌธ์ œ) ์ด ๋ฐฉ์‹์€ ์„ ํ˜ธํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ˜„์žฌ ์ฝ”๋“œ์—์„œ final์ด ๋ถ™์–ด์žˆ๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ์„ ์–ธ๋œ ๊ตฌํ˜„์ฒด์ธ MemoryMemberRepository๋ฅผ ๋‹ค๋ฅธ ๊ตฌํ˜„ ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•จ์ด๋‹ค. (๋‚ด๋ถ€ ์ฝ”๋“œ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค)

memberRepository์— ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์—ฌ ํšŒ์›๊ฐ€์ž…์ด ๋˜๋„๋กํ•œ๋‹ค.

 

 

 

 

 


 

 

 

โœ”๏ธ  discount

     < ์กฐ๊ฑด >

  • ํ• ์ธ ์ •์ฑ…์€ ๋ชจ๋“  VIP๋Š” 1000์›์„ ํ• ์ธํ•ด์ฃผ๋Š” ๊ณ ์ • ๊ธˆ์•ก ํ• ์ธ์„ ์ ์šฉํ•ด๋‹ฌ๋ผ. (๋‚˜์ค‘์— ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ๋‹ค.)
  • ํ• ์ธ ์ •์ฑ…์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ํšŒ์‚ฌ์˜ ๊ธฐ๋ณธ ํ• ์ธ ์ •์ฑ…์„ ์•„์ง ์ •ํ•˜์ง€ ๋ชปํ–ˆ๊ณ , ์˜คํ”ˆ ์ง์ „๊นŒ์ง€ ๊ณ ๋ฏผ์„ ๋ฏธ๋ฃจ๊ณ  ์‹ถ๋‹ค. ์ตœ์•…์˜ ๊ฒฝ์šฐ ํ• ์ธ์„ ์ ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ๋„ ์žˆ๋‹ค. (๋ฏธํ™•์ •)

 

โ–บ DiscountPolicy

: ์ผ๋ฐ˜(?) ํ• ์ธ ์ •์ฑ…

ํ™•์ •๋œ ๊ฒƒ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์ œ๋“ ์ง€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜๋งŒ ํ•ด์ค€๋‹ค.

 

 

โ–บ FixDiscountPolicy 

 : VIP๋Š” 1000์› ํ• ์ธ ์ •์ฑ…

 

private int discountFixAmount = 1000;
ํ• ์ธํ•  ๊ฐ€๊ฒฉ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋”ฐ๋กœ 1000์›์„ ์„ ์–ธํ•œ๋‹ค.

 

if (member.getGrade() == Grade.VIP) {
            return discountFixAmount;
discount ๋ฉ”์„œ๋“œ๋Š” Member์™€ price๋ฅผ ๋ฐ›๋Š”๋‹ค.(Member member, int price) ๊ทธ๋ ‡๊ฒŒ Member ํด๋ž˜์Šค์— ์žˆ๋Š” getGrade๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋“ฑ๊ธ‰์ด VIP์ด๋ฉด discountFixAmount๋ฅผ ๋ฆฌํ„ดํ•˜์—ฌ ๊ฐ€๊ฒฉ์˜ 1000์›์„ ํ• ์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

 

 

 


 

โœ”๏ธ  order

 

โ–บ Order

: ๊ณ ๊ฐ์˜ ์ฃผ๋ฌธ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ตœ์ข… ๊ธˆ์•ก ๊ณ„์‚ฐ

 

public Order(Long memberId, String itemName, int itemPrice ,int discountPrice) {
        this.memberId = memberId;
        this.itemPrice = itemPrice;
        this.itemName = itemName;
        this.discountPrice = discountPrice;
    }

 

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด ์ธ์ž๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋Š”๋ฐ, ๊ทธ ์ธ์ž๋ฅผ ๋ฐ›์•„ ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ด Order ์ƒ์„ฑ์ž๊ฐ€ ํ•˜๋Š” ์ผ์ด๋‹ค. 

์ธ์ž์— ๋Œ€ํ•ด์„œ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ์œ„์˜ ๋งค๊ฐœ๋ณ€์ˆ˜(memberId, itemName ๋“ฑ) ์•ˆ์— ๊ตฌ์ฒด์ ์ธ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ๋œ๋‹ค. ๊ทธ๊ฒƒ์„ ์ธ์ž๋ผ๊ณ  ํ•˜๋Š”๋ฐ

 

 

 

โ€ขโ€ขโ€ข ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ โ€ขโ€ขโ€ข

 

 

public Long getmemberId() {
	return memberId;
}

public String getItemName() {
	return itemName;
    }
getter๋ฅผ ์ด์šฉํ•˜์—ฌ memberId์™€ ItemName์„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” Order ํด๋ž˜์Šค์—์„œ ๋ณ€์ˆ˜๋ฅผ private์œผ๋กœ ์ •์˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Order ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์™ธ๋ถ€ ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ๊ฐ์ฒด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์œผ๋ฉด getter๋ฅผ ํ†ตํ•ด์•ผํ•œ๋‹ค. 

๋งŒ์•ฝ getter๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์™ธ๋ถ€ ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด, ์•ž์—์„œ ๋ดค๋“ฏ์ด order.getmemberId();๋ฅผ ์“ฐ๋ฉด ๋œ๋‹ค.

 

 

 

โ€ขโ€ขโ€ข ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ โ€ขโ€ขโ€ข

 

 

public String toString() {
        return "Order{" +
                "memberId=" + memberId +
                ", itemName='" + itemName + '\'' +
                ", itemPrice=" + itemPrice +
                ", discountPrice=" + discountPrice +
                '}';
    }
toString์€ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

 

 

 

 

Q. ๋งŒ์•ฝ toString์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์ถœ๋ ฅ์ด ๋ ๊นŒ?

 

Order order = new Order(1L, "Laptop", 1000, 100);
System.out.println(order);โ€‹

 

A. ์˜ˆ์ œ๋กœ chat-GPT๊ฐ€ ๋งŒ๋“ค์–ด์คฌ๋‹ค. ์ถœ๋ ฅ๊ฒฐ๊ณผ๋Š” [ Order@5e2de80c ] ์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.
์ฆ‰, toString์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด memberId,itemname,itemprice,discountprice๊ฐ€ ์ญˆ์šฑ- ์ถœ๋ ฅ๋˜์–ด ๊ฒฐ๊ณผ๊ฐ’์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

โ–บ OrderServiceImpl

: ์ฃผ๋ฌธ ๊ณ ๊ฐ์„ ํ™•์ธํ•˜์—ฌ ๋“ฑ๊ธ‰์— ๋งž๋Š” ํ• ์ธ์ •์ฑ…์„ ์ ์šฉ ํ•œ๋‹ค.

 

    private final MemberRepository memberRepository = new MemoryMemberRepository();
    private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
์ฃผ๋ฌธ ๊ณ ๊ฐ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๊ณ , ๊ทธ์— ๋งž๋Š” ํ• ์ธ ์ •์ฑ…์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์„ ์–ธํ–ˆ๋‹ค. ๊ตฌํ˜„์ฒด๋ฅผ ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๋กœ ๋ฐ”๊พธ๋Š” ๊ฑธ ์™ธ๋ถ€์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋„๋ก final๋กœ ์ •์˜ํ–ˆ๋‹ค.

 

 

โ€ขโ€ขโ€ข ์ด์–ด์„œ ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ถ€๋ถ„ โ€ขโ€ขโ€ข

 

 

 @Override
     public Order createOrder(Long memberId, String itemName, int itemPrice) {
         Member member = memberRepository.findById(memberId);
         int discountPrice = discountPolicy.discount(member, itemPrice);
         return new Order(memberId, itemName, itemPrice, discountPrice);
}
createOrder๋ผ๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋ฐ˜ํ™˜ํƒ€์ž…์€ Order๊ฐ€ ๋œ๋‹ค. ์ด๊ฑธ ์ž˜ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ OrderServiceTest๋ฅผ ๋ณด๋ฉด Order order = orderService.createOrder(memberId, "itemA", 10000);์ด๋ž€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค.

์ธ์ž๊ฐ€ createOrder๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋งž์ถฐ ๋“ค์–ด์˜ค๊ณ  memberId๋Š” memberRepository๋กœ ๋“ค์–ด๊ฐ€ ํšŒ์› ์ •๋ณด๋ฅผ ์ฐพ๋Š”๋‹ค.(ํšŒ์›์ •๋ณด ์ฐพ๋Š” ๊ฒƒ์„ ํ†ตํ•ด ํšŒ์› ๋“ฑ๊ธ‰, ํšŒ์› ์ด๋ฆ„ ๋“ฑ์„ ์•Œ์•˜์„ ๊ฒƒ์ด๋‹ค.) ๊ทธ๋ฆฌ๊ณ  ์–ป์–ด๋‚ธ ํšŒ์› ์ •๋ณด(member)์™€ ์ƒํ’ˆ ๊ฐ€๊ฒฉ์„ ๊ฐ€์ง€๊ณ  discountPolicy์— ์žˆ๋Š” discount ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌํ•˜๋ฉด ํšŒ์› ๋“ฑ๊ธ‰์ด VIP์ธ ๊ฒฝ์šฐ 1000์›์„ ํ• ์ธํ•˜๋ผ๋Š” ์ฝ”๋“œ์— ๋งž์ถฐ discountFixAmount๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ 1000์›์ด๋ž€ ๊ฐ’์„ ํ• ์ธํ•œ๋‹ค๋Š” ์ •๋ณด๊ฐ€ discountPrice์— ์ €์žฅ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์„œ Order(์ฃผ๋ฌธ์„ ๋ฐ›์•„ ์ตœ์ข… ๊ณ„์‚ฐํ•˜๋Š” ํด๋ž˜์Šค)์—์„œ ์š”๊ตฌํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋งž๋Š” ์ •๋ณด๋ฅผ ๋ชจ๋‘ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋‹ค์‹œ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋กœ ๊ฐ€๊ฒ ๋‹ค. Assertions.assertThat(order.getDiscountPrice( )).isEqualTo(1000);์ด ์žˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” getDiscountPrice๊ฐ€ 1000์›์ด๋ž‘ ๋™์ผํ•œ์ง€์— ๋Œ€ํ•ด ๋ฌป๋Š” ์ฝ”๋“œ์ธ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ์•„๊นŒ ์œ„์— ์žˆ๋˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ Order์— ์žˆ๋Š” ๊ฐ์ฒด ์ •๋ณด๋“ค์„ order์— ๋„ฃ๊ณ  Order ํด๋ž˜์Šค์— ์žˆ๋Š” getDiscountPrice ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ’ private์œผ๋กœ ์„ ์–ธ๋œ ํ• ์ธ ๊ฐ’์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.  ๊ทธ๋ ‡๊ฒŒ 1000์›์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด ๋œ ๊ฒƒ์ด๋‹ค.

 

 

[ โ–ถ๏ธŽ ]

 

 

[Spring] ๊น€์˜ํ•œ ๊ธฐ๋ณธํŽธ_ ์„น์…˜ 4. ๊ฐ์ฒด์ง€ํ–ฅ์›๋ฆฌ์ ์šฉ

์„น์…˜ 3. ์˜ˆ์ œ๋งŒ๋“ค๊ธฐ์—์„œ ์ž ๊น ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ๊ตฌํ˜„์ฒด์˜ ์˜์กด์„ฑ์„ ์™„์ „ํžˆ ๋ฐฐ์ œํ•œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ๊ตฌํ˜„์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ํ•˜๋‚˜ํ•˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„๊ฐ€ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ• 

post-this.tistory.com

 

 

 

 

ํ˜ผ์ž ์ฒœ์ฒœํžˆ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์ ํ˜€์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๊ฐ์•ˆํ•˜๊ณ  ๋ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ€ ๋ชจ๋‘๋“ค ํ™”์ดํŒ…ํ•˜์„ธ์š” ๐Ÿ€

+ Recent posts