Getter and Setter / Optional.ofNullable / Assertions / Extract Method μμ± / AfterEach / assertThrows
Table of contents
- ν΄λμ€ μΈμ€ν΄μ€ λ³μ μ λ ₯ λ° μΆλ ₯ λ©μλ ꡬννκΈ°
- Optional μ μ¬μ©νλ μ΄μ
- Test Case μμ±
- AfterEach
- Extract Method μμ±
- assertThrows
ν΄λμ€ μΈμ€ν΄μ€ λ³μ μ λ ₯ λ° μΆλ ₯ λ©μλ ꡬννκΈ°

μμ κ°μ Member ν΄λμ€κ° μμ λ, κ° μΈμ€ν΄μ€ λ³μμ λ°μ΄ν° κ°μ μ μ₯νκ³ λ°ννλ get κ³Ό set λ©μλλ₯Ό ꡬννλ λ°©λ²μ λ§€μ° κ°λ¨νλ€.
μλμ° κΈ°μ€ μΈν
리 μ μ΄ λ¨μΆν€ ctrl + shift + n μ μ
λ ₯νκ³ Action λΆλΆμμ getter and setter λ₯Ό κ²μνλ©΄ λλ€.


get, set λ©μλλ₯Ό μμ±ν λ³μλ₯Ό μ νν ν ok λ²νΌμ λλ₯΄λ©΄

μ΄μ κ°μ΄ μλμΌλ‘ μμ±λλ€!
Optional μ μ¬μ©νλ μ΄μ

λ¨Όμ , νμ κ΄λ¦¬λ₯Ό μν ν΄λμ€λ₯Ό κ΄λ¦¬νκΈ° μν λ©μλλ€μ΄ μλ μΈν°νμ΄μ€λ₯Ό μμ±νλ€.
findById() μ findByName() λ©μλλ Optional<Member> λ‘ λ°νμ΄ λκ²λ μμ±μ΄ λμ΄μλ€.
Optional<T> λ μ§λ€λ¦ ν΄λμ€λ‘ βT νμ
μ κ°μ²΄βλ₯Ό κ°μΈλ λνΌ ν΄λμ€μ΄λ€.
Optional νμ
μ κ°μ²΄μλ λͺ¨λ νμ
μ μ°Έμ‘°λ³μλ₯Ό λ΄μ μ μλ€.
μ΄λ κ² νλ©΄, μ΅μ’
μ°μ°μ κ²°κ³Όλ₯Ό Optional κ°μ²΄μ λ΄μμ λ°νμ νλλ°, μ΄μ²λΌ κ°μ²΄μ λ΄μμ λ°νμ νλ©΄ λ°νλ κ²°κ³Όκ° nullμΈμ§ λ§€λ² ifλ¬ΈμΌλ‘ 체ν¬νλ λμ
Optionalμ μ μλ λ©μλλ₯Ό ν΅ν΄μ κ°λ¨ν μ²λ¦¬ν μ μμ΄ μλ¬κ° λ°μνμ§ μλ κ°κ²°νκ³ μμ ν μ½λλ₯Ό μμ±ν μ μλ€.
μ¦, κ°μ μ μΌλ‘ Nullμ λ€λ£° μ μλ€.
ꡬνλΆλ₯Ό μ΄ν΄λ³΄μ.

λ°νν λ, κ·Έλ₯ return store.get(id); μλ€λ©΄ null κ°μ΄ λ°νλμμ λ μλ¬κ° λ°μν μ μλ€.
νμ§λ§, μ μ½λμ κ°μ΄ Optional<Member> λ‘ λ°νλλ κ²½μ°μλ μλ¬κ° λ°μνμ§ μλλ€.
Optional.ofNullable() λ©μλλ₯Ό νμ©ν΄μΌνλ€.
findById λ idλ₯Ό ν΅ν΄μ Member κ°μ²΄λ₯Ό κΊΌλ΄μ€λ λ©μλμ΄κ³ store μ κ²½μ° idκ° ν€κ°μΌλ‘ μ§μ λμ΄μμΌλ―λ‘
store.get(id) λ₯Ό ν΅ν΄μ ν΄λΉ idμ μνλ member κ°μ²΄λ₯Ό λΆλ¬μ€κ³ μ΄λ₯Ό Optional.ofNullableλ‘ κ°μΈμ£Όλ©΄ λλ€!

