Skip to content

Commit f44cc4b

Browse files
committed
[번역] Part1 9.4 private, protected 프로퍼티와 메서드 충돌 해결 및 미번역분 번역
1 parent 5997866 commit f44cc4b

1 file changed

Lines changed: 11 additions & 46 deletions

File tree

  • 1-js/09-classes/04-private-protected-properties-methods

1-js/09-classes/04-private-protected-properties-methods/article.md

Lines changed: 11 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
잠시 개발을 벗어나 현실 세계로 눈을 돌려, 내부 인터페이스와 외부 인터페이스 구분이 무엇을 의미하는지 알아봅시다.
99

10-
일상생활에서 접하게 되는 기계들은 꽤 복잡한 구조로 되어 있습니다. 하지만 내부인터페이스와 외부 인터페이스가 구분되어있기 때문에 문제없이 기계를 사용할 수 있습니다.
10+
일상생활에서 접하게 되는 기계들은 꽤 복잡한 구조로 되어 있습니다. 하지만 내부 인터페이스와 외부 인터페이스가 구분되어 있기 때문에 문제없이 기계를 사용할 수 있습니다.
1111

1212
## 실생활 예제
1313

@@ -19,7 +19,7 @@
1919

2020
![](coffee-inside.jpg)
2121

22-
뭔가 디테일한 것들이 아주 많네요. 하지만 이 모든 것을 알지 못해도 커피 머신을 사용하는 데 지장이 없습니다.
22+
뭔가 디테일한 것들이 아주 많네요. 하지만, 이 모든 것을 알지 못해도 커피 머신을 사용하는 데 지장이 없습니다.
2323

2424
커피 머신은 꽤 믿음직한 기계입니다. 수년 간 사용할 수 있고, 중간에 고장이 나도 수리를 받으면 됩니다.
2525

@@ -42,7 +42,7 @@
4242

4343
내부 인터페이스의 세부사항들은 서로의 정보를 이용하여 객체를 동작시킵니다. 발열 장치에 부착된 관을 통해 뜨거운 물이 이동하는 것처럼 말이죠.
4444

45-
그런데 커피 머신은 보호 커버에 둘러싸여 있기 때문에 보호 커버를 벗기지 않고는 커피머신 외부에서 내부로 접근할 수 없습니다. 밖에선 세부 요소를 알 수 없고, 접근도 불가능합니다. 내부 인터페이스의 기능은 외부 인터페이스를 통해야만 사용할 수 있습니다.
45+
그런데 커피 머신은 보호 커버에 둘러싸여 있기 때문에 보호 커버를 벗기지 않고는 커피 머신 외부에서 내부로 접근할 수 없습니다. 밖에선 세부 요소를 알 수 없고, 접근도 불가능합니다. 내부 인터페이스의 기능은 외부 인터페이스를 통해야만 사용할 수 있습니다.
4646

4747
이런 특징 때문에 외부 인터페이스만 알아도 객체를 가지고 무언가를 할 수 있습니다. 객체 안이 어떻게 동작하는지 알지 못해도 괜찮다는 점은 큰 장점으로 작용합니다.
4848

