์ ์ฒด ๊ธ (18) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ์ปดํฌ๋ํธ ์ค์บ ํด๋น ํฌ์คํ ์ ๊น์ํ๋์ ์ธํ๋ฐ ๊ฐ์(์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ)๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. @ComponentScan ์ปดํฌ๋ํธ ์ค์บ์ ์ฌ์ฉํ์ง ์๊ณ ์คํ๋ง ๋น์ ๋ฑ๋กํ ๋ ์๋์ ๊ฐ์ด @Bean(๋๋ XML์ )์ ํตํด์ ์ค์ ์ ๋ณด๋ฅผ ์ง์ ๋ฑ๋กํ ์คํ๋ง ๋น์ ๋์ดํด์ผํ๋ค. // ์ปดํฌ๋ํธ ์ค์บ์ ์ฌ์ฉํ์ง ์๊ณ ๋น์ ๋ฑ๋กํ๋ Configuration @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServi.. JVM ํด๋น ํฌ์คํ ์ ๋ฐฑ๊ธฐ์ ๋์ ์ธํ๋ฐ ๊ฐ์(๋ ์๋ฐ, ์ฝ๋๋ฅผ ์กฐ์ํ๋ ๋ค์ํ ๋ฐฉ๋ฒ)๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. Java, JVM, JDK, JRE JVM (Java Virtual Machine) ์๋ฐ ๋ฐ์ดํธ ์ฝ๋(.class ํ์ผ)๋ฅผ OS์ ํนํ๋ ์ฝ๋๋ก ๋ณํ(์ธํฐํ๋ฆฌํฐ์ JIT ์ปดํ์ผ๋ฌ)ํ์ฌ ์คํํ๋ค. ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ๋ ํ์ค์ด์ ๊ตฌํ์ฒด์ด๋ค. JVM ์์ฒด๋ ํ์ค, ๊ตฌํ์ฒด๋ ํน์ ๋ฐด๋๋ค์ด ๊ตฌํ JVM ๋ฐด๋: ์ค๋ผํด, ์๋ง์กด, Azul, ... ํน์ ํ๋ซํผ์ ์ข ์์ ์ด๋ค. ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ฐ๊ฟ์ ์คํํด์ผํ๋๋ฐ, ์ด๋ ๋ค์ดํฐ๋ธ ์ฝ๋๊ฐ OS์ ์ข ์์ ์ด๊ธฐ ๋๋ฌธ. JRE (Java Runtime Environment) ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ์ ์๋๋ก ๊ตฌ์ฑ (JVM + ๋ผ์ด๋ธ๋ฌ๋ฆฌ) JVM๊ณผ ํต์ฌ ๋ผ.. ์คํ๋ง ํต์ฌ ์๋ฆฌ ์ดํด ํด๋น ํฌ์คํ ์ ๊น์ํ๋์ ์ธํ๋ฐ ๊ฐ์(์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ)๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ "์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋์ ๊ณต์ฐ์ด๋ผ๊ณ ํ์ ๋, ์คํ๋ง์ ๊ณต์ฐ์ ๋ฐฐ์ญ(์ญํ )์ ๋ง๋ ๋ฐฐ์ฐ(๊ตฌํ์ฒด)๋ฅผ ์ญ์ธํ๋ ๊ณต์ฐ ๊ธฐํ์๋ผ๊ณ ํ ์ ์๋ค." ์๋ ์ฝ๋๋ ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น ์ค OCP์ DIP๋ฅผ ์๋ฐํ๊ณ ์๋ค. public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); ... } OCP ์๋ฐ OCP :.. ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง ํด๋น ํฌ์คํ ์ ๊น์ํ๋์ ์ธํ๋ฐ ๊ฐ์(์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ)๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ์คํ๋ง์ ํ์ EJB (Enterprise Java Beans) 2000๋ ๋ ์ด๋ฐ, ์๋ฐ ์ง์์ ํ์ค์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ์ ํธ๋์ญ์ ์ค์ , ๋ถ์ฐ๊ธฐ์ ๋ฑ ์ด๋ก ์์ผ๋ก ์ข์ ์ ๋ค์ด ์์์ง๋ง, ๋ณต์กํ๊ณ EJB์ ์์กด์ ์ธ ์ฝ๋๋ฅผ ์์ฑํด์ผํ๋ ๋ฑ ์ฅ์ ์ ๋์ด์๋ ๋ค์ํ ๋ฌธ์ ์ ์ด ์์์ 2002๋ ๋ก๋ ์กด์จ ์ฑ ์ถ๊ฐ EJB์ ๋ฌธ์ ์ ์ ์ง์ ํ๋ฉฐ, EJB ์์ด๋ ์ถฉ๋ถํ ๊ณ ํ์ง์ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์์ ๋ณด์ฌ์ฃผ๊ณ , 30,000๋ผ์ธ ์ด์์ ๊ธฐ๋ฐ ๊ธฐ์ ์ ์์ ์ฝ๋๋ก ์ ๋ณด์ ์ฑ ์ถ๊ฐ ์งํ ์ ๊ฒ ํ ๋ฌ์ ์ ์นด๋กํ๊ฐ ๋ก๋ ์กด์จ์๊ฒ ์คํ์์ค ํ๋ก์ ํธ๋ฅผ ์ ์ ์ ํต์ ์ธ J2EE(EJB)๋ผ๋ ๊ฒจ์ธ์ ๋์ด ์๋ก์ด ์์์ด๋ผ๋ ๋ป์ผ.. [2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด์ญ] ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ ๋ฌธ์ https://programmers.co.kr/learn/courses/30/lessons/64062 ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ์์ค์ฝ๋ import java.util.Arrays; public class Solution { public int solution(int[] stones, int k) { int answer = 0; int start = Arrays.stream(stones).min().getAsInt(); int end = Arrays.stream(stones).max().getAsInt(); while(start .. [2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด์ญ] ํธํ ๋ฐฉ ๋ฐฐ์ ๋ฌธ์ https://programmers.co.kr/learn/courses/30/lessons/64063 ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ์์ค์ฝ๋ import java.util.Arrays; import java.util.HashMap; class Solution { HashMap rooms; public long[] solution(long k, long[] room_number) { rooms = new HashMap(); return Arrays.stream(room_number) .map(this::findRoom) .toArray.. [2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ] ์ ํ๋ฒ์ค ๋ฌธ์ https://programmers.co.kr/learn/courses/30/lessons/17678 ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ์์ค์ฝ๋ import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.PriorityQueue; import java.util.stream.Collectors; class Solution { public String solution(int n, int t, int m, String[] timetab.. [2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ] ๋ด์ค ํด๋ฌ์คํฐ๋ง ๋ฌธ์ https://programmers.co.kr/learn/courses/30/lessons/17677 ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ์์ค์ฝ๋ import java.util.PriorityQueue; import java.util.stream.Collectors; import java.util.stream.IntStream; class Solution { public int solution(String str1, String str2) { PriorityQueue q1 = setQueue(str1); PriorityQueue q2 = .. ์ด์ 1 2 3 ๋ค์