π λ€μ΄κ°λ©°
ν리μ½μ€ 3μ£Όμ°¨ κ³Όμ μμ "Java Enumμ μ μ©νμ¬ νλ‘κ·Έλ¨μ ꡬννλ€."λΌλ νλ‘κ·Έλλ° μꡬ μ¬νμ΄ μμλ€. μ΄μ μλ Enumμ μ¬μ©ν΄ λ³Έ μ μ μμ§λ§, μ΄λ² κ³Όμ λ₯Ό μ§ννλ©΄μ Enumμ μ νν μ΄ν΄νμ§ λͺ»ν μνλ‘ μ¬μ©ν΄ μλ€λ μκ°μ΄ λ€μλ€. λ¨μν μꡬμ¬ν λλ¬Έμ μ¬μ©ν기보λ€, μ λλ‘ μκ³ νμ©νμλ λ§μμΌλ‘ Enumμ λ€μ 곡λΆνλ€. Enumμ λν΄ μ μ 리λ μΈνλμ κΈμ μ°Έκ³ νμ¬ κ³Όμ μ μ μ©ν΄ 보μκ³ , μ΄λ² κΈμμλ ν΄λΉ λΆλΆμ μ 리νκ³ κ³Όμ λ₯Ό μ§ννλ©΄μ λλ Enumμ μ₯μ μ μ 리νλ €κ³ νλ€.
β μ΄μ μ μμ κ΄λ¦¬ λ°©μ
βΆ static final μμ
final ν€μλλ₯Ό μ¬μ©νμ¬ νλ μ½λ©λ κ°μ μμλ‘ μΆμΆνλ λ°©μμ΄λ€.
π½ 2μ£Όμ°¨ κ³Όμ (μλμ°¨ κ²½μ£Ό): static final μμ
public class Car {
public static final int MOVE_THRESHOLD = 4;
public static final int RANDOM_MIN = 0;
public static final int RANDOM_MAX = 9;
public static final int MOVE_INCREMENT = 1;
...
public void moveConditionally() {
int random = Randoms.pickNumberInRange(RANDOM_MIN, RANDOM_MAX);
if (random >= MOVE_THRESHOLD) {
increaseDistance();
}
}
private void increaseDistance() {
currentDistance += MOVE_INCREMENT;
}
}
π½ μ₯μ
- finalλ‘ μ μΈλ λ³μλ ν λ² μ΄κΈ°νλλ©΄ λ³κ²½ν μ μλ€.
- staticμ ν¨κ» μ¬μ©νλ©΄ λ©λͺ¨λ¦¬μ ν λ²λ§ ν λΉλμ΄ λ©λͺ¨λ¦¬ ν¨μ¨μ΄ λμμ§λ€.
π½ λ¨μ
- μ κ·Ό μ μ΄μ μ€μ μΌλ‘ μΈν΄ κ°λ μ±μ΄ λ¨μ΄μ§ μ μλ€.
- λ€μν μ’ λ₯μ μμλ₯Ό ν κ³³μμ κ΄λ¦¬νκΈ° μ΄λ ΅κ³ , μ¬λ¬ μμλ₯Ό νλμ ν΄λμ€μ λͺ¨μΌλ©΄ μ½λκ° λ³΅μ‘ν΄μ§ μ μλ€.
βΆ μΈν°νμ΄μ€ μμ
μμλ₯Ό κ΄λ¦¬νλ λ λ€λ₯Έ λ°©λ²μΌλ‘ μμλ§ ν¬ν¨λ μΈν°νμ΄μ€λ₯Ό λ§λλ λ°©μμ΄λ€. μΈν°νμ΄μ€λ λ³λ μ μ΄μ μμ΄ μμλ§μ μ μν μ μλ€.
π½ 2μ£Όμ°¨ κ³Όμ (μλμ°¨ κ²½μ£Ό): μΈν°νμ΄μ€ μμ
public interface CarConstants {
int MOVE_THRESHOLD = 4;
int RANDOM_MIN = 0;
int RANDOM_MAX = 9;
int MOVE_INCREMENT = 1;
}
π½ μ₯μ
- ν΄λμ€μμ implements CarConstantsλ₯Ό ν΅ν΄ μμλ₯Ό μ§μ μ¬μ©ν μ μμ΄ νΈλ¦¬νλ€.
- μμλ₯Ό λ³λμ νμΌμ λΆλ¦¬ν¨μΌλ‘μ¨, ν΄λμ€ νμΌμ κΉλνκ² μ μ§ν μ μλ€.
π½ λ¨μ
- μΈν°νμ΄μ€κ° μμ κ΄λ¦¬ λͺ©μ μΌλ‘λ§ μ¬μ©λ κ²½μ°, μ΄λ μμ μΈν°νμ΄μ€ μν°ν¨ν΄μ ν΄λΉλ μ μλ€. μΈν°νμ΄μ€λ μ£Όλ‘ ν΄λμ€μ νμλ₯Ό μ μνκΈ° μν μ©λμ΄κΈ° λλ¬Έμ, μλμ λ§μ§ μλ λ°©μμΌ μ μλ€.
- μμλ₯Ό μ¬μ©νλ λͺ¨λ ν΄λμ€μμ implementsλ₯Ό ν΅ν΄ μμ μΈν°νμ΄μ€λ₯Ό μμλ°μμΌ νλ―λ‘, μ μ°μ±μ΄ λ¨μ΄μ§ μ μλ€.
βΆ μ체 ν΄λμ€ μμ
μμλ₯Ό λ³λμ ν΄λμ€λ‘ λΆλ¦¬νμ¬ κ΄λ¦¬νλ λ°©μμ΄λ€. κΈ°λ₯λ³λ‘ μμ ν΄λμ€λ₯Ό λ§λ€μ΄ κ·Έλ£Ήννλ©°, μ£Όλ‘ Utility Class ννλ‘ μ¬μ©λλ€. μΈμ€ν΄μ€ μμ±μ λ°©μ§νκΈ° μν΄ private μμ±μλ₯Ό λκ³ , λͺ¨λ μμλ₯Ό public static finalλ‘ μ μΈνλ€.
π½ 2μ£Όμ°¨ κ³Όμ (μλμ°¨ κ²½μ£Ό): μ체 ν΄λμ€ μμ
public class CarConstants {
public static final int MOVE_THRESHOLD = 4;
public static final int RANDOM_MIN = 0;
public static final int RANDOM_MAX = 9;
public static final int MOVE_INCREMENT = 1;
private CarConstants() {
}
}
π½ μ₯μ
- μμλ₯Ό κΈ°λ₯λ³λ‘ λΆλ¦¬ν΄ κ΄λ¦¬ν μ μμ΄ μ½λκ° κΉλνκ³ κ°λ μ±μ΄ λμμ§λ€.
- κ°μ²΄ μμ± μμ΄ μ κ·Όμ΄ κ°λ₯νμ¬ λ©λͺ¨λ¦¬ μ¬μ©μ΄ ν¨μ¨μ μ΄λ€.
- μμμ λν λͺ¨λνκ° μ©μ΄νμ¬ μ½λ μ μ§λ³΄μκ° μ½λ€.
π½ λ¨μ
- λ¨μΌ κ°λ§ λ΄μ μ μμ΄, 볡ν©μ μΈ μμ κ·Έλ£Ήμ ν¨κ³Όμ μΌλ‘ λνλ΄κΈ° μ΄λ ΅λ€.
β Enumμ κΈ°λ³Έ λ¬Έλ²
βΆ μ μΈ
- enum μ΄λ¦μ ν΄λμ€μ λμΌνκ² μ²« κΈμλ₯Ό λλ¬Έμλ‘ μμνλ€.
- κ΄λ‘μ μΌλ‘ μ΄κ±° μμλ λͺ¨λ λλ¬Έμλ‘ μμ±νλ€.
- μ΄κ±° μμκ° μ¬λ¬ λ¨μ΄λ‘ ꡬμ±λ κ²½μ°, λ¨μ΄ μ¬μ΄λ₯Ό λ°μ€(_)λ‘ μ°κ²°νλ€.
π½ 3μ£Όμ°¨ κ³Όμ (λ‘λ): λ‘λ μμλ₯Ό enumμΌλ‘ νμ©
public enum Rank {
FIRST_PLACE,
SECOND_PLACE,
THIRD_PLACE,
FOURTH_PLACE,
FIFTH_PLACE,
LAST_PLACE
}
βΆ λ©μλ μ’ λ₯
λ©μλ | μ€λͺ | λ°ν νμ |
name() | μ΄κ±° κ°μ²΄μ λ¬Έμμ΄μ λ°ν | String |
ordinal() | μ΄κ±° κ°μ²΄μ μλ²(0λΆν° μμ)μ λ°ν | int |
valueOf(String name) | λ¬Έμμ΄μ μ λ ₯λ°μμ μΌμΉνλ μ΄κ±° κ°μ²΄λ₯Ό λ°ν | enum |
values() | λͺ¨λ μ΄κ±° κ°μ²΄λ€μ λ°°μ΄λ‘ λ°ν | enum[] |
compareTo() | μ΄κ±° κ°μ²΄ κ° μλ² μ°¨μ΄λ₯Ό λΉκ΅νμ¬ λ°ν | int |
equals() | μ΄κ±° κ°μ²΄μ λ€λ₯Έ κ°μ²΄λ₯Ό λΉκ΅νμ¬ μΌμΉ μ¬λΆλ₯Ό λ°ν | boolean |
π½ name()
μ΄κ±° κ°μ²΄κ° κ°μ§κ³ μλ λ¬Έμμ΄μ λ°ννλ€.
Rank rank = Rank.SECOND_PLACE;
String rankName = rank.name();
System.out.println(rankName); // SECOND_PLACE
π½ ordinal()
μ΄κ±° κ°μ²΄μ μλ²(0λΆν° μμ)μ λ°ννλ€.
Rank rank = Rank.SECOND_PLACE;
int rankNum = rank.ordinal();
System.out.println(rankNum); // 2
π½ valueOf()
λ¬Έμμ΄μ μ λ ₯λ°μ μΌμΉνλ μ΄κ±° κ°μ²΄λ₯Ό λ°ννλ€.
Rank rank = Rank.valueOf("SECOND_PLACE");
System.out.println(rank); // SECOND_PLCAE
π½ values()
λͺ¨λ μ΄κ±° κ°μ²΄λ€μ λ°°μ΄λ‘ λ°ννλ€.
Rank[] ranks = Rank.values();
System.out.println(Arrays.toString(ranks)); // [FIRST_PLACE, SECOND_PLACE, THIRD_PLACE, FOURTH_PLACE, FIFTH_PLACE, LAST_PLACE]
π½ compareTo()
μ£Όμ΄μ§ μ΄κ±° κ°μ²΄λ₯Ό λΉκ΅ν΄μ μλ² μ°¨μ΄λ₯Ό λ°ννλ€.
- μ΄κ±° κ°μ²΄κ° λ§€κ° λ³μμ μ΄κ±° κ°μ²΄λ³΄λ€ μλ²μ΄ λΉ λ₯΄λ©΄ μμλ₯Ό λ°ννλ€.
- μ΄κ±° κ°μ²΄κ° λ§€κ° λ³μμ μ΄κ±° κ°μ²΄λ³΄λ€ μλ²μ΄ λ¦μΌλ©΄ μμλ₯Ό λ°ννλ€.
Rank firstRank = Rank.FIRST_PLACE;
Rank secondRank = Rank.SECOND_PLACE;
int firstCompare = firstRank.compareTo(secondRank);
System.out.println(firstCompare); // -1
int secondCompare = secondRank.compareTo(firstRank);
System.out.println(secondCompare); // 1
π½ equals()
ν΄λΉ enum μμμ λ€λ₯Έ κ°μ²΄λ₯Ό λΉκ΅νμ¬ boolean ννλ‘ λ°ννλ€.
Rank firstRank = Rank.FIRST_PLACE;
Rank secondRank = Rank.SECOND_PLACE;
boolean isEqual = firstRank.equals(secondRank);
System.out.println(isEqual); // false
β Enum κ³ κΈ λ¬Έλ²
βΆ λ§€ν
enumμ νμ©νλ©΄ νΉμ κ°κ³Ό λ§€νλ μ΄κ±° μμλ₯Ό μΆλ ₯ν μ μλ€. enumμ μμ±μμ λ§€κ°λ³μλ₯Ό μ λ¬ν΄ κ° μ΄κ±° κ°μ²΄μ κ³ μ ν κ°μ λΆμ¬ν μ μμΌλ©°, μ΄λ₯Ό νλμ μ μ₯νλ€. μ΄λ κ² μ μ₯λ νλλ getter λ©μλλ₯Ό ν΅ν΄ μ κ·Όν μ μμ΄, μ΄κ±° κ°μ²΄μ μ°κ΄λ μ 보λ₯Ό κ°μ Έμ¬ μ μλ€.
π½ 3μ£Όμ°¨ κ³Όμ (λ‘λ): Enum λ§€νμ νμ©ν Rank κ°μ²΄
public enum Rank {
FIRST_PLACE(6, false, 2000000000),
SECOND_PLACE(5, true, 30000000),
THIRD_PLACE(5, false, 1500000),
FOURTH_PLACE(4, false, 50000),
FIFTH_PLACE(3, false, 5000),
LAST_PLACE(0, false, 0)
;
// νλ
private final Integer matchCount;
private final boolean requireBonusNumberMatch;
private final Integer prizeAmount;
// μμ±μ
Rank(Integer matchCount, boolean requireBonusNumberMatch, Integer prizeAmount) {
this.matchCount = matchCount;
this.requireBonusNumberMatch = requireBonusNumberMatch;
this.prizeAmount = prizeAmount;
}
// Getter (μΌμΉ κ°μ)
public Integer getMatchCount() {
return matchCount;
}
// Getter (보λμ€ λ²νΈ μΌμΉ μ¬λΆ)
private boolean isRequireBonusNumberMatch() {
return requireBonusNumberMatch;
}
// Getter (μκΈ)
public Integer getPrizeAmount() {
return prizeAmount;
}
...
}
β Enumμ νΉμ§
- κΈ°λ³Έ μλ£ν(primitive)μ΄ μλ μ°Έμ‘°(reference) νμ
μ΄λ€.
- μ°Έμ‘° νμ μ΄λ―λ‘ nullλ μ μ₯μ΄ κ°λ₯νλ€.
- == μ°μ°μ λΉκ΅ μ trueλ₯Ό λ°ννλ€.
- μμμ μ§μνμ§ μλλ€.
- λͺ¨λ enumλ€μ λ΄λΆμ μΌλ‘ java.lang.enum ν΄λμ€λ₯Ό μμλ°κ³ μλ€. μλ°λ λ€μ€ μμμ μ§μνμ§ μκΈ° λλ¬Έμ, λ€λ₯Έ ν΄λμ€λ₯Ό μμλ°μ μ μλ€.
- Enum ν΄λμ€λ Object ν΄λμ€μ λ€μ λ€ κ°μ§ λ©μλλ₯Ό μ€λ²λΌμ΄λ©ν μ μλλ‘ finalλ‘ μ μΈν΄ λ³κ²½νμ§ λͺ»νλλ‘ λ§μλμλ€. μμλ₯Ό κ³ μ νκ² μ μ§νκΈ° μν λͺ©μ μ΄λ€.
λ©μλ | μ€λͺ |
clone() | κ°μ²΄λ₯Ό 볡μ νλ λ©μλ |
finalize() | Garbage Collectionμ΄ λ°μν λ μ²λ¦¬νκΈ° μν λ©μλ |
hashCode() | int νμ μ ν΄μ μ½λ κ°μ λ°ννλ λ©μλ |
equals() | λ κ°μ κ°μ²΄κ° λμΌνμ§ νμΈνλ λ©μλ |
β Enumμ μ₯μ βοΈβοΈβοΈ
π½ κΈ°λ³Έμ μΈ μ₯μ
- μ½λκ° λ¨μν΄μ§κ³ κ°λ μ±μ΄ μ’μμ§λ€.
- IDEμ μ κ·Ήμ μΈ μ§μμ λ°μ μ μλ€. (μλ μμ±, μ€ν κ²μ¦, ν μ€νΈ 리ν©ν λ§ λ±)
- 리ν©ν λ§ μ μμ λ²μκ° μ΅μνλλ€. Enumμ λ΄μ©μ΄ μΆκ°λλλΌλ λ€λ₯Έ μ½λ μμ μ΄ νμνμ§ μλ€.
- νΉμ μ΄κ±°ν κ°λ§μ λ³μμ ν λΉν μ μμ΄, μ»΄νμΌ λ¨κ³μμ νμ μμ μ±μ 보μ₯λ°μ μ μλ€.
- μ΄κ±°ν μμλΏλ§ μλλΌ μμ±μ, λ©μλ, νλλ₯Ό κ°μ§ μ μμ΄ κ°μ²΄μ§ν₯μ μΌλ‘ μ€κ³ν μ μλ€.
μ΄λ¬ν κΈ°λ³Έμ μΈ μ₯μ μΈμλ μ΄λ² κ³Όμ λ₯Ό νλ©° λκΌλ Enumμ ν΅μ¬ μ₯μ μ λ€μκ³Ό κ°λ€.
βΆ μνμ νμλ₯Ό ν κ³³μμ κ΄λ¦¬
μ΄λ² κ³Όμ μμ λ‘λ λΉμ²¨ λ²νΈμ λ§€μΉ νμ, 보λμ€ λ²νΈ μΌμΉ μ¬λΆλ₯Ό ν΅ν΄ κ° λ±μλ₯Ό νλ³νλ λ‘μ§μ΄ νμνλ€. μ΄λ, μμλ§λ€ λ€λ₯Έ λμμ΄ νμνλ€λ©΄ λ³΄ν΅ if-elseλ switchλ¬Έμ ν΅ν΄ κ°κ°μ 쑰건μ λΆκΈ°νμ¬ μ²λ¦¬νλ κ²μ΄ μΌλ°μ μ΄λ€.
π½ 3μ£Όμ°¨ κ³Όμ (λ‘λ): λ³κ²½ μ (if-else λ°©μ)
νμ§λ§, νλ‘κ·Έλλ° μꡬμ¬νμ λ°λ₯΄λ©΄ else λ° switchλ¬Έμ μ¬μ©νμ§ λ§λΌλ μ§μΉ¨μ΄ μμλ€. ν΄λΉ μ§μΉ¨μ΄ μ겨λ μ΄μ λ₯Ό μκ°ν΄λ³΄λ©΄, μ΄λ° μμ μ½λ κ΅¬μ± λ°©μμ κ°(μν)κ³Ό λ©μλ(νμ)μ κ΄κ³λ₯Ό μ΄ν΄νλ λ° μκ°μ΄ κ±Έλ¦°λ€λ λ¬Έμ κ° μλ€. λν, μλ‘μ΄ μ‘°κ±΄μ΄ μΆκ°λ λλ§λ€ λΆνμνκ² λΆκΈ°λ¬Έμ΄ λμ΄λ μ½λμ 볡μ‘μ±μ΄ μ¦κ°ν μ μλ€λ λ¨μ λ μλ€.
public class LottoService {
public Rank evaluateRank(int matchCount, boolean isBonusNumberMatched) {
if (matchCount == 6) {
return Rank.FIRST_PLACE;
} else if (matchCount == 5 && isBonusNumberMatched) {
return Rank.SECOND_PLACE;
} else if (matchCount == 5) {
return Rank.THIRD_PLACE;
} else if (matchCount == 4) {
return Rank.FOURTH_PLACE;
} else if (matchCount == 3) {
return Rank.FIFTH_PLACE;
} else {
return Rank.LAST_PLACE;
}
}
}
π½ 3μ£Όμ°¨ κ³Όμ (λ‘λ): λ³κ²½ ν (enum νμ©)
Enumμ μ¬μ©νμ¬ μν(λ§€μΉ νμ, 보λμ€ λ²νΈ νμ μ¬λΆ, μκΈ)μ νμ(λ±μ νλ³ λ‘μ§)λ₯Ό ν κ³³μ κ²°ν©νμ¬ κ΅¬ννλ€.
public enum Rank {
FIRST_PLACE(6, false, 2000000000),
SECOND_PLACE(5, true, 30000000),
THIRD_PLACE(5, false, 1500000),
FOURTH_PLACE(4, false, 50000),
FIFTH_PLACE(3, false, 5000),
LAST_PLACE(0, false, 0)
;
...
public static Rank getRankByMatch(Integer matchCount, boolean isBonusNumberMatched) {
for (Rank rank : Rank.values()) {
if (isRankMatched(rank, matchCount, isBonusNumberMatched)) {
return rank;
}
}
return LAST_PLACE;
}
private static boolean isRankMatched(Rank rank, Integer matchCount, boolean isBonusNumberMatched) {
if (rank.isRequireBonusNumberMatch()) {
return rank.getMatchCount().equals(matchCount) && isBonusNumberMatched;
}
return rank.getMatchCount().equals(matchCount);
}
}
π½ μ₯μ
- Rank enum λ΄λΆμ μν(νλ)μ νμ(λ©μλ)λ₯Ό ν¨κ» κ΄λ¦¬νλ―λ‘ μ½λμ κ°λ μ±μ΄ ν¬κ² ν₯μλλ€.
- if-elseλ switchλ¬Έμ λ체νμ¬, enum μμλ§λ€ νμν μνμ λ©μλλ₯Ό μμ±ν¨μΌλ‘μ¨ μ€λ³΅λλ λΆκΈ°λ¬Έμ μ κ±°ν μ μλ€.
- Rank enumμ μΆκ°μ μΈ λ‘μ§μ λ£μ΄μΌ ν λ, λ€λ₯Έ ν΄λμ€μ μ½λλ₯Ό 건λλ¦¬μ§ μκ³ enumμλ§ μΆκ°νλ©΄ λμ΄ μ μ§λ³΄μκ° μ¬μμ§λ€.
βΆ Thread-safeμΈ μ±κΈν€ κ°μ²΄
enum μμ²΄κ° μ±κΈν€ ν¨ν΄μ μλμ§λ§, κ° μ΄κ±° μμλ μ±κΈν€ κ°μ²΄λ‘ μ·¨κΈλλ€. enumμ μ μλ κ° μμλ ν λ²λ§ μ΄κΈ°νλκ³ JVMμ΄ μ’ λ£λ λκΉμ§ κ³ μ ν μΈμ€ν΄μ€λ‘ μ μ§λλ€. λ°λΌμ enumμ μ΄κ±°ν μμλ κ³ μ ν μΈμ€ν΄μ€λ‘, μ±κΈν€ ν¨ν΄κ³Ό μ μ¬ν νΉμ§μ μ§λλ©°, νΉν enumμ thread-safeνμ¬ μμ νκ² μ¬μ©ν μ μλ μ₯μ μ΄ μλ€.
π½ 3μ£Όμ°¨ κ³Όμ (λ‘λ): Enum Rank κ°μ²΄
public enum Rank {
FIRST_PLACE(6, false, 2000000000),
SECOND_PLACE(5, true, 30000000),
THIRD_PLACE(5, false, 1500000),
FOURTH_PLACE(4, false, 50000),
FIFTH_PLACE(3, false, 5000),
LAST_PLACE(0, false, 0)
;
// νλ
private final Integer matchCount;
private final boolean requireBonusNumberMatch;
private final Integer prizeAmount;
// μμ±μ
Rank(Integer matchCount, boolean requireBonusNumberMatch, Integer prizeAmount) {
this.matchCount = matchCount;
this.requireBonusNumberMatch = requireBonusNumberMatch;
this.prizeAmount = prizeAmount;
}
...
}
π½ 3μ£Όμ°¨ κ³Όμ (λ‘λ): Applicationμ main λ©μλ
public class Application {
public static void main(String[] args) {
Rank firstInstance = Rank.FIRST_PLACE;
Rank secondInstance = Rank.FIRST_PLACE;
// λμΌν μΈμ€ν΄μ€μΈμ§ λΉκ΅
if (firstInstance == secondInstance) {
System.out.println("Rank.FIRST_PLACEλ μ±κΈν€μ
λλ€!");
} else {
System.out.println("Rank.FIRST_PLACEλ μ±κΈν€μ΄ μλλλ€.");
}
}
}
π½ 3μ£Όμ°¨ κ³Όμ (λ‘λ): μΆλ ₯ κ²°κ³Ό
Rank.FIRST_PLACEλ μ±κΈν€μ
λλ€!
μ±κΈν€ ν¨ν΄μ ν΅μ¬μ μ ν리μΌμ΄μ μ μμμ λ¨ νλμ μΈμ€ν΄μ€λ§ μμ±νκ³ , κ·Έ μΈμ€ν΄μ€λ₯Ό μ¬λ¬ κ³³μμ 곡μ νλλ‘ νλ κ²μ΄λ€. μ΄λ κ² λλ©΄ λ©λͺ¨λ¦¬ μ¬μ©μ΄ ν¨μ¨μ μ΄λ©°, νΉμ μνλ μ€μ μ μΌκ΄λκ² μ μ§ν μ μλ μ₯μ μ΄ μλ€.
κ·Έλ¬λ μ±κΈν€ μΈμ€ν΄μ€λ₯Ό λ©ν°μ€λ λ νκ²½μμ μμ νκ² κ³΅μ νλ €λ©΄ thread-safeν΄μΌ νλ€. λ§μ½ μ¬λ¬ μ€λ λκ° λμμ μΈμ€ν΄μ€λ₯Ό μμ±νλ € μλνλ€λ©΄, μ±κΈν€ ν¨ν΄μ μλμ λ¬λ¦¬ μΈμ€ν΄μ€κ° μ¬λ¬ κ° μμ±λλ μν©μ΄ λ°μν μ μλ€. thread-safeν μ±κΈν€ ꡬνμ μ΄λ° λ¬Έμ λ₯Ό λ°©μ§νμ¬ μ¬λ¬ μ€λ λκ° λμμ μ κ·Όν΄λ λμΌν μΈμ€ν΄μ€λ§ μ¬μ©νλλ‘ λ³΄μ₯νλ€.
π μ°Έκ³ μλ£
'Programming > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μΈν°νμ΄μ€, μΆμ ν΄λμ€, μΌλ° μμ (0) | 2025.03.22 |
---|---|
[Java] μ λ€λ¦(Generic) (0) | 2025.03.17 |
[Java] 컬λ μ νλ μμν¬(Collection Framework) (0) | 2025.03.11 |
[Java] λλ€ ννμ, ν¨μν μΈν°νμ΄μ€, Stream API (0) | 2025.02.23 |
[Java] ν μ€νΈ μ½λ, JUnit & AssertJ (0) | 2025.02.21 |