Tech Stack/Java & Spring8 [Java] optional์ orElse์ orElseGet ์ฐจ์ด - orElse๋ Null์ด๋ ๋ง๋ ํญ์ ์ฌ์ฉ- orElseGet์ null์ผ ๋๋ง ์ฌ์ฉ public interface MemberRepository extends JpaRepository { Optional findByKakaoId(String kakaoId);} 2025. 9. 4. [Spring] [์นด์นด์ค ๋ก๊ทธ์ธ] RestTemplate vs WebClient Spring์์ ์ธ๋ถ API์ ํต์ ํ ๋๋ RestTemplate ๋๋ WebClient๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค.์นด์นด์ค ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ฉด์ ์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ๋ RestTemplate์ ์ฌ์ฉํ์ง๋ง, ๊ธฐ์กด์ WebClient๋ฅผ ์ฌ์ฉํด ์๊ณ ์ฐจ์ด๊ฐ ๊ถ๊ธํด ์ ๋ฆฌํด ๋ดค๋ค. RestTemplate vs WebClient ์ฐจ์ด๊ตฌ๋ถRestTemplateWebClient๋ฐฉ์๋๊ธฐ(๋ธ๋กํน)– ํธ์ถ ์ค๋ ๋๊ฐ ์๋ต๊น์ง ๋๊ธฐ๋น๋๊ธฐ/๋ ผ๋ธ๋กํน– ๋ณด๋ด๋๊ณ ์๋ต ์ค๋ฉด ์ฒ๋ฆฌ(Mono/Flux)์ ์ก/ํ์ฑHttpMessageConverter ๋ฑ๋ก์์ฒญ ์์ ์ contentType/ํค๋ ๋ช ์, BodyInserters ๋ฑ์ผ๋ก ๋ช ํํ์ฅ์ฑํ์์์/์ฐ๊ฒฐ ํ ์๋ ์ค์ Reactor Netty๋ก ๋คํธ์ํฌ ์ต์ ์ ์ด ์ฌ์ ์นด์นด์ค OAuth์ ์ ์ฉํ ๋ ํ์ธํ ์ฌํญ-.. 2025. 9. 3. [Spring] ์ค์ฒฉ ํด๋์ค์ DTO ์ค๊ณ KakaoDTO.OAuthToken oAuthToken = kakaoUtil.requestToken(accessCode); KakaoDTO.OAuthToken- KakaoDTO ํด๋์ค ์์ ์๋ ๋ด๋ถ ํด๋์ค(Static Inner Class) ๋๋ ์ค์ฒฉ ํด๋์ค OAuthToken์ ์๋ฏธํ๋ค.- KakaoDTO ๋ผ๋ DTO ๋ฌถ์ ์์์ "์นด์นด์ค์์ ๋ฐ๊ธ๋ฐ์ ํ ํฐ ์ ๋ณด๋ฅผ ๋ด๋ ๊ฐ์ฒด" ๋ฅผ ๋งํ๋ค. // ์ฝ๋ ์์public class KakaoDTO { @Getter public static class OAuthToken{ @JsonProperty("token_type") private String tokenType; @JsonProperty("access_to.. 2025. 9. 3. [์ปฌ๋ ์ ํ๋ ์์ํฌ] Set 1. Set์ด๋?์ค๋ณต์ ํ์ฉํ์ง ์๊ณ , ์์๋ฅผ ๋ณด์ฅํ์ง ์๋ ์๋ฃ๊ตฌ์กฐ์๋ฐ์์๋ Set ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ค์ํ ๊ตฌํ์ฒด ์ ๊ณต2. ์๋ฐ๊ฐ ์ ๊ณตํ๋ ๋ํ์ ์ธ Set ๊ตฌํ์ฒด๋๋ณด๊ธฐโ๏ธ HashSet ์ค๋ช ํน์ง์ค๋ช ๊ตฌํ๋ด๋ถ์ ์ผ๋ก ํด์ ํ ์ด๋ธ์ ์ฌ์ฉ์์๋ณด์ฅํ์ง ์์(์ ๋ ฅ ์์ X)์ฑ๋ฅํ๊ท ์๊ฐ ๋ณต์ก๋ O(1)์ฉ๋์ค๋ณต ์ ๊ฑฐ๊ฐ ์ค์ํ๊ณ ์์๊ฐ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ ๋๋ณด๊ธฐโ๏ธ LinkedHashSet ์ค๋ช ํน์ง์ค๋ช ๊ตฌํHashSet + ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๊ตฌ์กฐ์์์ ๋ ฅ ์์๋ฅผ ์ ์ง์ฑ๋ฅHashSet๋ณด๋ค๋ ์ฝ๊ฐ ๋๋ฆฌ์ง๋ง ์ฌ์ ํ ๋น ๋ฆ์ฉ๋์ ๋ ฅ ์์๋ฅผ ์ ์งํ๋ฉด์ ์ค๋ณต ์ ๊ฑฐ๊ฐ ํ์ํ ๋ ์ฌ์ฉ๋๋ณด๊ธฐโ๏ธ TreeSet ์ค๋ช ํน์ง์ค๋ช ๊ตฌํ๋ด๋ถ์ ์ผ๋ก ๋ ๋-๋ธ๋ ํธ๋ฆฌ(์ด์ง ํ์ ํธ๋ฆฌ์ ์ผ์ข ) ์ฌ์ฉ์์์๋ ์ ๋ ฌ๋จ (๊ธฐ๋ณธ์ ์ค๋ฆ์ฐจ์, Comparator๋ก ์ปค์คํ ๊ฐ.. 2025. 4. 10. [์ปฌ๋ ์ ํ๋ ์์ํฌ] HashSet 1. Set์ด๋?โ๏ธ ์ค๋ณต์ ํ์ฉํ์ง ์๊ณ , ์์๋ฅผ ๋ณด์ฅํ์ง ์๋ ์๋ฃ๊ตฌ์กฐโ๏ธ ๋ํ์ ์ธ ๊ตฌํ์ฒด: HashSet, LinkedHashSet, TreeSet2. Set์ ๊ธฐ๋ณธ ๋์โ๏ธ add(value) : ์ค๋ณต์ด๋ฉด ์ ์ฅํ์ง ์์โ๏ธ contains(value) : ํฌํจ ์ฌ๋ถ ํ์ธโ๏ธ remove(value) : ๋ฐ์ดํฐ ์ญ์ โน๏ธ ํ์ง๋ง ์ผ๋ฐ์ ์ธ Set ๊ตฌํ์ฒด๋ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผ์ด ๋น๊ต → ์๊ฐ ๋ณต์ก๋ O(n)3. HashSet์ด๋?โ๏ธ ๋ด๋ถ์ ์ผ๋ก ํด์ ํจ์๋ฅผ ์ด์ฉํ ๋ฐฐ์ด ๊ธฐ๋ฐ์ ๊ตฌ์กฐโ๏ธ hashCode()์ equals()๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ณต ์ฌ๋ถ๋ฅผ ํ๋จโ๏ธ ํ์ ์๋ ๋น ๋ฆ (ํ๊ท ์๊ฐ ๋ณต์ก๋ O(1))4. ์ง์ ๊ตฌํํ๋ Set - MyHashSetV1 (์ ์ํ ์ ์ฉ)๋๋ณด๊ธฐpublic class MyHashS.. 2025. 4. 9. [์ปฌ๋ ์ ํ๋ ์์ํฌ] ํด์(Hash) ์๋ฐ ์๋ฃ๊ตฌ์กฐ- ํด์(Hash) : ๋น ๋ฅธ ๋ฐ์ดํฐ ์กฐํ์ ์ค๋ณต ๋ฐฉ์ง ๊ฐ๋ฅ! 1. ๋ฆฌ์คํธ vs ์ (Set)๊ตฌ์กฐ์์์ค๋ณตํน์งListOO์ธ๋ฑ์ค ๊ธฐ๋ฐ, ์์ ์ ์งSetXX์ค๋ณต ์ ๊ฑฐ, ๋น ๋ฅธ ํ์ ๋๋ณด๊ธฐList cart = List.of("apple", "apple", "banana");Set ids = Set.of("user1", "user2"); // "user1" ์ค๋ณต ์ถ๊ฐ ๋ถ๊ฐ2. Set ๊ตฌํ ์ฝ๋ ์์โ๏ธ O(n)์ ์ ํ ํ์ -> ์ค๋ณต์ ์ ๋ง์ง๋ง ๋๋ฆฌ๋ค." data-text-less="๋ซ๊ธฐ">๋๋ณด๊ธฐ// ๋ด๋ถ ๋ฐฐ์ด: ๊ณ ์ ํฌ๊ธฐ 10private int[] elementData = new int[10];private int size = 0;// ์ค๋ณต ์์ด ๊ฐ ์ถ๊ฐpublic boolean add(int val.. 2025. 4. 6. ์ด์ 1 2 ๋ค์