๐ถ๐พ

[spring] ์ฑ๊ธํค ์ปจํ ์ด๋
์ธํ๋ฐ ์คํ๋ง ํต์ฌ์๋ฆฌ ๊ธฐ๋ณธํธ์์ ๋์จ ์ฑ๊ธํค ์ปจํ ์ด๋์ ๋ํด ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค. ํ๊ต์์ ๊ณ ๊ธ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์๊ฐํ๋ฉด์ ๋ค์ด๋ดค๋ ๋์์ธ ํจํด ์ค ์ฑ๊ธํค ํจํด์ ๊ดํ ๋ด์ฉ์ด์๋ค. ? ์น ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๊ธํค ํจํด์ด ํ์ํ ์ด์ ๋ ๐ ์ฌ๋ฌ ๊ณ ๊ฐ์ด ๋์์ ์์ฒญ ๐ ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ ์ฌ๋ฌ ๊ณ ๊ฐ์ด ๋์์ ์์ฒญํ๋ ์ํฉ์์ ์์ฒญ์ ๋ฐ๋ผ ๊ณ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฒ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์ฌํด์ง๋ค. ๊ทธ๋์ ํด๋น ๊ฐ์ฒด๊ฐ ๋ฑ 1๊ฐ๋ง ์์ฑ๋๊ณ , ๊ทธ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ์ค๊ณํด์ผํ๋ค. ํ์ง๋ง ์ฑ๊ธํค ํจํด์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ํจํด์ ๊ตฌํํ๋ ์ฝ๋ ์์ฒด๊ฐ ๋ง์ด๋ค์ด๊ฐ๊ฒ ๋๊ณ , ์์กด๊ด๊ณ์ ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌ์ฒด ํด๋์ค์ ์์กด(DIP ์๋ฐ) ํ๊ฒ๋๋ ๋ฑ์ ๋ฌธ์ ๊ฐ ์๋ค. ์คํ๋ง ์ปจํ ์ด๋๋ ์ด๋ฌํ ์ฑ๊ธํค ํจํด์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๋ฉด์, ๊ฐ์ฒด๊ฐ..

[Java] Sort ์ฌ์ฉ
์ฝํ ๋ฌธ์ ๋ฅผ ํ๋ค๋ณด๋ ๋ฐฐ์ด์ ์ ๋ ฌํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์ ๋ฆฌ ! Arrays.sort(๋ฐฐ์ด); โ๏ธ ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ โ๏ธ ๋ฌธ์์ด์ ๊ฒฝ์ฐ ์์คํค์ฝ๋์์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ, ํ๊ธ๋ ๊ฐ๋๋ค ์ ๐ int, long, short, double ๋ฑ ๊ธฐ๋ณธํ์ ์ ๋ํ ์ ๋ ฌ์ง์, Reference ํ์ ์ ๋ฐฐ์ด์ ์ ๋ ฌ๋ ์ง์ ๐ ์ซ์ > ๋๋ฌธ์ > ์๋ฌธ์ > ํ๊ธ ์ ˜ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ Arrays.sort(๋ฐฐ์ด, Collections.reversOrder()); โ๏ธ ๋๋ฒ์งธ ์ธ์๋ก Comparator์ ๊ตฌํ์ฒด๋ฅผ ์ฃผ๋ฉด ์ํ๋ ๋ฐฉ์๋๋ก ์ ๋ ฌ ๊ฐ๋ฅ (reversOrder() ๋ง๊ณ ๋) Compareraor โ๏ธ ์ ๋ ฌ์ ํ๊ธฐ ์ํ ์ฌ๋ฌ๊ฐ์ง ๋ช ์ธ๋ฅผ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค โ๏ธ Reference ํ์ ์ ๋ฐฐ์ด์์ ์ ..

