forked from depromeet/effective-java-study
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'depromeet:main' into main
- Loading branch information
Showing
15 changed files
with
1,277 additions
and
0 deletions.
There are no files selected for viewing
63 changes: 63 additions & 0 deletions
63
Ch04/item19/์์์ ๊ณ ๋ คํด ์ค๊ณํ๊ณ ๋ฌธ์ํ ํ๋ผ, ๊ทธ๋ฌ์ง ์์๋ค๋ฉด ์์์ ๊ธ์งํ๋ผ.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
# item19.์์์ ๊ณ ๋ คํด ์ค๊ณํ๊ณ ๋ฌธ์ํ ํ๋ผ, ๊ทธ๋ฌ์ง ์์๋ค๋ฉด ์์์ ๊ธ์งํ๋ผ | ||
|
||
### ์์์ ๊ณ ๋ คํ ์ค๊ณ์ ๋ฌธ์ํ | ||
์์์ฉ ํด๋์ค๋ | ||
- ์ฌ์ ์ ํ ์ ์๋ ๋ฉ์๋๋ค์ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์ด์ฉํ๋์ง(์๊ธฐ์ฌ์ฉ) ๋ฌธ์๋ก ๋จ๊ฒจ์ผ ํ๋ค. | ||
|
||
- ์ฌ์ ์ ๊ฐ๋ฅ = public ๊ณผ protected ๋ฉ์๋ ์ค final ์ด ์๋ ๋ชจ๋ ๋ฉ์๋ | ||
### Implementation Requirements | ||
API ๋ฌธ์์ ๋ฉ์๋ ์ค๋ช ๋์์ Implementation Requirements ๋ก ์์ํ๋ ์ ์ ์ข ์ข ๋ณผ ์ ์๋ค. | ||
|
||
- ๋ฉ์๋์ ๋ด๋ถ ๋์ ๋ฐฉ์์ ์ค๋ช ํ๋ ๊ณณ | ||
- @implSpec ํ๊ทธ โ javadoc ๋๊ตฌ๊ฐ ์์ฑํด์ค | ||
- ํด๋์ค๋ฅผ ์์ ํ๊ฒ ์์ํ ์ ์๋๋ก ๋ด๋ถ ๊ตฌํ ๋ฐฉ์์ ์ค๋ช ํด์ผ ํ๋ค. | ||
|
||
### protected ๋ก ๋ ธ์ถํ ๋ฉ์๋์ ๊ฒฐ์ | ||
- ์๋ ๊ฐ๋ฅํ ์ ์ด์ผ ํ๋ค. | ||
- 3๊ฐ ์ ๋ ์ค์ ํ์ ํด๋์ค๋ฅผ ๋ง๋ค์ด ๋ณด๋ ๊ฒ์ด ์ ์ผํ๋ค. | ||
- ์ 3 ์์ ์์ฑ์ผ๋ก๋ ๊ฒ์ฆํด์ผ ํ๋ค. | ||
- ๊ผญ ํ์ํ protected ๋ฉค๋ฒ๋ฅผ ๋์ณค๋ค๋ฉด ํ์ ํด๋์ค๋ฅผ ์์ฑํ ๋ ๊ทธ ๋น์๋ฆฌ๊ฐ ํ์ฐํ ๋๋ฌ๋๋ค. | ||
- ํ์ ํด๋์ค๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค ๋๊น์ง ์ ํ ์ฐ์ด์ง ์๋ protected ๋ฉค๋ฒ๋ private ์ด์ด์ผ ํ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค. | ||
- ๋๋ฌด ์ ๊ฒ ๋ ธ์ถํด์ ์์์ผ๋ก ์ป๋ ์ด์ ๋ง์ ์์ ์ง ์๋๋ก ์ฃผ์ ํ๋ค | ||
|
||
### ์์์ฉ ํด๋์ค์ ์์ฑ์๋ ์ง/๊ฐ์ ์ ์ผ๋ก ์ฌ์ ์ ๊ฐ๋ฅ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์๋๋ค. | ||
private, final, static ๋ฉ์๋๋ ์ฌ์ ์๊ฐ ๋ถ๊ฐ๋ฅํ๋ ์์ฑ์์์ ์์ฌํ๊ณ ํธ์ถํด๋ ๋๋ค. | ||
|
||
- ์์ ํด๋์ค์ ์์ฑ์๊ฐ ํ์ ํด๋์ค์ ์์ฑ์๋ณด๋ค ๋จผ์ ์คํ๋๋ค. | ||
- ํ์ ํด๋์ค์์ ์ฌ์ ์ํ ๋ฉ์๋๊ฐ, ํ์ ํด๋์ค์ ์์ฑ์์์ ์ด๊ธฐํ ํ๋ ๊ฐ์ ์์กด โ ์ค๋์ | ||
```java | ||
|
||
public class Super { | ||
// ์๋ชป๋ ์ - ์์ฑ์๊ฐ ์ฌ์ ์ ๊ฐ๋ฅ ๋ฉ์๋๋ฅผ ํธ์ถํจ. | ||
public Super() { | ||
overrideMe(); | ||
} | ||
public void overrideMe() { } | ||
} | ||
|
||
public final class Sub extends Super { | ||
// ์ด๊ธฐํ ๋์ง ์์ final ํ๋, ์์ฑ์์์ ์ด๊ธฐํ ํ๋ค. | ||
private final Instant instant; | ||
|
||
Sub() { | ||
instant = Instant.now(); | ||
} | ||
// ์ฌ์ ์ ๊ฐ๋ฅ ๋ฉ์๋, ์์ ํด๋์ค์ ์์ฑ์๊ฐ ํธ์ถํ๋ค. | ||
@Override public void overrideMe() { | ||
System.out.println(instant); // null ์ถ๋ ฅ | ||
} | ||
|
||
public static void main(String[] args) { | ||
Sub sub = new Sub(); | ||
sub.overrideMe(); | ||
} | ||
} | ||
``` | ||
System.out.println(instant); ์ด ์คํ ๋ ๋, NullPointerException ์ด ๋ฐ์ ํ์ง๋ง println ์ด null ์ ๋ ฅ๋ ๋ฐ์ ๋ค์ด๊ธฐ ๋๋ฌธ์ ์๋ฌ๋ฅผ ๋์ง์ง ์์๋ค. | ||
|
||
### ์์์ ๊ธ์งํ๋ ๋ฐฉ๋ฒ | ||
1. final ํด๋์ค ์ ์ธ | ||
2. ๋ชจ๋ ์์ฑ์๋ฅผ private ์ด๋ package-private ์ผ๋ก ์ ์ธ, public ์ ์ ํฉํฐ๋ฆฌ | ||
3. ๋ํผ ํด๋์ค ํจํด | ||
|
||
Set, List, Map ๊ฐ์ด ํต์ฌ๊ธฐ๋ฅ์ ์ ์ํ ์ธํฐํ์ด์ค๊ฐ ์๊ณ , ํด๋์ค๊ฐ ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค๋ฉด ์์์ ๊ธ์งํด๋ ๊ฐ๋ฐํ๋ ๋ฐ ์๋ฌด๋ฐ ์ด๋ ค์์ด ์์ ๊ฒ์ด๋ค. |
101 changes: 101 additions & 0 deletions
101
Ch04/item23/ํ๊ทธ_๋ฌ๋ฆฐ_ํด๋์ค๋ณด๋ค๋_ํด๋์ค_๊ณ์ธต๊ตฌ์กฐ๋ฅผ_ํ์ฉํ๋ผ.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
### โ๏ธ ํ๊ทธ ๋ฌ๋ฆฐ ํด๋์ค | ||
ํ๊ทธ ๋ฌ๋ฆฐ ํด๋์ค๋, **ํ๋์ ํด๋์ค๊ฐ ๋ ๊ฐ์ง ์ด์์ ์๋ฏธ๋ฅผ ํํ** ๊ฐ๋ฅํ ๋, ๊ทธ์ค ํ์ฌ ํํํ๋ ์๋ฏธ๋ฅผ ํ๊ทธ ๊ฐ์ผ๋ก ์๋ ค์ฃผ๋ ํด๋์ค์ด๋ค. ์๋ ์์๋ฅผ ๋ณด์. | ||
|
||
|
||
```java | ||
class Figure { | ||
enum Shape { RECTANGLE, CIRCLE }; // TAG | ||
|
||
// ํ๊ทธ ํ๋ - ํ์ฌ ๋ชจ์์ ๋ํ๋ธ๋ค. | ||
final Shape shape; | ||
|
||
// ๋ค์ ํ๋๋ค์ ๋ชจ์์ด ์ฌ๊ฐํ(RECTANGLE)์ผ ๋๋ง ์ฐ์ธ๋ค. | ||
double length; | ||
double width; | ||
|
||
// ๋ค์ ํ๋๋ ๋ชจ์์ด ์(CIRCLE)์ผ ๋๋ง ์ฐ์ธ๋ค. | ||
double radius; | ||
|
||
// ์์ฉ ์์ฑ์ | ||
Figure(double radius) { | ||
shape = Shape.CIRCLE; | ||
this.radius = radius; | ||
} | ||
|
||
// ์ฌ๊ฐํ์ฉ ์์ฑ์ | ||
Figure(double length, double width) { | ||
shape = Shape.RECTANGLE; | ||
this.length = length; | ||
this.width = width; | ||
} | ||
|
||
double area() { | ||
switch(shape) { | ||
case RECTANGLE: | ||
return length * width; | ||
case CIRCLE: | ||
return Math.PI * (radius * radius); | ||
default: | ||
throw new AssertionError(shape); | ||
} | ||
} | ||
} | ||
``` | ||
|
||
#### ํ๊ทธ ๋ฌ๋ฆฐ ํด๋์ค ๋จ์ | ||
|
||
1. ์ด๊ฑฐ ํ์ ์ ์ธ, ํ๊ทธ ํ๋, `switch` ๋ฌธ ๋ฑ ์ธ๋ฐ์๋ ์ฝ๋๋ก ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค. | ||
2. ๋ค๋ฅธ ์๋ฏธ๋ฅผ ์ํ ์ฝ๋๋ ํด๋นํ์ง ์๋๋ฐ ํญ์ ์กด์ฌํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ๋จน๋๋ค. | ||
3. ํ๋๋ค์ ๋ถ๋ณ์ ์ํด `final` ๋ก ์ ์ธํ๋ ค๋ฉด ํด๋น ์๋ฏธ์ ์ฐ์ด์ง ์๋ ํ๋๋ค๊น์ง ์์ฑ์์์ ์ด๊ธฐํํด์ผํ๋ค. | ||
4. ๋ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด `switch` ๋ฌธ ์ฝ๋๋ฅผ ์์ ํด์ผ ํ๋ค. | ||
5. ์ธ์คํด์ค์ ํ์ ๋ง์ผ๋ก๋ ํ์ฌ ๋ํ๋ด๋ ์๋ฏธ๋ฅผ ์ ๊ธธ์ด ์ ํ ์๋ค. | ||
|
||
> ์ฆ, ํ๊ทธ ๋ฌ๋ฆฐ ํด๋์ค๋ ์ฅํฉํ๊ณ , ์ค๋ฅ๋ฅผ ๋ด๊ธฐ ์ฝ๊ณ , ๋นํจ์จ์ ์ด๋ค. | ||
### โ๏ธ ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ | ||
์ด๋ฌํ ๋ฌธ์ ๋ฅผ, ํด๋์ค ๊ณ์ธต๊ตฌ์กฐ๋ฅผ ํ์ฉํ๋ ์๋ธํ์ดํ (subtyping)์ ํตํด ํด๊ฒฐํ ์ ์๋ค. ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ๋, **์ถ์ ํด๋์ค์ ์ถ์ ๋ฉ์๋**๋ฅผ ํตํด **ํ์ ํ๋๋ก ๋ค์ํ ์๋ฏธ์ ๊ฐ์ฒด๋ฅผ ํํ**ํ ์ ์๊ฒ ํด์ค๋ค. | ||
|
||
|
||
1. ๊ณ์ธต ๊ตฌ์กฐ์ ๋ฃจํธ๊ฐ ๋ ์ถ์ ํด๋์ค ์ ์ํ๋ค. | ||
```java | ||
abstract class Figure { | ||
abstract double area(); | ||
} | ||
``` | ||
+ ํ๊ทธ ๊ฐ์ ๋ฐ๋ผ **๋์์ด ๋ฌ๋ผ์ง๋ ๋ฉ์๋**๋ค์ ๋ฃจํธ ํด๋์ค์ **์ถ์ ๋ฉ์๋**๋ก ์ ์ธ | ||
+ ํ๊ทธ ๊ฐ์ ์๊ด์์ด **๋์์ด ์ผ์ ํ ๋ฉ์๋์ ๊ณตํต ๋ฉ์๋**๋ค์ ๋ฃจํธ ํด๋์ค์ **์ผ๋ฐ ๋ฉ์๋**๋ก ์ ์ธ | ||
|
||
|
||
2. ๋ฃจํธ ํด๋์ค๋ฅผ ํ์ฅํ ๊ตฌ์ฒด ํด๋์ค๋ฅผ ์๋ฏธ๋ณ๋ก ํ๋์ฉ ์ง์ ํ๋ค. | ||
|
||
```java | ||
class Circle extends Figure { | ||
final double radius; | ||
|
||
Circle(double radius) { this.radius = radius; } | ||
|
||
@Override double area() { return Math.PI * (radius * radius); } | ||
} | ||
``` | ||
|
||
```java | ||
class Rectangle extends Figure { | ||
final double length; | ||
final double width; | ||
|
||
Rectangle(double length, double width) { | ||
this.length = length; | ||
this.width = width; | ||
} | ||
@Override double area() { return length * width; } | ||
} | ||
``` | ||
+ ๋ฃจํธ ํด๋์ค๊ฐ ์ ์ํ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ ์๋ฏธ์ ๋ง๊ฒ ๊ตฌํ | ||
|
||
#### ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ ์ฅ์ | ||
|
||
1. ๊ฐ ์๋ฏธ๋ฅผ ๋ ๋ฆฝ๋ ํด๋์ค์ ๋ด์ ๊ด๋ จ ์๋ ๋ฐ์ดํฐ ํ๋๋ค์ ์ ๊ฑฐํ๋ค. | ||
2. ๋จ์ ์๋ ํ๋๋ค์ ๋ชจ๋ `final` ๋ก ์ ์ธํด ๋ถ๋ณ์ ๋ณด์ฅํ ์ ์๋ค. | ||
3. ๊ฐ ํด๋์ค์ ์์ฑ์๊ฐ ๋ชจ๋ ํ๋๋ฅผ ๋จ๊น์์ด ์ด๊ธฐํํ๊ณ ์ถ์ ๋ฉ์๋๋ฅผ ๋ชจ๋ ๊ตฌํํ๋์ง ์ปดํ์ผ๋ฌ ๋จ์์ ํ์ธํ ์ ์๋ค. | ||
3. ๋ฃจํธ ํด๋์ค์ ์ฝ๋๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ์ฅํ ์ ์๋ค. | ||
|
160 changes: 160 additions & 0 deletions
160
Ch04/item24/๋ฉค๋ฒ ํด๋์ค๋ ๋๋๋ก static ํด๋์ค๋ก ๋ง๋ค๋ผ.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
# item24.๋ฉค๋ฒ ํด๋์ค๋ ๋๋๋ก static ํด๋์ค๋ก ๋ง๋ค๋ผ | ||
|
||
### ์ค์ฒฉ ํด๋์ค (Nested Class) : ์์ ์ ๋๋ฌ์ผ ๋ฐ๊นฅ ํด๋์ค์์๋ง ์ฐ์ด๋ ํด๋์ค | ||
- ์ ์ ๋ฉค๋ฒ ํด๋์ค (static member class) | ||
- ๋น์ ์ ๋ฉค๋ฒ ํด๋์ค | ||
- ์ต๋ช ํด๋์ค | ||
- ์ง์ญ ํด๋์ค | ||
|
||
### ์ ์ ๋ฉค๋ฒ ํด๋์ค | ||
- ํด๋์ค ๋ด๋ถ์ static ํด๋์ค | ||
> ๋ฐ๊นฅ ํด๋์ค์ private ๋ฉค๋ฒ์๋ ๋ฐ๋ก ์ ๊ทผ ๊ฐ๋ฅ. ์ด์ธ์๋ ์ผ๋ฐ ํด๋์ค์ ๊ฐ๋ค. | ||
|
||
- private ์ ์ ๋ฉค๋ฒ ํด๋์ค : ๋ฐ๊นฅ ํด๋์ค์ ๊ตฌ์ฑ ์์๋ฅผ ๋ํ๋ผ ๋ | ||
```java | ||
public class Person { | ||
private String firstName; | ||
private String lastName; | ||
|
||
private static class Computer { // private, public | ||
private String name; | ||
private int price; | ||
|
||
public Computer(String name, int price) { | ||
this.name = name; | ||
this.price = price; | ||
} | ||
|
||
public int getPrice() { | ||
return price; | ||
} | ||
} | ||
} | ||
``` | ||
|
||
- public ์ ์ ๋ฉค๋ฒ ํด๋์ค : ๋ฐ๊นฅ ํด๋์ค์ ํจ๊ป ์ฐ์ผ ๋๋ง ์ ์ฉํ public ๋์ฐ๋ฏธ ํด๋์ค | ||
```java | ||
public class Calculator { | ||
public enum Operation1 { | ||
PLUS(Integer::sum), | ||
MINUS((x, y) -> x - y); | ||
|
||
private BiFunction<Integer, Integer, Integer> calculate; | ||
|
||
Operation1(BiFunction<Integer, Integer, Integer> calculate) { | ||
this.calculate = calculate; | ||
} | ||
|
||
public BiFunction<Integer, Integer, Integer> getFunction() { | ||
return calculate; | ||
} | ||
} | ||
|
||
|
||
public int Sum(int x, int y) { | ||
return Operation1.PLUS.getFunction().apply(x, y); | ||
} | ||
} | ||
``` | ||
|
||
```java | ||
public static void main(String[] args) { | ||
Calculator c = new Calculator(); | ||
System.out.println(c.Sum(1, 2)); // 3 | ||
|
||
System.out.println(Calculator.Operation1.PLUS); // PLUS | ||
} | ||
``` | ||
|
||
<br> | ||
<br> | ||
|
||
### ๋น์ ์ ๋ฉค๋ฒ ํด๋์ค | ||
- ๋น์ ์ ๋ฉค๋ฒ ํด๋์ค์ ์ธ์คํด์ค๋ ๋ฐ๊นฅ ํด๋์ค์ ์ธ์คํด์ค์ ์๋ฌต์ ์ผ๋ก ์ฐ๊ฒฐ | ||
- ๋ฐ๋ผ์, ๋น์ ์ ๋ฉค๋ฒ ํด๋์ค์ ์ธ์คํด์ค ๋ฉ์๋์์ ์ ๊ทํ๋ this ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๊นฅ ์ธ์คํด์ค์ ์ฐธ์กฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์. | ||
> ์ ๊ทํ๋ this == ํด๋์ค๋ช .this | ||
- ๋น ์ ์ ๋ฉค๋ฒ ํด๋์ค๋ ์ธ์คํด์ค๋ฅผ ๊ฐ์ธ์ ๋ง์น ๋ค๋ฅธ ํด๋์ค์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ ๋ทฐ์ธ ์ด๋ํฐ์์ ์ฃผ๋ก ์ฐ์ธ๋ค. | ||
```java | ||
public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable { | ||
// View class support | ||
class Values extends AbstractCollection<V> { | ||
public Iterator<V> iterator() { | ||
return new ValueIterator(getFirstEntry()); | ||
} | ||
|
||
public int size() { | ||
return TreeMap.this.size(); | ||
} | ||
|
||
public boolean contains(Object o) { | ||
return TreeMap.this.containsValue(o); | ||
} | ||
|
||
public boolean remove(Object o) { | ||
for (Entry<K,V> e = getFirstEntry(); e != null; e = successor(e)) { | ||
if (valEquals(e.getValue(), o)) { | ||
deleteEntry(e); | ||
return true; | ||
} | ||
} | ||
return false; | ||
} | ||
|
||
public void clear() { | ||
TreeMap.this.clear(); | ||
} | ||
|
||
public Spliterator<V> spliterator() { | ||
return new ValueSpliterator<>(TreeMap.this, null, null, 0, -1, 0); | ||
} | ||
} | ||
|
||
|
||
class EntrySet extends AbstractSet<Map.Entry<K,V>> { | ||
public Iterator<Map.Entry<K,V>> iterator() { | ||
return new EntryIterator(getFirstEntry()); | ||
} | ||
|
||
public boolean contains(Object o) { | ||
if (!(o instanceof Map.Entry)) | ||
return false; | ||
Map.Entry<?,?> entry = (Map.Entry<?,?>) o; | ||
Object value = entry.getValue(); | ||
Entry<K,V> p = getEntry(entry.getKey()); | ||
return p != null && valEquals(p.getValue(), value); | ||
} | ||
|
||
public boolean remove(Object o) { | ||
if (!(o instanceof Map.Entry)) | ||
return false; | ||
Map.Entry<?,?> entry = (Map.Entry<?,?>) o; | ||
Object value = entry.getValue(); | ||
Entry<K,V> p = getEntry(entry.getKey()); | ||
if (p != null && valEquals(p.getValue(), value)) { | ||
deleteEntry(p); | ||
return true; | ||
} | ||
return false; | ||
} | ||
} | ||
} | ||
``` | ||
- TreeMap.this, getFirstEntry() ๋ ๋ฐ๊นฅ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์์ด์ผ ์ธ ์ ์๋ค. | ||
- ๋ฐ๋ผ์ ๋น์ ์ ๋ฉค๋ฒ ํด๋์ค์ ์ธ์คํด์ค์์ ๊ด๊ณ์ ๋ณด๊ฐ ์ ์ฅ๋์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ , ์์ฑ ์๊ฐ๋ ๋ ๊ฑธ๋ฆฐ๋ค. | ||
- ๋ํ ๋ฐ๊นฅ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ GC ๊ฐ ํ์ํ์ง ๋ชปํ๋ค. | ||
```java | ||
public Set<Map.Entry<K,V>> entrySet() { | ||
EntrySet es = entrySet; | ||
return (es != null) ? es : (entrySet = new EntrySet()); | ||
} | ||
``` | ||
์์ ์ฝ๋์์ ๋น์ ์ ๋ฉค๋ฒ ํด๋์ค EntrySet์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ์๋ฌต์ ์ผ๋ก ๋ฐ๊นฅ ํด๋์ค์ ๋ฉค๋ฒ ํด๋์ค๊ฐ์ ์ฐ๊ฒฐ๋๋ ๊ด๊ณ๊ฐ ๋น์ ์ ๋ฉค๋ฒ ํด๋์ค์ ์ธ์คํด์ค ์์ ๋ง๋ค์ด์ง๊ณ , | ||
Map ๊ฐ์ฒด๊ฐ ์ฌ์ฉํ๋ ๊ณณ์ด ์๋๋ผ๋ ์ด ๊ด๊ณ๋๋ฌธ์ GC ๊ฐ ์ผ์ด๋์ง ๋ชปํ๋ค. | ||
|
||
<br> | ||
|
||
### ๊ฒฐ๋ก | ||
- ๊ฐ๋ ์ ์ค์ฒฉ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ฐ๊นฅ ์ธ์คํด์ค์ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ ์ ์๋ค๋ฉด, ์ ์ ๋ฉค๋ฒ ํด๋์ค๋ก ๋ง๋ค์ด์ผ ํ๋ค. | ||
- ๋ฉค๋ฒ ํด๋์ค์์ ๋ฐ๊นฅ ์ธ์คํด์ค์ ์ ๊ทผํ ์ผ์ด ์๋ค๋ฉด ๋ฌด์กฐ๊ฑด static ์ ๋ถ์ฌ์ ์ ์ ๋ฉค๋ฒ ํด๋์ค๋ก ๋ง๋ค์. |
Oops, something went wrong.