λ©μλμ 맀κ°λ³μμ λ°νκ°μ μ΄λ»κ² μ²λ¦¬νλμ§
λ©μλ μκ·Έλμ²λ μ΄λ»κ² μ€κ³ ν΄μΌ νλμ§
μμ΄ν 49 : 맀κ°λ³μκ° μ ν¨νμ§ κ²μ¬νλΌ
λ©μλμ μμ±μ λλΆλΆμ μ λ ₯ 맀κ°λ³μ κ°μ΄ νΉμ 쑰건μ λ§μ‘±νκΈ°λ₯Ό λ°λλ€.
- μλ₯Ό λ€μ΄ μΈλ±μ€ κ°μ μμλ‘ λμ΄μ€λ©΄ μλκ³ , κ°μ²΄μ°Έμ‘°λ nullμ΄ μλμ¬μΌλ§ νλ€.
λν μλͺ»λμμ λ λ°μνλ μμΈλ₯Ό λ¬Έμννμ¬ λ¨κ²¨λμΌνλ€.
requiredNonNullκ³Ό assertλ₯Ό ν΅ν΄ 맀κ°λ³μ μ ν¨μ± κ²μ¬λ₯Ό ν μ λ μλ€.
μ ν¨μ± κ²μ¬λ₯Ό ν΅ν΄ νμ μκΈΈ μ μλ μλ¬λ₯Ό μ‘°κΈ°μ μ°Ύμ μ μλ€.
- λ©μλλ μ΅λν λ²μ©μ μΌλ‘ μ€κ³νλΌ. μ μ½μΌλ‘ μΈν΄ λ³Έλμ κΈ°λ₯μ λͺ»ν΄μλ μλλ€.
μμ΄ν 50 : μ μμ λ°©μ΄μ 볡μ¬λ³Έμ λ§λ€λΌ
ν΄λΌμ΄μΈνΈκ° λΆλ³μμ κΉ¨λ¨λ¦¬λ €νλ€κ³ μκ°νκ³ ‘λ°©μ΄μ μΌλ‘ νλ‘κ·Έλλ°' ν΄λΌ.
λΆλ³ κ°μ²΄ λ΄λΆμ κ°λ³ κ°μ²΄ λ©€λ²λ₯Ό κ°μ§ κ²½μ°
public Period(Date start, Date end) {
if (start.compareTo(end) > 0)
throw new IllegalArgumentException(
start + "κ° " + end + "λ³΄λ€ λ¦λ€.");
this.start = start;
this.end = end;
}
public Date start() {
return start;
}
public Date end() {
return end;
}
public String toString() {
return start + " - " + end;
}
λ΄λΆμ κ°λ³ κ°μ²΄λ‘ μΈν΄ μΈλΆμμ λΆλ³μμ΄ λ¬΄λμ§ μ μλ€. (Date())
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μλ
- κ°λ³ λ΄λΆ κ°μ²΄λ₯Ό λΆλ³ κ°μ²΄λ‘ λ³νμν€κΈ° (μλ° 8μ λΆλ³ λ΄λΆ κ°μ²΄ μ¬μ©ν΄μ ν΄κ²° LocalDateTime)
- κ°λ³ λ΄λΆ κ°μ²΄λ₯Ό λμ ν 볡μ¬λ³Έμ λ§λ€μ΄μ κ°μ²΄μμ μ¬μ©νκΈ° (μΈλΆμ κ°μ²΄λ₯Ό 곡μ νμ§ μμ)
- ν΄κ²° μ½λ
public Period(Date start, Date end) {
this.start = new Date(start.getTime());
this.end = new Date(end.getTime());
if (this.start.compareTo(this.end) > 0)
throw new IllegalArgumentException(
this.start + "κ° " + this.end + "λ³΄λ€ λ¦λ€.");
}
// μ½λ 50-5 μμ ν μ κ·Όμ - νλμ λ°©μ΄μ 볡μ¬λ³Έμ λ°ννλ€. (305μͺ½)
public Date start() {
return new Date(start.getTime());
}
public Date end() {
return new Date(end.getTime());
}
-ν΅μ¬μ 리-
ν΄λΌμ΄μΈνΈλ‘λΆν° λ°λ μμ, λ°ν μμκ° κ°λ³μ΄λΌλ©΄ λ°λμ λ°©μ΄μ μΌλ‘ 볡μ¬νμ.
λ§μ½, λΉμ©μ΄ ν¬κ±°λ μ¬μ©μλ₯Ό μ λ’°νλ€λ©΄ λ°©μ΄μ 볡μ¬λμ μμ μμ μ μ± μμ΄ μ¬μ©μμκ² μμμ λͺ μν΄λμ.
μμ΄ν 51 : λ©μλ μκ·Έλμ²λ₯Ό μ μ€ν μ€κ³νλΌ
API μ€κ³ μλ Ή
- λ©μλ μ΄λ¦μ μ μ€ν μ§μ
- κ°μ ν¨ν€μ§μ μν μ΄λ¦κ³Ό μΌκ΄λκ² μ§κ³ μλ° λΌμ΄λΈλ¬λ¦¬ κ°μ΄λ μ°Έμ‘°ν κ²
- νΈμ λ©μλλ₯Ό λ무 λ§μ΄ λ§λ€μ§ λ§μ
- λ©μλκ° λ§μΌλ©΄ ꡬννλ μ¬λ μ¬μ©νλ μ¬λ λͺ¨λ νλ€λ€. νμ μ΄ μλ€λ©΄ λ§λ€μ§ λ§μ
- 맀κ°λ³μ λͺ©λ‘μ μ§§κ² μ μ§νμ.
- κ°μ νμ μ 맀κ°λ³μκ° μ°λ¬μ λμ€λ κ²½μ° νΉν ν΄λ‘λ€ (κ°κ°μ λ»μ μ΄ν΄νκΈ° μ΄λ €μμ§)
- λ©μλ μͺΌκ°κΈ°, ν¬νΌ ν΄λμ€, λΉλ ν¨ν΄ μ¬μ©ν΄μ μ§§κ² λ§λ€μ
- 맀κ°λ³μ νμ
μΌλ‘λ ν΄λμ€λ³΄λ€ μΈν°νμ΄μ€κ° λ«λ€
- ν¨μ¬ λ²μ©μ μΌλ‘ μΈμλ₯Ό λ°μμ¬ μ μλ€. μΈν°νμ΄μ€ μμκ³Ό μ΄νμ λ§λ€μ΄μ§ κ°μ²΄λ€κΉμ§λ κ°λ₯!! λ§μ½ ν΄λμ€λ₯Ό μ¬μ©νλ€λ©΄ λ©μλ μ¬μ©μ μν΄ νΉμ ν΄λμ€λ‘μ λ³΅μ¬ λΉμ©μ μΉλ€μΌ νλ€.
- boolean보λ€λ μμ 2κ°μ§λ¦¬ μ΄κ±° νμ
μ΄ λ«λ€.
- λ¬Όλ‘ , λ©μλ μ΄λ¦μ boolean λ λͺ νν κ²½μ°λ μμΈ
- μ΄κ±° νμ μ΄ μ½λλ₯Ό μ½κΈ° λ μ½κ³ λμ€μ μ νμ§λ₯Ό μΆκ°νκΈ°λ μ½λ€.μ¨λκ³ ν΄λμ€μ μ μ ν©ν°λ¦¬ λ©μλκ° μ΄ μ΄κ±° νμ μ μ λ ₯λ°μ μ ν©ν μ¨λκ³ μΈμ€ν΄μ€λ₯Ό λ°ννλ€κ³ ν΄λ³΄μ.
- ‘Thermometer.newInstance(true)’ 보λ€λ ‘Thermometer.newInstance(TemperatureScale.CELSIUS)’ κ° ν¨μ¬ λͺ ννλ€.
- public enum TemperatureScale { FAHRENHEIT, CELSIUS }
μμ΄ν 52 : λ€μ€μ μλ μ μ€ν μ¬μ©νλΌ
λ€μ€μ μ(μ€λ²λ‘λ©) λ©μλ μ€ μ΄λ λ©μλλ₯Ό νΈμΆν μ§λ μ»΄νμΌνμμ κ²°μ λλ€.
public class CollectionClassifier {
public static String classify(Set<?> s) {
return "μ§ν©";
}
public static String classify(Collection<?> c) {
return "κ·Έ μΈ";
}
public static void main(String[] args) {
Collection<?>[] collections = { new Hashset<String>(), new ArrayList<String>() };
for (Collection<?> c : collections)
System.out.println(classify(c)); // "κ·Έ μΈ κ·Έ μΈ" μ»΄νμΌνμμ λ©μλ κ²°μ
}
}
λ°λΌμ μΈμκ° μ»¬λ μ μΌ λ μ΄λ€ λ©μλκ° μ€νλ μ§λ μ»΄νμΌ νμμ κ²°μ λκ² λκ³ μ΄λ€ ꡬν체μΈμ§μ μκ΄μμ΄ “κ·Έ μΈ"κ°μ΄ λμ€κ² λλ€.
μ¬μ μ(μ€λ²λΌμ΄λ©)μ μ΄μ λ¬λ¦¬ λ°νμμ λμ μΌλ‘ λ©μλκ° μ νλλ€.
class Wine {
String name() { return "μμΈ"; }
}
class SparklingWine extends Wine {
@Override String name() { return "μ€νν΄λ§μμΈ"; }
}
public class Overriding {
public static void main(String[] args) {
List<Wine> wineList = List.of(new Wine(), new SparklingWine());
for (Wine wine : wineList) {
System.out.println(wine.name()); // "μμΈ μ€νν΄λ§μμΈ" κ°μ₯ νμμμ μ μν λ©μλ νΈμΆ
}
}
}
κ°κ°μ νμ μ λ§κ² μ μν λ©μλκ° μ€νλκ² λλ€.
λ€μ€μ μκ° νΌλμ μΌμΌν€λ μν©μ νΌνμ.
- 맀κ°λ³μ μκ° κ°μ μ€λ²λ‘λ©μ νμ§λ§μ
- κ°λ³μΈμλ₯Ό μ¬μ©νλ λ©μλλ μμ λ€μ€μ μ νμ§λ§μ
- μ€λ²λ‘λ© λμ λ©μλ μ΄λ¦μ λ€λ₯΄κ² μ§μ΄μ£Όμ
μμ΄ν 53 : κ°λ³μΈμλ μ μ€ν μ¬μ©νλΌ
μΈμμ κ°―μλ₯Ό λΉμ₯ μ ν μ μμ§λ§ νλμ΄μ λ°λ κ²μ 보μ₯λ°κ³ μΆλ€λ©΄ μλμ²λΌ νλΌ
static int min(int firstArg, int... remainingArgs) { // νλ μ΄μμ 맀κ°λ³μλ₯Ό λ°μμΌ ν¨
int min = firstArg;
for (int arg : remainingArgs)
if (arg < min)
min = arg;
return min;
}
κ°λ³ μΈμλ₯Ό μ¬μ©νλ©΄ μ±λ₯μ΄ μμ’μμ§ μ μλ€. λ§μ΄ μ°λ κ²½μ°κΉμ§ μ€λ²λ‘λ©μ ν΅ν΄ μΈμ κ°―μλ₯Ό 보μ₯ν΄μ£Όκ³ μ μ μ¬μ©κΉμ§ 보μ₯νκΈ° μν΄ κ°λ³ μΈμλ₯Ό μ¬μ©νλ©΄ νΉμμν©λ ν΄κ²° κ°λ₯νλ€.
μμ΄ν 54 : nullμ΄ μλ, λΉ μ»¬λ μ μ΄λ λ°°μ΄μ λ°ννλΌ
λ§μ½ 컬λ μ μ΄λ λ°°μ΄μ΄ λΉμ΄μλ€λ©΄ nullμ΄ μλ λΉ κ°μ²΄λ₯Ό λ°ννλΌ.
nullμ λ°ννλ©΄ μ΄λ₯Ό λ°λ μͺ½μμ nullμΈμ§ κ²μ¬νλ λ°©μ΄ μ½λκ° νμνκ³ μ΄λ₯Ό λΉΌλ¨ΉμΌλ©΄ μ€λ₯κ° λ°μνλ€.
nullμ λ°ννλ APIλ μ¬μ©νκΈ° μ΄λ ΅κ³ μ€λ₯ μ²λ¦¬ μ½λλ λμ΄λλ€.
μμ΄ν 55 : μ΅μ λ λ°νμ μ μ€ν νλΌ
μ΅μ λμ μμλ₯Ό μ΅λ 1κ° κ°μ§ μ μλ λΆλ³ 컬λ μ μ΄λ€.
μμΈλ₯Ό λμ§λ λ©μλλ³΄λ€ μ μ°νκ³ μ¬μ©νκΈ° μ¬μ°λ©°, nullμ λ°ννλ λ©μλλ³΄λ€ μ€λ₯ κ°λ₯μ±μ΄ μλ€.
μ΅μ λμ λ°ννλ λ©μλμμλ μ λ nullμ λ°ννμ§ λ§μ.
public static <E extends Comparable<E>>
Optional<E> max(Collection<E> c) {
if (c.isEmpty())
return Optional.empty();
E result = null;
for (E e : c)
if (result == null || e.compareTo(result) > 0)
result = Objects.requireNonNull(e);
return Optional.of(result);
}
μ΅μ λ μ μ ν©ν°λ¦¬λ₯Ό μ¬μ©νμ¬ λ°ν.
μ΅μ λμ κ²μ¬ μμΈμ μ·¨μ§κ° λΉμ·νλ€
- λ°νκ°μ΄ μμ μλ μμμ APIμ¬μ©μμκ² μλ €μ€λ€.
- ν΄λΌμ΄μΈνΈμκ² κ°μ λ°μ§ λͺ»νμ λ μ·¨ν νλμ μμ±νλλ‘ νλ€.
컬λ μ , μ€νΈλ¦Ό, λ°°μ΄, μ΅μ λ κ°μ 컨ν μ΄λ νμ μ μ΅μ λλ‘ κ°μΈμ§λ§μ
- λμ λΉ μ»¨ν μ΄λλ₯Ό λ°ννμ.
λ°ν νμ μ Optional<T>λ‘ ν΄μΌνλ κ²½μ°
- κ²°κ³Όκ° μμ μ μμΌλ©°, ν΄λΌμ΄μΈνΈκ° μ΄ μν©μ νΉλ³ν μ²λ¦¬ν΄μΌνλ κ²½μ°
λ°μ±νμ μ μ±λ₯μ΄ μμ’μμ§λ Optionalμ λ΄μ§λ§κ³ κΈ°λ³Ένμ μ μ¬μ©νμ.
-ν΅μ¬μ 리-
μ΅μ λμ κ±°μ λ°νκ°μΌλ‘ μ¬μ©νκ³ μ΄μΈμ μ©λλ μ μ¬μ©νμ§ μλλ€. μ±λ₯ μ΄μκ° μμ μ μμΌλ μ μ€ν μ¬μ©νμ.
μμ΄ν 56 : 곡κ°λ API μμμλ νμ λ¬Έμν μ£Όμμ μμ±νλΌ
APIλ₯Ό μ¬λ°λ‘ λ¬Έμννλ €λ©΄ 곡κ°λ λͺ¨λ ν΄λμ€, μΈν°νμ΄μ€, λ©μλ, νλ μ μΈμ λ¬Έμν μ£Όμμ λ¬μμΌ νλ€.
νμ€ κ·μ½μ μΌκ΄λκ² μ§ν€μ.
'πμ½μ μ± μ 리 > μ΄νν°λΈμλ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ΄νν°λΈ μλ°] 10μ₯ : μμΈ (0) | 2022.03.29 |
---|---|
[μ΄νν°λΈ μλ°] 9μ₯ : μΌλ°μ μΈ νλ‘κ·Έλλ° μμΉ (0) | 2022.03.27 |
[μ΄νν°λΈ μλ°] 7μ₯ : λλ€μ μ€νΈλ¦Ό (0) | 2022.03.23 |
[μ΄νν°λΈ μλ°] 6μ₯ : μ΄κ±° νμ κ³Ό μ λν μ΄μ (0) | 2022.03.21 |
[μ΄νν°λΈ μλ°] 5μ₯ : μ λ€λ¦ (0) | 2022.03.14 |