[spring] loc, DI, ์ปจํ ์ด๋
์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ์ ์๊ฐํ๋ฉด์ ๋์จ ๊ฐ๋ ์ด๋ค. Appconfig๋ฅผ ๋ง๋ค์ด์ ์ฐ๊ฒฐํด์ฃผ๊ธฐ ์ ์๋ OrderServiceImpl ๊ฐ์ ํด๋ผ์ด์ธํธ ์ฝ๋์ ์ํฅ์ ์ฃผ๋ ์ฝ๋๋ฅผ ์งฐ์๋ค. public class OrderServiceImpl implements OrderService { private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final MemberRepository memberRepository = new MemoryMemberRepository(); ... } ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์ง๊ฒ๋๋ฉด ํด๋ผ์ด์ธํธ ์ฝ๋(OrderServiceImpl)์์ DiscountPolicy์ ๊ฐ์ ์ธํฐํ์ด์ค ์ฝ๋ ๋ฟ๋ง ์๋๋ผ ๊ตฌ..

[Java] length / length() / size() ์ฐจ์ด
์์ง ์๋ฐ ์ธ์ด์ ์ต์์น ์์์์ธ์ง ์ฝํ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ length .. size ํผ๋ํด์ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ ์ ๋ฆฌํด๋๋ ค๊ณ ํ๋ค ! 1. length โ๏ธ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ์๊ณ ์ ํ ๋ โ๏ธ int[], String[] .. 2. length() โ๏ธ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์๊ณ ์ ํ ๋ โ๏ธ String, StringBuilder .. 3. size() โ๏ธ ์ปฌ๋ ์ ํ๋ ์์ํฌ ํ์ ์ ๊ธธ์ด๋ฅผ ์๊ณ ์ ํ ๋ โ๏ธ ArrayList, Set ..

[spring] Test ์ฝ๋ - assertThat
์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ์ ๋ค์ผ๋ฉด์ ๋์จ assertThat ! Test ์ฝ๋๋ฅผ ์์ฑํ ๋, system.out.print()์ผ๋ก ์ถ๋ ฅํ์ง ์๊ณ ์์ค์ฝ๋์ ํน์ ๋ชจ๋์ด ์ ํํ ๋์ํ๋์ง ๊ฒ์ฆํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. AssertJ๋ ์๋ฐ Juit ํ ์คํธ์ฝ๋์ ์ฌ์ฉ๋์ด, ํ ์คํธ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ํธ์์ฑ์ ๋์ฌ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. AssertJ์์ ๋ชจ๋ ํ ์คํธ์ฝ๋๋ assertThat() ์ผ๋ก ์์ํ๋ค. ๊ฐ์์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ์๋ค. import org.assertj.core.api.Assertions; Assertions.assertThat(ํ ์คํธ ํ๊ฒ).isEqualTo(๊ธฐ๋๋๋ ๊ฐ); ์ข ๋ ๊ฐ๋ ์ฑ(?)์ ๋์ด๋ ค๋ฉด import static org.assertj.core.api.Assertions.*; ..

