๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

(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 = ..