findByNameμ κ²½μ° μ½κ°μ 볡μ‘νλ€.
λ¨Όμ store.values()λ₯Ό ν΅ν΄ storeμ μ μ₯λ λͺ¨λ member κ°μ²΄λ₯Ό λΆλ¬μ¨λ€.
κ·Έ λ€μ, filter() λ©μλλ₯Ό μ°κΈ° μν΄μ .stream() μ λΆμ¬μ€λ€.
.filter(쑰건 λλ€μ) μ ν΄λΉ 쑰건μ λ§μ‘±νμ§ μλ κ²λ€μ κ±Έλ¬μ€λ€.
.filter(member -> member.getName().equals(name)) μ ν΅ν΄μ storeμ μ μ₯λ memberμ name λ€ μ€ μ
λ ₯ν nameκ³Ό κ°μ memberλ§ λ¨κ²λλ€.
.findAny() λ streamμ ν΅ν΄ κ±Έλ¬μ§ κ°μ μ무거λ λ°ννλλ°, μμ κ°μ κ²½μ° μ€λ³΅λ μ΄λ¦μ΄ μλ€κ³ κ°μ λμ΄ μμΌλ―λ‘, μ
λ ₯ν nameμ κ°μ§ memberκ° μλ€λ©΄ λ°νν κ²μ΄λ€.
Test Case μμ±
μλμ° μΈν 리 μ μ΄μ κ²½μ°
ν
μ€νΈ μΌμ΄μ€λ₯Ό μμ±νκ³ μΆμ classμ μ΄λ¦μ ν΄λ¦ν ν ctrl + shift + t λ₯Ό μ
λ ₯νλ©΄ μ½κ² test μμ€νμΌμ μμ±ν μ μλ€.

create New Test λ₯Ό ν΄λ¦νλ©΄ λλ€.

κ·Έλ¦¬κ³ ν μ€νΈλ₯Ό ν΄λ³Ό λ©μλλ₯Ό μ νν ν ok λ²νΌμ λλ₯΄λ©΄ μμ€νμΌμ΄ μμ±λλ€.
ν
μ€νΈ νμΌ μμ± μ Assertions λ₯Ό λ§μ΄ μ¬μ©νκ² λλ€.

Assertionsμ μ μ©ν λ©μλλ₯Ό μ¬μ©νλ €λ©΄ import μμΌμΌ νλλ°, junitμ΄ μλ assertj λ₯Ό importν΄μΌνλ€!

Member result = repository.findById(member.getId()).get();
μμ λ§μ§λ§μ get()μ΄ λΆλ μ΄μ λ, findByIdμ λ°νκ°μ΄ optionalλ‘ κ°μΈμ Έ μκΈ° λλ¬Έμ, get() λ©μλλ₯Ό ν΅ν΄ κ°μ²΄λ§ κΊΌλΌ μ μλ€.
Assertions.assertThat(κ°μ²΄1).isEqualTo(κ°μ²΄2);
μ ν΅ν΄μ κ°μ²΄ 1κ³Ό κ°μ²΄ 2 κ° κ°μμ§ νμΈν μ μλ€.
AfterEach
ν μ€νΈλ₯Ό νλ κ³Όμ μμ μ¬λ¬ λ©μλλ₯Ό νλ²μ ν μ€νΈ νλ€λ³΄λ©΄, λ°μ΄ν°κ° κ²Ήμ³μ λ€λ₯Έ λ©μλ ν μ€νΈμ μν₯μ μ€ μ μλ€. κ·Έλ¬λ―λ‘ ν μ€νΈ λ©μλκ° λλ λλ§λ€ λ©λͺ¨λ¦¬λ₯Ό λΉμμ£Όλ κ²μ΄ μ€μνλ€.
μ΄ μν μ ν μ μλ μλν
μ΄μ
μ΄ @AfterEachμ΄λ€.

