Skip to content

Commit 8425cde

Browse files
authored
Merge pull request #18 from theintrance/jayden/2024-11-06
Jayden/2024 11 06
2 parents a9f43da + ee18e57 commit 8425cde

5 files changed

+351
-0
lines changed

โ€Žastro/src/consts.tsโ€Ž

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ export const SIDEBAR: Sidebar = {
6969
{ text: '5.4. ์ผ๊ด€๋œ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์„ ๊ณ ์ˆ˜ํ•˜๋ผ', link: '/ko/chapter5/5_4_์ผ๊ด€๋œ_์ฝ”๋”ฉ_์Šคํƒ€์ผ์„_๊ณ ์ˆ˜ํ•˜๋ผ' },
7070
{ text: '5.5. ๊นŠ์ด ์ค‘์ฒฉ๋œ ์ฝ”๋“œ๋ฅผ ํ”ผํ•˜๋ผ', link: '/ko/chapter5/5_5_๊นŠ์ด_์ค‘์ฒฉ๋œ_์ฝ”๋“œ๋ฅผ_ํ”ผํ•˜๋ผ' },
7171
{ text: '5.6. ํ•จ์ˆ˜ ํ˜ธ์ถœ๋„ ๊ฐ€๋…์„ฑ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค', link: '/ko/chapter5/5_6_ํ•จ์ˆ˜_ํ˜ธ์ถœ๋„_๊ฐ€๋…์„ฑ์ด_์žˆ์–ด์•ผ_ํ•œ๋‹ค' },
72+
{ text: '5.8. ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ผ', link: '/ko/chapter5/5_8_์ต๋ช…_ํ•จ์ˆ˜๋ฅผ_์ ์ ˆํ•˜๊ฒŒ_์‚ฌ์šฉํ•˜๋ผ' },
73+
{ text: '5.9. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ผ', link: '/ko/chapter5/5_9_ํ”„๋กœ๊ทธ๋ž˜๋ฐ_์–ธ์–ด์˜_์ƒˆ๋กœ์šด_๊ธฐ๋Šฅ์„_์ ์ ˆํ•˜๊ฒŒ_์‚ฌ์šฉํ•˜๋ผ' },
74+
],
75+
'Chapter 6': [
76+
{ text: '6.1. ๋งค์ง๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค', link: '/ko/chapter6/6_1_๋งค์ง๊ฐ’์„_๋ฐ˜ํ™˜ํ•˜์ง€_๋ง์•„์•ผ_ํ•œ๋‹ค' },
77+
{ text: '6.2. ๋„ ๊ฐ์ฒด ํŒจํ„ด์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋ผ', link: '/ko/chapter6/6_2_๋„_๊ฐ์ฒด_ํŒจํ„ด์„_์ ์ ˆํžˆ_์‚ฌ์šฉํ•˜๋ผ' },
78+
{ text: '6.3. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ํ”ผํ•˜๋ผ', link: '/ko/chapter6/6_3_์˜ˆ์ƒ์น˜_๋ชปํ•œ_์‚ฌ์ด๋“œ_์ดํŽ™ํŠธ๋ฅผ_ํ”ผํ•˜๋ผ' },
79+
{ text: '6.4. ์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•˜๋ผ', link: '/ko/chapter6/6_4_์ž…๋ ฅ_๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ_์ˆ˜์ •ํ•˜๋Š”_๊ฒƒ์—_์ฃผ์˜ํ•˜๋ผ' },
80+
{ text: '6.5. ์˜คํ•ด๋ฅผ ์ผ์œผํ‚ค๋Š” ํ•จ์ˆ˜๋Š” ์ž‘์„ฑํ•˜์ง€ ๋ง๋ผ', link: '/ko/chapter6/6_5_์˜คํ•ด๋ฅผ_์ผ์œผํ‚ค๋Š”_ํ•จ์ˆ˜๋Š”_์ž‘์„ฑํ•˜์ง€_๋ง๋ผ' },
81+
{ text: '6.6. ๋ฏธ๋ž˜๋ฅผ ๋Œ€๋น„ํ•œ ์—ด๊ฑฐํ˜• ์ฒ˜๋ฆฌ', link: '/ko/chapter6/6_6_๋ฏธ๋ž˜๋ฅผ_๋Œ€๋น„ํ•œ_์—ด๊ฑฐํ˜•_์ฒ˜๋ฆฌ' },
7282
],
7383
}
7484
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
---
2+
title: ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ํ”ผํ•˜๋ผ
3+
author: bayernmuller
4+
---
5+
6+
* **Side Effect**๋Š” ์–ด๋–ค ํ•จ์ˆ˜์˜ ํ˜ธ์ถœํžˆ ํ•จ์ˆ˜ ์™ธ๋ถ€์— ์ดˆ๋ž˜ํ•œ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
7+
8+
* ์˜ˆ)
9+
1. ์‚ฌ์šฉ์ž์—๊ฒŒ ์ถœ๋ ฅ ํ‘œ์‹œ
10+
2. ํŒŒ์ผ์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ €์žฅ
11+
3. ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์„ ํ˜ธ์ถœํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๋ฐœ์ƒ
12+
4. ์บ์‹œ ์—…๋ฐ์ดํŠธ ๋ฐ ๋ฌดํšจํ™”
13+
14+
* ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด immutable class ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด๋ฉฐ, 7์žฅ์—์„œ ๋‹ค๋ฃธ
15+
* ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋Š” ์–ธ์ œ๋‚˜ ์˜ˆ์ƒ์น˜ ๋ชปํ•˜๊ฒŒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ตœ๋Œ€ํ•œ ๋ฐฉ์–ด์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
16+
17+
### 6.3.1 ๋ถ„๋ช…ํ•˜๊ณ  ์˜๋„์ ์ธ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋Š” ๊ดœ์ฐฎ๋‹ค
18+
19+
```java correct
20+
class UserDisplay {
21+
private final Canvas canvas;
22+
...
23+
void displayError(String message) {
24+
canvas.drawText(message, Color.RED);
25+
}
26+
}
27+
```
28+
29+
* ์œ„ ์ฝ”๋“œ๋Š” ์˜๋„์ ์ด๊ณ  ๋ถ„๋ช…ํ•˜๊ฒŒ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ฝ”๋“œ์ด๋‹ค.
30+
* ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.
31+
32+
### 6.3.2 ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋Š” ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค
33+
34+
```java incorrect
35+
class UserDisplay {
36+
private final Canvas canvas;
37+
...
38+
Color getPixel(Int x, Int y) {
39+
canvas.redraw();
40+
PixelData pixelData = canvas.getPixel(x, y);
41+
return new Color(
42+
pixelData.red,
43+
pixelData.green,
44+
pixelData.blue
45+
);
46+
}
47+
}
48+
```
49+
50+
* ํŠน์ • ์ขŒํ‘œ์˜ ํ”ฝ์…€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด, `canvas.redraw()` ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋‹ค.
51+
* ์ด๋Š” ๋ฌธ์ œ์˜ ์†Œ์ง€๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
52+
53+
#### ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋Š” ๋น„์šฉ์ด ๋งŽ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค
54+
55+
* ์บ”๋ฒ„์Šค๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒƒ์€ ์ž ์žฌ์ ์œผ๋กœ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค ์ˆ˜ ์žˆ๊ณ  flickering ํ˜„์ƒ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
56+
* `getPixel()` ์„ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ๋Š” ๊ทธ์ •๋„์˜ ์ž‘์—…์ด ํ•„์š”ํ•œ์ง€ ๋ชจ๋ฅด๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
57+
58+
#### ํ˜ธ์ถœํ•œ ์ชฝ์˜ ๊ฐ€์ •์„ ๊นจํŠธ๋ ค๋ฒ„๋ฆฐ๋‹ค
59+
60+
```java incorrect
61+
class UserDisplay {
62+
...
63+
Color getPixel(Int x, Int y) { ... }
64+
65+
Image captureScreenshot() {
66+
Image image = new Image();
67+
for (int y = 0; y < canvas.height; y++) {
68+
for (int x = 0; x < canvas.width; x++) {
69+
image.setPixel(x, y, getPixel(x, y));
70+
}
71+
}
72+
return image;
73+
}
74+
}
75+
```
76+
* `getPixel()` ์€ ์บ”๋ฒ„์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์žˆ์ง€๋งŒ `captureScreenshot()` ๋Š” ๊ทธ๊ฒƒ์„ ์˜ˆ์ธกํ•˜๊ธฐ ์‰ฝ์ง€ ์•Š์œผ๋ฏ€๋กœ ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœํ•˜์—ฌ ์น˜๋ช…์ ์ธ ๋ฒ„๊ทธ๋ฅผ ๋งŒ๋“ค๊ณ ์žˆ๋‹ค.
77+
* ์ด์ฒ˜๋Ÿผ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋Š” ํ˜ธ์ถœ ํ•˜๋Š” ์ชฝ์—์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
78+
79+
#### ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์ฝ”๋“œ์˜ ๋ฒ„๊ทธ
80+
81+
|thread|1|2|comment|
82+
|---|---|---|---|
83+
|thread 1 ์„ ์ |`getPixel()` -> `canvas.redraw()`||์บ”๋ฒ„์Šค๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์‹œ์ž‘|
84+
|thread 2 ์„ ์ ||`getPixel()` -> `canvas.redraw()`|์บ”๋ฒ„์Šค๋ฅผ ๋˜ ๊ทธ๋ฆฌ๊ธฐ ์‹œ์ž‘|
85+
|thread 1 ์žฌ์‹œ์ž‘|`getPixel()` ๋งˆ๋ฌด๋ฆฌ||์˜ˆ์ƒํ•  ์ˆ˜ ์—†๋Š” ํ”ฝ์…€๊ฐ’ ์–ป์Œ|
86+
|thread 2 ์žฌ์‹œ์ž‘||`getPixel()` ๋งˆ๋ฌด๋ฆฌ|์˜ˆ์ƒํ•  ์ˆ˜ ์—†๋Š” ํ”ฝ์…€๊ฐ’ ์–ป์Œ|
87+
88+
* ์ด๋ ‡๊ฒŒ ๋‘ thread๊ฐ€ ๋™์‹œ์— `getPixel()` ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฒฝ์Ÿํ•˜๋ฉฐ `canvas` ๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ฒŒ ๋˜๊ณ , ๊ฒฐ๊ตญ ๊ฐ๊ฐ ํ˜ธ์ถœํ•œ `getPixel()` ์˜ ๊ฒฐ๊ณผ๋Š” ์˜ˆ์ƒํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.
89+
90+
### 6.3.3 ํ•ด๊ฒฐ์ฑ…: ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ํ”ผํ•˜๊ฑฐ๋‚˜ ๊ทธ ์‚ฌ์‹ค์„ ๋ถ„๋ช…ํ•˜๊ฒŒ ํ•˜๋ผ
91+
92+
* ํ”ฝ์…€์„ ์ฝ๊ธฐ ์ „์— `canvas.redraw()` ํ˜ธ์ถœ์ด ๊ผญ ํ•„์š”ํ• ๊นŒ?
93+
* ๊ผญ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
94+
* ๋ฐ˜๋“œ์‹œ ํ˜ธ์ถœ ํ•ด์•ผํ•œ๋‹ค๋ฉด `getPixel()` ์ด๋ผ๋Š” ์ด๋ฆ„์€ ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค.
95+
96+
```java correct
97+
class UserDisplay {
98+
...
99+
Color redrawAndGetPixel(Int x, Int y) {
100+
canvas.redraw();
101+
...
102+
}
103+
}
104+
```
105+
106+
* ํ•จ์ˆ˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ์–ด ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ ์–ด๋–ค ๋™์ž‘์„ ํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
107+
* ๋˜ํ•œ `redrawAndGetPixel()` ์„ ๋ณด๊ณ  thread-unsafe ๋ฅผ ์˜์‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
---
2+
title: ์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•˜๋ผ
3+
author: bayernmuller
4+
---
5+
6+
### 6.4.1์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋ฒ„๊ทธ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค
7+
8+
```cpp incorrect
9+
Image GetColorReversed(Image& image) {
10+
for (int y = 0; y < image.height; y++) {
11+
for (int x = 0; x < image.width; x++) {
12+
image.setPixel(x, y, image.getPixel(x, y).reverse());
13+
}
14+
}
15+
return image;
16+
}
17+
18+
int main() {
19+
Image original_image = Image::FromFile("image.png");
20+
Image reversed_image = GetColorReversed(original_image);
21+
22+
// Original Image ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ์žˆ๋‹ค..
23+
}
24+
```
25+
26+
* ์ด ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
27+
28+
### 6.4.2 ํ•ด๊ฒฐ์ฑ…: ๋ณ€๊ฒฝ ์ „ ๋ณต์‚ฌํ•˜๋ผ
29+
30+
```cpp correct
31+
// ์—ฌ์ „ํžˆ ์ข‹์€ ์ฝ”๋“œ๋Š” ์•„๋‹˜, ์•„๋ž˜ Jayden ์˜ ์ฝ”๋ฉ˜ํŠธ ์ฐธ๊ณ 
32+
Image GetColorReversed(Image& image) {
33+
Image result(image);
34+
for (int y = 0; y < result.height; y++) {
35+
for (int x = 0; x < result.width; x++) {
36+
result.setPixel(x, y, result.getPixel(x, y).reverse());
37+
}
38+
}
39+
return result;
40+
}
41+
42+
int main() {
43+
Image original_image = Image::FromFile("image.png");
44+
Image reversed_image = GetColorReversed(original_image);
45+
46+
// Original Image ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.
47+
}
48+
```
49+
50+
* ์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝ ์ „ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์€ ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
51+
52+
##### Jayden: C++ ์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธธ ๋•Œ์˜ ํ…Œํฌ๋‹‰
53+
* ๊ตฌ๊ธ€ ์Šคํƒ€์ผ C++ ์—์„œ๋Š” `call-by-pointer` ์ผ๋•Œ, ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Œ์„ ๋œปํ•˜๊ณ , call-by-**cosnt**-reference ์ผ ๋•Œ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ์„ ๋œปํ•œ๋‹ค.
54+
55+
```cpp correct
56+
void sqaure(int *x)
57+
{
58+
*x = *x * *x;
59+
}
60+
61+
int a = 10;
62+
sqaure(&a); // a ๋Š” square ์— ์˜ํ•ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Œ์„ ๋œปํ•œ๋‹ค.
63+
```
64+
65+
```cpp correct
66+
Image GetColorReversed(const Image& image)
67+
{
68+
...
69+
}
70+
71+
Image image = Image::FromFile("image.png");
72+
Image reversed_image = GetColorReversed(image); // image ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.
73+
```
74+
75+
```cpp incorrect
76+
Image GetColorReversed(Image& image) // cpplint error!
77+
{
78+
...
79+
}
80+
```
81+
* non-const reference ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
title: ์˜คํ•ด๋ฅผ ์ผ์œผํ‚ค๋Š” ํ•จ์ˆ˜๋Š” ์ž‘์„ฑํ•˜์ง€ ๋ง๋ผ
3+
author: bayernmuller
4+
---
5+
6+
### 6.5.1 ์ค‘์š”ํ•œ ์ž…๋ ฅ์ด ๋ˆ„๋ฝ๋˜์—ˆ์„ ๋•Œ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋†€๋ž„ ์ˆ˜ ์žˆ๋‹ค
7+
8+
```java incorrect
9+
class UserDisplay {
10+
private final LocalizedMessages messages;
11+
...
12+
void displayLegalDisclaimer(String? legalText) {
13+
if (legalText == null) {
14+
return;
15+
}
16+
...
17+
displayOverlay(
18+
title: messages.getLegalDisclaimerTitle(),
19+
message: legalText,
20+
textColor: Color.RED
21+
);
22+
}
23+
}
24+
```
25+
* ์œ„ `displayLegalDisclaimer()` ํ•จ์ˆ˜๋Š” `legalText` ๊ฐ€ `null` ์ผ ๋•Œ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
26+
* ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ `legalText` ๊ฐ€ `null` ์ผ ๋•Œ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์—†์œผ๋ฉฐ, ํ•ญ์ƒ ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ฐฉ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
27+
28+
### 6.5.2 ํ•ด๊ฒฐ์ฑ…: ์ค‘์š”ํ•œ ์ž…๋ ฅ์€ ํ•„์ˆ˜ ํ•ญ๋ชฉ์œผ๋กœ ๋งŒ๋“ค๋ผ
29+
30+
* ์ค‘์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” nullable ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋ผ.
31+
32+
```java correct
33+
class UserDisplay {
34+
private final LocalizedMessages messages;
35+
...
36+
void displayLegalDisclaimer(String legalText) {
37+
// legalText CANNOT be null!
38+
}
39+
}
40+
```
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
---
2+
title: ๋ฏธ๋ž˜๋ฅผ ๋Œ€๋น„ํ•œ ์—ด๊ฑฐํ˜• ์ฒ˜๋ฆฌ
3+
author: bayernmuller
4+
---
5+
6+
* ์ง€๊ธˆ๊นŒ์ง€ 6์žฅ์—์„œ๋Š” ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์—์„œ ์ฝ”๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ์ด๋‚˜ ๋ฐ˜ํ™˜๊ฐ’์ด ์˜ˆ์ƒ์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋„๋ก ํ•˜๋Š”๋ฐ์— ์ดˆ์ ์„ ๋งž์ถ”์—ˆ๋‹ค.
7+
* ํ•˜์ง€๋งŒ ๋ฐ˜๋Œ€๋กœ, ์šฐ๋ฆฌ๊ฐ€ ์˜์กดํ•˜๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ ๋ถ€์‹คํ•œ ๊ฐ€์ •์„ ํ•  ๊ฒฝ์šฐ์—๋„ ๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
8+
9+
### 6.6.1 ๋ฏธ๋ž˜์— ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” enum ๊ฐ’์„ ์•”๋ฌต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค
10+
11+
```java
12+
enum PredictedOutcome {
13+
BAYERN_MUNICH_WILL_WIN,
14+
BAYERN_MUNICH_WILL_LOSE,
15+
}
16+
17+
Boolean isOutcomeSafe(PredictedOutcome prediction) {
18+
if (prediction == PredictedOutcome.BAYERN_MUNICH_WILL_LOSE) {
19+
return false;
20+
}
21+
return true;
22+
}
23+
```
24+
25+
* ์œ„ ์ฝ”๋“œ๋Š” Enum ์˜ ์š”์†Œ๊ฐ€ 2๊ฐœ์ผ ๋•Œ๋Š” ์ž˜ ์ž‘๋™ํ•œ๋‹ค.
26+
* ํ•˜์ง€๋งŒ Enum ์˜ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.
27+
28+
```java incorrect
29+
enum PredictedOutcome {
30+
BAYERN_MUNICH_WILL_WIN,
31+
BAYERN_MUNICH_WILL_LOSE,
32+
REAL_MADRID_WILL_WIN_THE_CHAMPIONS_LEAGUE, // ์ƒˆ๋กœ์šด ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋จ
33+
}
34+
35+
Boolean isOutcomeSafe(PredictedOutcome prediction) {
36+
if (prediction == PredictedOutcome.BAYN_MUNICH_WILL_LOSE) {
37+
return false;
38+
}
39+
return true;
40+
}
41+
```
42+
43+
* 3๋ฒˆ์จฐ enum ๊ฐ’์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”๋ฐ, `isOutcomeSafe()` ์—์„œ๋Š” `REAL_MADRID_WILL_WIN_THE_CHAMPIONS_LEAGUE` ๋ฅผ safe ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•  ๊ฒƒ์ด๋‹ค. ์ ˆ๋Œ€ ์•ˆ๋œ๋‹ค.
44+
* ์ด๋ ‡๊ฒŒ Enum ์„ ์ถ”๊ฐ€ํ•  ๋–„ Enum ์„ ์ฐธ์กฐํ•˜๋Š” ์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
45+
46+
### 6.6.2 ํ•ด๊ฒฐ์ฑ…: ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค์œ„์น˜ ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ผ
47+
48+
* ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์—ด๊ฑฐ๊ฐ’์„ ๋ช…์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
49+
50+
```java
51+
Boolean isOutcomeSafe(PredictedOutcome prediction) {
52+
switch (prediction) {
53+
case BAYERN_MUNICH_WILL_WIN:
54+
return true;
55+
case BAYERN_MUNICH_WILL_LOSE:
56+
return false;
57+
}
58+
throw new UncheckedException("Unknown prediction: " + prediction);
59+
}
60+
```
61+
62+
* ๋งŒ์•ฝ `switch` ๋ฌธ์—์„œ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด `UncheckedException` ์ด ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.
63+
* ์ฆ‰ ์ƒˆ๋กœ์šด ์—ด๊ฑฐ๊ฐ’์„ ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ, ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์˜ ์ˆ˜์ •์„ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
64+
* Unit Test ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋ชจ๋“  Enum ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
65+
66+
```java correct
67+
testIsOutcomeSafe_allPredictedOutcomeValues() {
68+
for (PredictedOutcome prediction : PredictedOutcome.values()) {
69+
isOutcomeSafe(prediction);
70+
}
71+
}
72+
```
73+
74+
```java correct
75+
Boolean isOutcomeSafe(PredictedOutcome prediction) {
76+
switch (prediction) {
77+
case BAYERN_MUNICH_WILL_WIN:
78+
return true;
79+
case BAYERN_MUNICH_WILL_LOSE:
80+
return false;
81+
case REAL_MADRID_WILL_WIN_THE_CHAMPIONS_LEAGUE:
82+
return false;
83+
}
84+
throw new UncheckedException("Unknown prediction: " + prediction);
85+
}
86+
```
87+
* ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์—ด๊ฑฐ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
88+
89+
### 6.6.3 switch: default-case ๋ฅผ ์ฃผ์˜ํ•˜๋ผ
90+
91+
```java incorrect
92+
Boolean isOutcomeSafe(PredictedOutcome prediction) {
93+
switch (prediction) {
94+
case BAYERN_MUNICH_WILL_WIN:
95+
return true;
96+
case BAYERN_MUNICH_WILL_LOSE:
97+
return false;
98+
default:
99+
return false;
100+
}
101+
}
102+
```
103+
104+
* ์ƒˆ๋กœ์šด ์—ด๊ฑฐ๊ฐ’์ด ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ, `default` ์ผ€์ด์Šค๋กœ ์ˆ˜ํ–‰๋˜์–ด `false` ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.
105+
* ์ด๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Œ์—๋„ ์˜ˆ์™ธ๋„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ๋ฌด์‹œ๋œ๋‹ค.
106+
* C++ ๊ณผ ๋ช‡๋ช‡ ์–ธ์–ด๋Š” switch ๋ฌธ์—์„œ ๋ชจ๋“  ์—ด๊ฑฐํ˜•์ด ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ๋Š”์ง€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ™•์ธํ•˜๊ณ  ๊ฒฝ๊ณ ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
107+
* ๋”ฐ๋ผ์„œ ๋ช…์‹œ์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๋ฒ„๊ทธ๋ฅผ ๋ฐฉ์ง€ํ•˜์ž
108+
* **Java ์—์„œ๋Š” switch ๋ฌธ์—์„œ `default` ์ผ€์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ ์—ด๊ฑฐํ˜•์ด ์ถ”๊ฐ€๋˜๋”๋ผ๋„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด๋ฅผ ์ฒดํฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค!**
109+
110+
### 6.6.4 ์ฃผ์˜ ์‚ฌํ•ญ: ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ์—ด๊ฑฐํ˜•์— ์˜์กด
111+
112+
* ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ์—ด๊ฑฐํ˜•์„ ๊ฐ€์ง€๊ณ  ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
113+
* ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ, ๊ทธ ํ”„๋กœ์ ํŠธ์˜ ์—ด๊ฑฐํ˜•์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Œ์„ ๊ธฐ์–ตํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.

0 commit comments

Comments
ย (0)