@@ -96,13 +96,9 @@ class CoffeeMachine {
9696
_waterAmount = 0;
9797

9898
set waterAmount(value) {
99-
<<<<<<< HEAD
100-
if (value < 0) throw new Error("물의 양은 음수가 될 수 없습니다.");
101-
=======
10299
if (value < 0) {
103100
value = 0;
104101
}
105-
>>>>>>> upstream/master
106102
this._waterAmount = value;
107103
}
108104

@@ -119,19 +115,11 @@ class CoffeeMachine {
119115
// 커피 머신 생성
120116
let coffeeMachine = new CoffeeMachine(100);
121117

122-
<<<<<<< HEAD
123118
// 물 추가
124-
coffeeMachine.waterAmount = -10; // Error: 물의 양은 음수가 될 수 없습니다.
119+
coffeeMachine.waterAmount = -10; // _waterAmount는 -10이 아닌 0이 됩니다.
125120
```
126121

127-
이제 물의 양을 0 미만으로 설정하면 실패합니다.
128-
=======
129-
// add water
130-
coffeeMachine.waterAmount = -10; // _waterAmount will become 0, not -10
131-
```
132-
133-
Now the access is under control, so setting the water amount below zero becomes impossible.
134-
>>>>>>> upstream/master
122+
이제 접근을 통제할 수 있기 때문에 물의 양을 0 미만으로 설정하는 것은 불가능합니다.
135123

136124
## 읽기 전용 프로퍼티
137125

@@ -173,11 +161,7 @@ class CoffeeMachine {
173161
_waterAmount = 0;
174162
175163
*!*setWaterAmount(value)*/!* {
176-
<<<<<<< HEAD
177-
if (value < 0) throw new Error("물의 양은 음수가 될 수 없습니다.");
178-
=======
179164
if (value < 0) value = 0;
180-
>>>>>>> upstream/master
181165
this._waterAmount = value;
182166
}
183167
@@ -191,7 +175,7 @@ new CoffeeMachine().setWaterAmount(100);
191175
192176
다소 길어보이긴 하지만, 이렇게 함수를 선언하면 다수의 인자를 받을 수 있기 때문에 좀 더 유연합니다(위 예시에선 인자가 하나뿐이긴 하지만요).
193177
194-
반면 get, set 문법을 사용하면 코드가 짧아진다는 장점이 있습니다. 어떤걸 사용해야 한다는 규칙은 없으므로 원하는 방식을 선택해서 사용하세요.
178+
반면 get, set 문법을 사용하면 코드가 짧아진다는 장점이 있습니다. 어떤 걸 사용해야 한다는 규칙은 없으므로 원하는 방식을 선택해서 사용하세요.
195179
````
196180

197181
```smart header="protected 필드는 상속됩니다."
@@ -208,11 +192,7 @@ private 프로퍼티와 메서드는 제안(proposal) 목록에 등재된 문법
208192

209193
private 프로퍼티와 메서드는 `#`으로 시작합니다. `#`이 붙으면 클래스 안에서만 접근할 수 있습니다.
210194

211-
<<<<<<< HEAD
212-
물 용량 한도를 나타내는 private 프로퍼티 `#waterLimit`과 남아있는 물의 양을 확인해주는 private 메서드 `#checkWater`를 구현해봅시다.
213-
=======
214-
For instance, here's a private `#waterLimit` property and the water-checking private method `#fixWaterAmount`:
215-
>>>>>>> upstream/master
195+
예를 들어, 물 용량 한도를 나타내는 private 프로퍼티 `#waterLimit`과 물의 양을 보정해주는 private 메서드 `#fixWaterAmount`가 있습니다.
216196

217197
```js run
218198
class CoffeeMachine {
@@ -221,15 +201,9 @@ class CoffeeMachine {
221201
*/!*
222202

223203
*!*
224-
<<<<<<< HEAD
225-
#checkWater(value) {
226-
if (value < 0) throw new Error("물의 양은 음수가 될 수 없습니다.");
227-
if (value > this.#waterLimit) throw new Error("물이 용량을 초과합니다.");
228-
=======
229204
#fixWaterAmount(value) {
230205
if (value < 0) return 0;
231206
if (value > this.#waterLimit) return this.#waterLimit;
232-
>>>>>>> upstream/master
233207
}
234208
*/!*
235209

@@ -242,13 +216,8 @@ class CoffeeMachine {
242216
let coffeeMachine = new CoffeeMachine();
243217

244218
*!*
245-
<<<<<<< HEAD
246-
// 클래스 외부에서 private에 접근할 수 없음
247-
coffeeMachine.#checkWater(); // Error
248-
=======
249-
// can't access privates from outside of the class
219+
// 클래스 외부에서 private에 접근할 수 없습니다.
250220
coffeeMachine.#fixWaterAmount(123); // Error
251-
>>>>>>> upstream/master
252221
coffeeMachine.#waterLimit = 1000; // Error
253222
*/!*
254223
```
@@ -269,11 +238,7 @@ class CoffeeMachine {
269238
}
270239

271240
set waterAmount(value) {
272-
<<<<<<< HEAD
273-
if (value < 0) throw new Error("물의 양은 음수가 될 수 없습니다.");
274-
=======
275241
if (value < 0) value = 0;
276-
>>>>>>> upstream/master
277242
this.#waterAmount = value;
278243
}
279244
}
@@ -322,12 +287,12 @@ class User {
322287

323288
객체 지향 프로그래밍에선 내부 인터페이스와 외부 인터페이스를 구분하는 것을 [캡슐화(encapsulation)]라는 용어를 사용해 설명합니다.
324289

325-
캡슐화는 이점은 다음과 같습니다.
290+
캡슐화의 이점은 다음과 같습니다.
326291

327292
사용자가 자신의 발등을 찍지 않도록 보호
328-
: 커피 머신를 함께 사용하는 개발팀이 있다고 상상해봅시다. "Best CoffeeMachine"이라는 회사에서 만든 이 커피 머신은 현재 잘 작동하고 있지만, 보호 커버가 없어서 내부 인터페이스가 노출되어있는 상황입니다.
293+
: 커피 머신을 함께 사용하는 개발팀이 있다고 상상해봅시다. "Best CoffeeMachine"이라는 회사에서 만든 이 커피 머신은 현재 잘 작동하고 있지만, 보호 커버가 없어서 내부 인터페이스가 노출되어 있는 상황입니다.
329294

330-
교양있는 팀원들은 모두 설계 의도에 맞게 커피 머신을 사용합니다. 그런데 어느 날 John이라는 개발자가 자신의 능력을 과신하며 커피 머신 내부를 살짝 만지게 됩니다. 이틀 후, 커피 머신은 고장이 나버렸죠.
295+
교양 있는 팀원들은 모두 설계 의도에 맞게 커피 머신을 사용합니다. 그런데 어느 날 John이라는 개발자가 자신의 능력을 과신하며 커피 머신 내부를 살짝 만지게 됩니다. 이틀 후, 커피 머신은 고장이 나버렸죠.
331296

332297
커피 머신이 고장 난 건 John의 잘못이라기보다는, 보호 커버를 없애고 John이 마음대로 조작하도록 내버려 둔 사람의 잘못입니다.
333298

0 commit comments

Comments
 (0)