clearStrore() λ©μλ μμλ κ°λ¨νκ² μ»¬λμ
λ΄ λ°μ΄ν°λ₯Ό λͺ¨λ μ§μμ£Όλ store.clear(); λ₯Ό ꡬννλ©΄ λλ€.
Extract Method μμ±

.ifPresent() λ₯Ό ν΅ν΄μ λ§μ½ μ μ₯νλ €λ memberμ nameκ°μ΄ μ΄λ―Έ μ‘΄μ¬νλ memberκ° repositoryμ μ΄λ―Έ μ‘΄μ¬νλ€λ©΄,
IllegalStateExceptionμ΄λΌλ μλ¬λ₯Ό μΌμΌν€κ³ βμ΄λ―Έ μ‘΄μ¬νλ νμμ
λλ€.β λΌλ μλ¬λ©μΈμ§λ₯Ό λμ°κ²λ ꡬννμλ€.
λν, μ μ½λμμ μ€λ³΅νμμ κ°μ μ΄ μλλλ‘ νλ λΆλΆμ λ©μλλ‘μ¨ λ°λ‘ μΆμΆνλ λ¨μΆν€κ° μλ€.

ν΄λΉ λΆλΆμ λλκ·Ένκ³ , μλμ° κΈ°μ€ ctrl + alt + shift + t λ₯Ό λμμ λλ₯΄λ©΄ μμ κ°μ μ°½μ΄ λμ€κ³
Extract Methodλ₯Ό ν΄λ¦νκ³ λ©μλ μ΄λ¦μ μ§μ ν΄μ£Όλ©΄ λλ€.

νΈνκ² λ©μλλ‘μ μΆμΆν΄λ΄μλ€.
assertThrows

μ΄μ μ, μ€λ³΅λ νμμ΄ μλ€λ©΄, IllegalStateException μλ¬λ₯Ό μΌμΌν€κ³ βμ΄λ―Έ μ‘΄μ¬νλ νμμ
λλ€.β λΌλ μλ¬λ©μΈμ§λ₯Ό λμ°κ²λ ꡬννμλ€.
assertThrowsλ₯Ό μ¬μ©νλ©΄ try-catch λ¬Έμ μν μ κ°κ²°νκ² ν μ μλ€.
λ¨Όμ IllegalStateException e = assertThrows(IllegalStateException .class, () -> memberService.join(member2)) λ₯Ό μ΄ν΄λ³΄μ.
member1κ³Ό member2μ μ΄λ¦μ λμΌνκ³ member1μ μ΄λ―Έ λ±λ‘μ΄ λμ΄μλ μν©μ΄λ€.
assertThrows(μλ¬,쑰건μ) μ 쑰건μμ΄ μ€νλμμ λ μλ¬κ° λ°μνλμ§ νμΈν΄μ€λ€.
μ¦, μμ κ²½μ°μλ ()-> memberService.join(member2) λλ€μμ΄ μ€νλμμλ
IllegalStateException μλ¬κ° λ°μνλμ§ νμΈν΄μ€λ€.
μλ¬λ eμ μ μ₯μ΄ λκ³ getMessage()λ₯Ό ν΅ν΄ μλ¬λ©μΈμ§λ₯Ό μΆμΆν μ μκ³
μ΄λ₯Ό ν΅ν΄μ μ€λ³΅λ νμμ΄ κ°μ μ μλν κ²½μ°, μλ¬κ° λ°μνλμ§ μνλμ§ νμΈμ ν μ μλ€.