Community

๐Ÿ•Š๏ธ Java Lambda๋กœ Switch๋ฌธ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ

์ €๋Š” ์ผ๋ จ์˜ ์ƒ์ˆ˜๊ฐ’์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด if-else ๋ฌธ๋ณด๋‹ค switch ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋” ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. switch ๋ฌธ์€ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด ๋งŽ์„ ๋•Œ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๋‹ค์Œ ์ฝ”๋“œ์—์„œ๋Š” ์š”์ผ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์—ด๊ฑฐํ˜•๊ณผ ๋‚ ์งœ๋ณ„๋กœ ๋‹ค๋ฅธ ๋ชฉํ‘œ๋ฅผ ํ”„๋ฆฐํŒ…ํ•˜๋Š” switch ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ``` public class ClientApp { public static void main(String[] args) { Week week = Week.SATURDAY; GoalPrinter goalPrinter = new GoalPrinter(); showWeekGoal(goalPrinter, week); } private static void showWeekGoal(GoalPrinter goalPrinter,Week week) { switch (week){ case SATURDAY: goalPrinter.saturdayGoal(); break; case SUNDAY: goalPrinter.sundayGoal(); break; // ์ƒ๋žต } } } ``` ์ด ์ ‘๊ทผ์€ ๊ฒฐํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Week์— ์ƒˆ ์š”์ผ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ GoalPrinter์™€ ClientApp์„ ๋ชจ๋‘ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Open-Closed(SOLID ๊ฐœ๋ฐฉ-ํ์‡„) ์›์น™์— ์œ„๋ฐฐ๋ฉ๋‹ˆ๋‹ค. ๋” ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ์‹ค์ œ๋กœ Lambda์™€ Functional Interface ๋„์›€์œผ๋กœ ๊ฒฐ์ ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ``` public enum Week { SATURDAY(GoalPrinter::saturdayGoal), SUNDAY(GoalPrinter::sundayGoal), // ์ƒ๋žต public final WeekGoalConsumer consumer; Week(WeekGoalConsumer consumer) { this.consumer = consumer; } } ``` WeekGoalConsumer๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” GoalPrinter์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ``` @FunctionalInterface public interface WeekGoalConsumer { void execute(T t); } ``` ๊ทธ๋ฆฌ๊ณ  ๋งˆ์นจ๋‚ด, ClientApplication์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ``` public class ClientApp { public static void main(String[] args) { Week week = Week.SUNDAY; week.consumer.execute(new GoalPrinter()); } } ``` ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋” ๊นจ๋—ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์—ด๊ฑฐํ˜•์— ์ƒˆ๋กœ์šด ์ƒ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๋•Œ, ๋งค๋ฒˆ ํด๋ผ์ด์–ธํŠธ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๐Ÿฃ ์ตœ๊ทผ์— ์ด๋Ÿฐ switch ๋ฌธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ผ์ด ์žˆ์—ˆ๋Š”๋ฐ, ์ด ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด์„œ ์ˆ˜์ •ํ•ด์•ผ๊ฒ ๋„ค์š”.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค