Skip to content

Commit 470d29e

Browse files
keunyopohbus
andauthored
docs: Translated the strategy pattern into Korean (iluwatar#1708)
* Correct README.md in Korean Spelling correction and human-readable paraphrase on ko/README.md. Previously, it was translated using a machine translator. * Add strategy pattern into Korean Add and translate the strategy pattern into Korean. * Remove source file from the translated folder Co-authored-by: Subhrodip Mohanta <hello@subho.xyz>
1 parent 74802e8 commit 470d29e

File tree

2 files changed

+198
-13
lines changed

2 files changed

+198
-13
lines changed

ko/README.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,35 +14,35 @@
1414

1515
# 소개
1616

17-
디자인 패턴은 프로그래머가 응용 프로그램이나 시스템을 디자인 할 때 일반적인 문제를 해결하는 데 사용할 수있는 가장 공식화 된 방법입니다.
17+
디자인 패턴은 개발자가 응용 프로그램이나 시스템을 디자인할 때 일반적인 문제를 해결하는 데 사용할 수 있는 가장 정석적인 방법입니다.
1818

19-
디자인 패턴은 테스트되고 입증 된 개발 패러다임을 제공하여 개발 프로세스 속도를 높일 수 있습니다.
19+
디자인 패턴은 테스트되고 입증된 개발 패러다임을 제공하여 개발 프로세스 속도를 높일 수 있습니다.
2020

21-
디자인 패턴을 재사용하면 주요 문제를 유발하는 미묘한 이슈들을 방지하는데 도움이 되며 또한 패턴에 익숙한 코더와 아키텍트의 코드 가독성도 향상됩니다.
21+
디자인 패턴을 사용하면 주요 문제를 유발하는 미묘한 이슈들을 방지하는 데 도움이 되며 또한 패턴에 익숙한 개발자와 아키텍트의 코드 가독성을 향상시킵니다.
2222

2323
# 시작하기
2424

25-
이 사이트는 Java 디자인 패턴을 보여줍니다. 이 솔루션은 오픈 소스 커뮤니티의 경험이 많은 프로그래머와 설계자가 개발했습니다. 패턴은 높은 수준의 설명이나 소스 코드를 통해 찾아 볼 수 있습니다. 소스 코드 예제는 잘 설명되어 있으며 특정 패턴을 구현하는 방법을 알려주는 프로그래밍 튜토리얼로 생각할 수 있습니다. 우리는 가장 널리 알려지고 실무에서 입증된 오픈 소스 Java 기술을 사용합니다.
25+
이 사이트는 Java 디자인 패턴을 설명합니다. 이 솔루션은 오픈 소스 커뮤니티의 경험이 많은 개발자와 설계자가 개발했습니다. 패턴은 높은 수준의 설명이나 소스 코드를 통해 찾아볼 수 있습니다. 소스 코드 예제는 잘 설명되어 있으며 특정 패턴을 구현하는 방법을 알려주는 프로그래밍 튜토리얼로 사용할 수 있습니다. 우리는 가장 널리 알려지고 실무에서 입증된 오픈 소스 Java 기술을 사용합니다.
2626

27-
자료를 살펴보기 전에 다양한 [소프트웨어 설계 원칙](https://java-design-patterns.com/principles/)숙지해야합니다.
27+
자료를 살펴보기 전에 다양한 [소프트웨어 설계 원칙](https://java-design-patterns.com/principles/)숙지해야 합니다.
2828

29-
모든 디자인은 가능한 한 단순해야합니다. 당신은 KISS, YAGNI로 시작해야하며, 원칙을 작동 할 수 있는 가장 단순한 일을 해야합니다. 복잡성과 패턴은 실용적인 확장성을 위해 필요할 때만 도입되어야합니다.
29+
모든 디자인 패턴은 가능한 한 심플해야 합니다. 소프트웨어 개발의 KISS, YAGNI 원칙을 지켜야 하며, 문제를 해결할 수 있는 가장 심플한 일을 해야 합니다. 복잡한 디자인 패턴은 실용적이고 확장성을 위해 필요할 때만 도입되어야 합니다.
3030

31-
이러한 개념에 익숙해지면 다음 접근 방식 중 하나를 이용하여 [사용 가능한 디자인 패턴](https://java-design-patterns.com/patterns/)으로 드릴다운 할 수 있습니다.
31+
이러한 개념에 익숙해지면 아래와 같은 방법으로 [사용 가능한 디자인 패턴](https://java-design-patterns.com/patterns/) 중 하나를 선택하여 문제를 해결할 수 있습니다.
3232

33-
- 이름으로 특정 패턴을 검색합니다. 찾을 수 없습니까? [여기](https://github.com/iluwatar/java-design-patterns/issues)에서 새 패턴을 보고하십시오.
34-
- `Performance`, `Gang of Four` 또는 `Data access` 태그 사용.
35-
- 패턴 카테고리, `Creational`, `Behavioral` 및 기타 사용
33+
- 이름으로 특정 패턴을 검색합니다. 찾는 패턴이 없다면 [여기](https://github.com/iluwatar/java-design-patterns/issues)에서 새 패턴을 요청하세요.
34+
- `Performance`, `Gang of Four` 또는 `Data access` 등의 태그로 검색하세요.
35+
- `Creational`, `Behavioral` 등의 패턴 카테고리로 검색하세요.
3636

37-
사이트에 제시된 객체 지향 솔루션이 여러분의 아키텍처에서 유용하고 우리가 개발 한 것만큼 재미있게 배우기를 바랍니다.
37+
사이트에서 제공하는 객체 지향 솔루션이 여러분의 아키텍처에 유용하고 사용되고 우리가 개발 한 것만큼 재미있게 배우기를 바랍니다.
3838

3939
# 기여하는 방법
4040

41-
프로젝트에 기여할 의향이 있다면 [developer wiki](https://github.com/iluwatar/java-design-patterns/wiki)에서 관련 정보를 찾을 수 있습니다. [Gitter chatroom](https://gitter.im/iluwatar/java-design-patterns)에서 귀하를 돕고 질문에 답변 해 드리겠습니다.
41+
프로젝트에 기여할 의향이 있다면 [developer wiki](https://github.com/iluwatar/java-design-patterns/wiki)에서 관련 정보를 찾을 수 있습니다. [Gitter chatroom](https://gitter.im/iluwatar/java-design-patterns)에서 귀하를 돕고 질문에 답변해 드리겠습니다.
4242

4343
# 특허
4444

45-
이 프로젝트는 MIT 라이센스 조건에 따라 라이센스가 부여됩니다.
45+
이 프로젝트는 MIT 라이센스 조건에 따라 라이센스가 적용됩니다.
4646

4747
# 기여자
4848

ko/strategy/README.md

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
---
2+
layout: pattern
3+
title: Strategy
4+
folder: strategy
5+
permalink: /patterns/strategy/
6+
categories: Behavioral
7+
tags:
8+
- Gang of Four
9+
---
10+
11+
## 동의어
12+
13+
정책(Policy) 패턴
14+
15+
## 의도
16+
17+
알고리즘군을 정의하고 각 알고리즘을 캡슐화하고 상호 변경 가능하게 만듭니다. 전략(Strategy) 패턴을 사용하면 알고리즘이 이를 사용하는 클라이언트와 독립적일 수 있습니다.
18+
19+
## 설명
20+
21+
실제 예제
22+
23+
> 드래곤을 사냥하는 것은 위험한 일입니다. 경험이 쌓이면 쉬워집니다. 베테랑 사냥꾼들은 서로 다른 유형의 드래곤에 대해 서로 다른 전투 전략을 개발했습니다.
24+
25+
평범한 말로는
26+
27+
> 전략(Strategy) 패턴을 사용하면 런타임에 가장 적합한 알고리즘을 선택할 수 있습니다.
28+
29+
Wikipedia는
30+
31+
> 컴퓨터 프로그래밍에서 전략 패턴(정책 패턴이라고도 함)은 런타임에 알고리즘을 선택할 수 있는 행동 소프트웨어 디자인 패턴입니다.
32+
33+
**프로그래밍 예**
34+
35+
먼저 드래곤 사냥 전략 인터페이스와 그 구현을 살펴봅니다.
36+
37+
```java
38+
@FunctionalInterface
39+
public interface DragonSlayingStrategy {
40+
41+
void execute();
42+
}
43+
44+
@Slf4j
45+
public class MeleeStrategy implements DragonSlayingStrategy {
46+
47+
@Override
48+
public void execute() {
49+
LOGGER.info("With your Excalibur you sever the dragon's head!");
50+
}
51+
}
52+
53+
@Slf4j
54+
public class ProjectileStrategy implements DragonSlayingStrategy {
55+
56+
@Override
57+
public void execute() {
58+
LOGGER.info("You shoot the dragon with the magical crossbow and it falls dead on the ground!");
59+
}
60+
}
61+
62+
@Slf4j
63+
public class SpellStrategy implements DragonSlayingStrategy {
64+
65+
@Override
66+
public void execute() {
67+
LOGGER.info("You cast the spell of disintegration and the dragon vaporizes in a pile of dust!");
68+
}
69+
}
70+
```
71+
72+
그리고 여기 상대하는 드래곤에 따라 자신의 전투 전략을 선택할 수 있는 강력한 드래곤 슬레이어가 있습니다.
73+
74+
```java
75+
public class DragonSlayer {
76+
77+
private DragonSlayingStrategy strategy;
78+
79+
public DragonSlayer(DragonSlayingStrategy strategy) {
80+
this.strategy = strategy;
81+
}
82+
83+
public void changeStrategy(DragonSlayingStrategy strategy) {
84+
this.strategy = strategy;
85+
}
86+
87+
public void goToBattle() {
88+
strategy.execute();
89+
}
90+
}
91+
```
92+
93+
마지막으로 여기 드래곤 슬레이어가 행동합니다.
94+
95+
```java
96+
LOGGER.info("Green dragon spotted ahead!");
97+
var dragonSlayer = new DragonSlayer(new MeleeStrategy());
98+
dragonSlayer.goToBattle();
99+
LOGGER.info("Red dragon emerges.");
100+
dragonSlayer.changeStrategy(new ProjectileStrategy());
101+
dragonSlayer.goToBattle();
102+
LOGGER.info("Black dragon lands before you.");
103+
dragonSlayer.changeStrategy(new SpellStrategy());
104+
dragonSlayer.goToBattle();
105+
```
106+
107+
프로그램 출력:
108+
109+
```
110+
Green dragon spotted ahead!
111+
With your Excalibur you sever the dragon's head!
112+
Red dragon emerges.
113+
You shoot the dragon with the magical crossbow and it falls dead on the ground!
114+
Black dragon lands before you.
115+
You cast the spell of disintegration and the dragon vaporizes in a pile of dust!
116+
```
117+
118+
또한 Java 8의 새로운 기능인 Lambda Expressions은 구현을 위한 또 다른 접근 방식을 제공합니다:
119+
120+
```java
121+
public class LambdaStrategy {
122+
123+
private static final Logger LOGGER = LoggerFactory.getLogger(LambdaStrategy.class);
124+
125+
public enum Strategy implements DragonSlayingStrategy {
126+
MeleeStrategy(() -> LOGGER.info(
127+
"With your Excalibur you severe the dragon's head!")),
128+
ProjectileStrategy(() -> LOGGER.info(
129+
"You shoot the dragon with the magical crossbow and it falls dead on the ground!")),
130+
SpellStrategy(() -> LOGGER.info(
131+
"You cast the spell of disintegration and the dragon vaporizes in a pile of dust!"));
132+
133+
private final DragonSlayingStrategy dragonSlayingStrategy;
134+
135+
Strategy(DragonSlayingStrategy dragonSlayingStrategy) {
136+
this.dragonSlayingStrategy = dragonSlayingStrategy;
137+
}
138+
139+
@Override
140+
public void execute() {
141+
dragonSlayingStrategy.execute();
142+
}
143+
}
144+
}
145+
```
146+
147+
그리고 여기 드래곤 슬레이어가 행동합니다.
148+
149+
```java
150+
LOGGER.info("Green dragon spotted ahead!");
151+
dragonSlayer.changeStrategy(LambdaStrategy.Strategy.MeleeStrategy);
152+
dragonSlayer.goToBattle();
153+
LOGGER.info("Red dragon emerges.");
154+
dragonSlayer.changeStrategy(LambdaStrategy.Strategy.ProjectileStrategy);
155+
dragonSlayer.goToBattle();
156+
LOGGER.info("Black dragon lands before you.");
157+
dragonSlayer.changeStrategy(LambdaStrategy.Strategy.SpellStrategy);
158+
dragonSlayer.goToBattle();
159+
```
160+
161+
프로그램 출력은 위와 동일합니다.
162+
163+
## 클래스 다이어그램
164+
165+
![alt text](./etc/strategy_urm.png "Strategy")
166+
167+
## 적용 가능성
168+
169+
다음과 같은 경우 전략(Strategy) 패턴을 사용합니다.
170+
171+
* 비슷한 클래스들이 동작 만 다른 경우가 많이 있습니다. 전략 패턴은 여러 동작 중 하나를 클래스로 구성하는 방법을 제공합니다.
172+
* 알고리즘의 다양한 변형이 필요합니다. 예를 들어 다양한 공간 / 시간 절충을 반영하는 알고리즘을 정의할 수 있습니다. 이러한 변형이 알고리즘의 클래스 계층 구조로 구현될 때 전략 패턴을 사용할 수 있습니다.
173+
* 알고리즘은 클라이언트가 알 필요 없는 데이터를 사용합니다. 전략 패턴을 사용하여 복잡한 알고리즘 별 데이터 구조가 노출되지 않도록 합니다.
174+
* 클래스는 많은 동작을 정의하며 이러한 동작은 작업에서 여러 조건문으로 나타납니다. 많은 조건부 대신 관련 조건부 분기를 자체 전략 클래스로 이동하세요.
175+
176+
## 튜토리얼
177+
178+
* [전략 패턴 튜토리얼](https://www.journaldev.com/1754/strategy-design-pattern-in-java-example-tutorial)
179+
180+
## 크레딧
181+
182+
* [디자인 패턴: 재사용 가능한 객체 지향 소프트웨어의 요소](https://www.amazon.com/gp/product/0201633612/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0201633612&linkCode=as2&tag=javadesignpat-20&linkId=675d49790ce11db99d90bde47f1aeb59)
183+
* [자바의 함수형 프로그래밍: Java 8 Lambda 표현식의 강력한 기능 활용](https://www.amazon.com/gp/product/1937785467/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1937785467&linkCode=as2&tag=javadesignpat-20&linkId=7e4e2fb7a141631491534255252fd08b)
184+
* [헤드 퍼스트 디자인 패턴: 두뇌 친화적인 가이드](https://www.amazon.com/gp/product/0596007124/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596007124&linkCode=as2&tag=javadesignpat-20&linkId=6b8b6eea86021af6c8e3cd3fc382cb5b)
185+
* [패턴으로 리팩토링](https://www.amazon.com/gp/product/0321213351/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0321213351&linkCode=as2&tag=javadesignpat-20&linkId=2a76fcb387234bc71b1c61150b3cc3a7)

0 commit comments

Comments
 (0)