Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit470d29e

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

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+
publicinterfaceDragonSlayingStrategy {
40+
41+
voidexecute();
42+
}
43+
44+
@Slf4j
45+
publicclassMeleeStrategyimplementsDragonSlayingStrategy {
46+
47+
@Override
48+
publicvoidexecute() {
49+
LOGGER.info("With your Excalibur you sever the dragon's head!");
50+
}
51+
}
52+
53+
@Slf4j
54+
publicclassProjectileStrategyimplementsDragonSlayingStrategy {
55+
56+
@Override
57+
publicvoidexecute() {
58+
LOGGER.info("You shoot the dragon with the magical crossbow and it falls dead on the ground!");
59+
}
60+
}
61+
62+
@Slf4j
63+
publicclassSpellStrategyimplementsDragonSlayingStrategy {
64+
65+
@Override
66+
publicvoidexecute() {
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+
publicclassDragonSlayer {
76+
77+
privateDragonSlayingStrategy strategy;
78+
79+
publicDragonSlayer(DragonSlayingStrategystrategy) {
80+
this.strategy= strategy;
81+
}
82+
83+
publicvoidchangeStrategy(DragonSlayingStrategystrategy) {
84+
this.strategy= strategy;
85+
}
86+
87+
publicvoidgoToBattle() {
88+
strategy.execute();
89+
}
90+
}
91+
```
92+
93+
마지막으로 여기 드래곤 슬레이어가 행동합니다.
94+
95+
```java
96+
LOGGER.info("Green dragon spotted ahead!");
97+
var dragonSlayer=newDragonSlayer(newMeleeStrategy());
98+
dragonSlayer.goToBattle();
99+
LOGGER.info("Red dragon emerges.");
100+
dragonSlayer.changeStrategy(newProjectileStrategy());
101+
dragonSlayer.goToBattle();
102+
LOGGER.info("Black dragon lands before you.");
103+
dragonSlayer.changeStrategy(newSpellStrategy());
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+
publicclassLambdaStrategy {
122+
123+
privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(LambdaStrategy.class);
124+
125+
publicenumStrategyimplementsDragonSlayingStrategy {
126+
MeleeStrategy(() -> LOGGER.info(
127+
"WithyourExcaliburyouseverethedragon'shead!")),
128+
ProjectileStrategy(() -> LOGGER.info(
129+
"Youshootthedragonwiththemagicalcrossbowanditfallsdeadontheground!")),
130+
SpellStrategy(() -> LOGGER.info(
131+
"Youcastthespellofdisintegrationandthedragonvaporizesinapileofdust!"));
132+
133+
privatefinalDragonSlayingStrategy dragonSlayingStrategy;
134+
135+
Strategy(DragonSlayingStrategydragonSlayingStrategy) {
136+
this.dragonSlayingStrategy= dragonSlayingStrategy;
137+
}
138+
139+
@Override
140+
publicvoidexecute() {
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)

[8]ページ先頭

©2009-2025 Movatter.jp