-
Notifications
You must be signed in to change notification settings - Fork 3
[BE] Java 17 ์ฌ์ฉ
Java 17์ ์ ํํด์ผ ํ๋ ๊ทผ๊ฑฐ๋ ๋ค์ํ ๊ธฐ์ ์ , ์์ฐ์ ์ธ ์ด์ ๊ฐ ์์ต๋๋ค. ์ฐ์ 17์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Type | Features | Content |
---|---|---|
ํจํค์ง | ํฅ์๋ ์์ฌ ๋์ ์์ฑ๊ธฐ | ์์ฌ ๋์ ์์ฑ๊ธฐ(Pseudo-Random Number Generator)๋ฅผ ์ํ ์๋ก์ด ์ธํฐํ์ด์ค ํ์ ๊ณผ ๊ตฌํ์ ์ ๊ณต |
ํจํค์ง | ์ ๊ท Mac OS ๋ ๋๋ง ํ์ดํ๋ผ์ธ | Apple ๋ฉํ API๋ฅผ ์ฌ์ฉํ๋ Mac OS์ฉ Java ํ์ดํ๋ผ์ธ์ ๊ตฌํ |
๊ธฐ๋ฅ | ํ ์คํธ ๋ธ๋ก ๊ธฐ๋ฅ ์ถ๊ฐ | ๊ธฐ์กด String์ ์ฌ๋ฌ ์ค ์์ฑํ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ธฐ๋ฅ, ๊ฐ๋ ์ฑ ์๋ ์ฝ๋ ์ง์ |
๊ธฐ๋ฅ | Switch ํํ์ ๊ธฐ๋ฅ ํฅ์ | Switch ๋ฌธ ์ด์ฉ ์ ๊ฐ์ ๋ฐํํ์ฌ ์ด์ฉ ๊ฐ๋ฅ ํ๋ฉฐ, ๋๋ค ์คํ์ผ ๊ตฌ๋ฌธ์ ์ฌ์ฉ ๊ฐ๋ฅ |
๊ธฐ๋ฅ | Record Data class ์ถ๊ฐ | immutable ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์๋ก์ด ์ ํ์ ํด๋์ค๋ก ๊ธฐ์กด toString, equals, hashCode Method์ ๋ํ ๊ตฌํ์ ์๋ ์ ๊ณต |
๊ธฐ๋ฅ | Instanceof ๋งค์นญ | ์ด์ ๋ฒ์ ๊ฒฝ์ฐ Instanceof ๋ด๋ถ์์ ๊ฐ์ฒด๋ฅผ ์บ์คํ ํ๋ ๊ณผ์ ์ด ํ์ํ์์ผ๋, ์บ์คํ ๊ณผ์ ์ ๋ด๋ถ์์ ์ง์ํ ์ ์๋๋ก ๋ณ๊ฒฝ |
๊ธฐ๋ฅ | NumberFormat ํด๋์ค ๊ธฐ๋ฅ ํฅ์ | ๊ธฐ์กด ์ซ์ Format ํด๋์ค(NumberFormat) ๋ด Method ์ถ๊ฐ(getCompactNumberInstance) |
๊ธฐ๋ฅ | DateTimeFormatter ํด๋์ค ๊ธฐ๋ฅ ํฅ์ | ๊ธฐ์กด ๋ ์ง Format ํด๋์ค(DateTimeFormatter) ๋ด ํจํด Method ํ์ ์ถ๊ฐ("B") |
๊ธฐ๋ฅ | ๋ด์ธ(Sealed) ํด๋์ค | ๋ฌด๋ถ๋ณํ ์์์ ๋ง๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ๋ฑ์ฅํ ๊ธฐ๋ฅ์ผ๋ก ์ง์ ํ ํด๋์ค ์ธ ์์์ ํ์ฉํ์ง ์์ผ๋ฉฐ, ์ง์ ํ ํด๋์ค ์ธ ์์ ๋ถ๊ฐ๋ฅ |
๊ธฐ๋ฅ | Stream.toList() ๊ธฐ๋ฅ ์ถ๊ฐ | ๊ธฐ์กด, Stream์ List๋ก ๋ณํ ์ Collectors์์ ๊ธฐ๋ฅ์ ์ฐพ์ ์ฌ์ฉํ๋ค๋ฉด Java17 ๋ถํฐ๋ Collectorsํธ์ถ ์์ด toList()๋ง์ผ๋ก ๋ณํ์ด ๊ฐ๋ฅ |
์ด์ ์ ํฌ๊ฐ Java 17์ ์ฌ์ฉํ๋ ์ด์ ์ ๋ํด์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
JDK 15๋ถํฐ ์ง์ํ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๋๋ค. "(ํฐ ๋ฐ์ดํ) 3๊ฐ๋ฅผ ์๋ค๋ก ๋ถ์ฌ์ฃผ๊ฒ ๋๋ค๋ฉด ์ผ๋ฐ ๋ฌธ์์ด๋ณด๋ค ํจ์ฌ ๊ฐ๋ ์ฑ์ด ์ข์ ํํ๋ก ์์ฑํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด๋ก ์ธํด jpql ๋๋ native query, json ๋ฑ์ ๋ฌธ์์ด์ ํจ์ฌ ๋ณด๊ธฐ ์ข๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
@Override
@Query("""
SELECT pf FROM PetFood pf
JOIN FETCH pf.brand b
JOIN FETCH pf.primaryIngredients pi
""")
List<PetFood> findPetFoods();
Record Data Class๋ JDK 14 ๋ฒ์ ๋ถํฐ ๊ณต๊ฐ๋ Immutable(๋ถ๋ณ) ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์๋ก์ด ์ ํ์ ํด๋์ค์ ๋๋ค. Record์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- getter/setter, toString, equals&hashcode ๋ฉ์๋๊ฐ ์์ฒด์ ์ผ๋ก ๊ตฌํ๋์ด ์๋ค.
- ๋ถ๋ณ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฐ์ ์์ฑ์๋ก ์์ฑ๋๋ค.
- Data Transfer Object์ ๊ฐ์ ์ฉ๋๋ก ํ์ฉํ๊ธฐ ๋งค์ฐ ํธ๋ฆฌํ๋ค.
Record Data Class๋ฅผ ์ฌ์ฉํ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public record CreateReviewRequest(
@NotNull(message = "Null์ด ์ฌ ์ ์์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ๊ฐ์ธ์ง ํ์ธํด์ฃผ์ธ์.")
Long petFoodId,
@Max(5)
@Min(1)
Integer rating,
@Size(max = 255, message = "255์ ๋ฏธ๋ง์ ๋ฉ์์ง๋ฅผ ์์ฑํด์ฃผ์ธ์.")
String comment,
@NotBlank(message = "Null ๋๋ ๊ณต๋ฐฑ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ๊ฐ์ธ์ง ํ์ธํด์ฃผ์ธ์.")
String tastePreference,
@NotBlank(message = "Null ๋๋ ๊ณต๋ฐฑ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ๊ฐ์ธ์ง ํ์ธํด์ฃผ์ธ์.")
String stoolCondition,
List<String> adverseReactions
) {
public Review toEntity(Pet pet, PetFood petFood) {
return Review.builder()
.pet(pet)
.petFood(petFood)
.rating(rating())
.comment(comment)
.tastePreference(TastePreference.from(tastePreference()))
.stoolCondition(StoolCondition.from(stoolCondition()))
.build();
}
}
Stream.toList() ๊ธฐ๋ฅ์ JDK 16๋ถํฐ ๊ณต๊ฐ๋์์ต๋๋ค. ๊ธฐ์กด์ collect(Collectors.toList()) ๋ฌธ๋ฒ์ toList() ๋ฉ์๋ ํ๋๋ก ์ค์ฌ์ ๋ ๊ฐ๊ฒฐํด์ง๋๋ค. ์ฌ์ฉ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public record BreedsResponses(List<BreedsResponse> breeds) {
public static BreedsResponses from(List<Breeds> breeds) {
return new BreedsResponses(
breeds.stream()
.map(breed -> new BreedsResponse(breed.getId(), breed.getName()))
.toList()
);
}
public record BreedsResponse(long id, String name) {
}
}
ํ๊ฐ์ง ๊ฑธ๋ฆฌ๋์ ์ collect(Collectors.toList())์ toList()์ ๋ฐํ ๊ฐ ๊ตฌํ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค๋ ๊ฒ์ธ๋ฐ, ์ ์๋ ์์ ์ด ๊ฐ๋ฅํ๋ฉฐ, ํ์๋ ์์ ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
ํ์ง๋ง ์ ํฌ ํ์์๋ persentation ๋ ์ด์ด๊ฐ ๋ฐํ๋ ์ปฌ๋ ์ ์ ๋ํด์ ๊ฐ์ ์์ ํ์ง ์๋๋ก ๋ ผ์๊ฐ ์ด์ด์ก๊ธฐ์, ๊ธฐ์กด์ collect(Collectors.toUnmodifiableList())๋ฅผ ๋์ฒดํ ์ ์์ต๋๋ค.
- ์ง์ฌ์ ๊ณ ๋ฏผ ์๋น์ค ์๊ฐ
- ์ฌ์ฉ์ ์คํ ๋ฆฌ ๋ฐ ๊ธฐ๋ฅ๋ช ์ธ
- ํ ๊ทธ๋ผ์ด๋ ๋ฃฐ
- Git Branch ์ ๋ต ๋ฐ Git Commit ์ปจ๋ฒค์
- ์ง์ฌ์ ๊ณ ๋ฏผ ๋ฐฐํฌ ์๋ํ ํ์ดํ๋ผ์ธ
- ์๋น์ค ํ๊ฒ ํ๊ฒฝ ๋ฐ ๋ธ๋ผ์ฐ์ ์ง์ ๋ฒ์
- ์ฝ๋ ์ปจ๋ฒค์
- TypeScript ์ปจ๋ฒค์
- ๋น๋ ๋ฐ ๋ฐฐํฌ ๊ฐ๋ฐ/์ด์ ํ๊ฒฝ ๊ตฌ๋ถ
- ์คํ์ผ๋ง ๋ฐ ์ํ๊ด๋ฆฌ ๋ฐฉ๋ฒ ์ ํ ๋ฐ ์ด์
- ์น ์ ๊ทผ์ฑ ๊ด๋ฆฌ ๋์ ์ ์ ๋ฐ ๊ฐ์
- ํ ์คํธ ์ ๋ต ์๋ฆฝ ๋ฐ ํ ์คํธ ์๋ํ
- ํ๋ก ํธ์๋ ์ธํ๋ผ ๊ตฌ์ฑ๋
- ๋ฐฑ์๋ ๊ธฐ์ ์คํ
- ๋ฐฑ์๋ ์ธํ๋ผ ๊ตฌ์ฑ๋
- ERD
- API ๋ฌธ์ํ ํด
- QueryDSL ๋์ ์ด์
- ์ฝ๋ ์ปจ๋ฒค์
- ์ง๊ณ ๋ฐฑ์๋๊ฐ ์ฌ์ฉํ๋ CI/CD ํด
- ์กฐํ ์ฟผ๋ฆฌ ๋ถ์
- ํฐ์บฃ ํ๋
- ๋ฌด์ค๋จ ๋ฐฐํฌ
- HikariCP ์ค์ ์ต์ ํ
- ์ง๊ณ ์ฌ์ฉ์๊ฐ 1000๋ง ๊ทธ ์ด์์ด๋ผ๋ฉด
- New infrastructure Design doc