[PGS-Java] ๊ธฐ๋ฅ๊ฐ๋ฐ(lv.2) - Math.ceil(), ArrayList โก๏ธ Array
ํ๋ก๊ทธ๋๋จธ์ค "๊ธฐ๋ฅ๊ฐ๋ฐ(lv.2)" ๋ฌธ์ ๋ฅผ ํ์๋๋ฐ, ๋๋ฌด ์ฝ๋๋ฅผ ๊ธธ๊ฒ ํจ์จ์ ์ผ๋ก ์ง์ง ๋ชปํ ๊ฒ ๊ฐ์ ๋ค๋ฅธ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๊ณ ๊ฐ์ ํด๋ณด๊ณ ์ ํ๋ค ! ์ผ๋จ ๋ด ํ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค. import java.util.*; class Solution { public int[] solution(int[] progresses, int[] speeds) { // ์์ ์ด ๋๋๊ธฐ๊น์ง ๋จ์ ์ผ ์ Queue q = new LinkedList(); for (int i = 0; i < speeds.length; i++) { int lastProgresses = 100-progresses[i]; if (lastProgresses % speeds[i] == 0) { q.add(lastProgresses/speeds[i]); } el..

[Java] Stack, toCharArray ์ฌ์ฉ
๋ฐฑ์ค 9093์ ํธ๋ ๊ณผ์ ์์ Java์์ Stack์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ตํ๊ณ , ์์ BufferedReader์ BufferedWriter์ ์ฌ์ฉํด๋ณด์๋ค. ๋ํ, toCharArray()๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ณด์๋ค. โ๏ธ String.toCharArray() ๋ฌธ์์ด์ charํ ๋ฐฐ์ด๋ก ๋ฐ๊ฟ์ค๋ค ๋ฌธ์ ์์๋ ์๋์ ๊ฐ์ด BufferedReader๋ก ๋ฐ์์ค ๋ฌธ์์ด์ charํ ๋ฐฐ์ด๋ก ๋ฐ๊ฟ์ฃผ์๋ค. String str = br.readLine() + "\n"; char[] arr = str.toCharArray(); โ๏ธ Stack ์คํ์ ํ์ชฝ ๋์์๋ง ์๋ฃ๋ฅผ ๋ฃ๊ณ ๋บ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค(LIFO) ์ง์ ๊ตฌํํ ์ ์์ง๋ง ์๋ฐ Stack ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์๋ค. import java.util...

[Java] ์ฝ๋ฉํ ์คํธ ์ ์ถ๋ ฅ
๋ณดํต java์์ ์ ์ถ๋ ฅ์ ์ํด Scanner๊ณผ System.out ์ ์ฌ์ฉํ๋๋ฐ, ์๋ ์ธก๋ฉด์์ BufferedReader์ StringBuilder๋ BufferedWriter๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํด์ ๋ฐฉ๋ฒ์ ์ตํ๋๋ ค๊ณ ํ๋ค ! (์ ๋ ฅ๋ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ก ์ ๋ฌ๋์ง ์๊ณ ๋ฒํผ๋ฅผ ๊ฑฐ์ ธ ์ ๋ฌ๋๋ฏ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํจ์จ์ฑ์ ๋์) โ๏ธ BufferedReader๋ Enter๋ง ๊ฒฝ๊ณ๋ก ์ธ์, ๋ฐ์ ๋ฐ์ดํฐ String์ผ๋ก ๊ณ ์ โก๏ธ ์ ๋ ฅ๋ฐ์ ๋ฐ์ดํฐ ๊ฐ๊ณตํด์ผํจ import java.io.*; import java.util.*; public static void main(String args[]) throws IOException { } // ์์ธ์ฒ๋ฆฌ ํ์ BufferedReader br = new BufferedRe..

[django] ์ด๊ธฐ project ์์ฑ ๋ฐ ์คํ
1. ๊ฐ์ํ๊ฒฝ ๋ง๋ค๊ธฐ python3 -m venv venv 2. ๊ฐ์ํ๊ฒฝ ์คํ source venv/bin/activate +) dectivate : ๊ฐ์ํ๊ฒฝ ๋๊ธฐ 3. pip์ค์น pip install django โ๏ธ django rest framework ์ฌ์ฉํ ๊ฑฐ๋ผ๋ฏ pip install djangorestframework โ๏ธ pip freeze > requirements.txt ํตํด์ ์ค์นํ๊ฑฐ requirements.txt ํด๋๋ก ๋ค๊ฐ ์ดํ ํ์ ํ๋ ์ฌ๋ pip install -r requirements.txt ์ด๋ ๊ฒ ์ค์นํ๋ฉด ๊ฐ์ ๋ฒ์ ์ผ๋ก ์ค์น ๊ฐ๋ฅ 4. ์ฅ๊ณ ํ๋ก์ ํธ ์์ฑ django-admin startproject config . 5. ์๋ฒ ๊ฐ๋ python manage.py runser..