2023. 2. 27. 17:05γJAVA/Effective JAVA
[μ΄νν°λΈ μλ°] Item17. λ³κ²½ κ°λ₯μ±μ μ΅μννλΌ.
[μ΄νν°λΈ μλ°] Item17. λ³κ²½ κ°λ₯μ±μ μ΅μν νλΌ. (λΆλ³ ν΄λμ€) (tistory.com)
μ λ² κΈμμ λΆλ³ ν΄λμ€κ° 무μμΈμ§ κ°λ κ³Ό λΆλ³ ν΄λμ€λ₯Ό λ§λλ λ€μ―κ°μ§ κ·μΉμ λν΄μ 곡λΆνλ€.
λΆλ³ ν΄λμ€λ κ°λ³ ν΄λμ€λ³΄λ€ μ€κ³νκ³ , ꡬννκ³ μ¬μ©νκΈ° μ¬μ°λ©°, μ€λ₯κ° μκΈΈ μ¬μ§λ μ κ³ ν¨μ¬ μμ νλ€κ³ νλλ°
μ’ λ μμΈνκ² λΆλ³ ν΄λμ€μ μ₯μ κ³Ό λ¨μ μ λν΄ μ΄λ² κΈμμ 곡λΆν κ²μ΄λ€.
λΆλ³ ν΄λμ€μ μ₯μ
public final class Complex
{
private final double re;
private final double im;
public static final Complex ZERO = new Complex(0, 0);
public static final Complex ONE = new Complex(1, 0);
public static final Complex I = new Complex(0, 1);
public Complex(double re, double im)
{
this.re = re;
this.im = im;
}
public double realPart()
{
return re;
}
public double imaginaryPart()
{
return im;
}
public Complex plus(Complex complex)
{
return new Complex(re + complex.re , im + complex.im);
}
public static Complex valueOf(double re, double im)
{
return new Complex(re, im);
}
public Complex minus(Complex complex)
{
return new Complex(re - complex.re, im - complex.im);
}
public Complex times(Complex complex)
{
return new Complex(re * complex.re - im * complex.im , re * complex.im + im * complex.re);
}
public Complex divideBy(Complex complex)
{
double tmp = complex.re * complex.re + complex.im * complex.im;
return new Complex((re * complex.re + im * complex.im) / tmp, (im * complex.re - re * complex.im) / tmp);
}
@Override
public boolean equals(Object o)
{
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Complex complex = (Complex) o;
return Double.compare(complex.re,
re) == 0 && Double.compare(
complex.im, im) == 0;
}
@Override
public int hashCode()
{
return Objects.hash(re, im);
}
@Override
public String toString()
{
return "Complex{" +
"re=" + re +
", im=" + im +
'}';
}
}
Complex ν΄λμ€λ 볡μμ(μ€μλΆμ νμλΆλ‘ ꡬμ±λ μ)λ₯Ό νννλ ν΄λμ€μ΄λ€.
realPartλ μ€μλΆμ κ°μ λ°ννλ μ κ·Όμ λ©μλμ΄κ³ , imaginaryPartλ νμλΆμ κ°μ λ°ννλ μ κ·Όμ λ©μλλ₯Ό μ 곡νλ€.
κ·Έλ¦¬κ³ μ¬μΉμ°μ° λ©μλ(plus, minus, times, dividedBy) λ₯Ό μ μνλ€.
μ΄ λ©μλλ€μ 보면 μΈμ€ν΄μ€ μμ μ μμ νμ§ μκ³ μλ‘μ΄ Complex μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄ λ°ννλ€.
1οΈβ£ ν¨μν νλ‘κ·Έλλ°μ μ ν©νλ€.
νΌμ°μ°μμ ν¨μλ₯Ό μ μ©ν΄ κ²°κ³Όλ₯Ό λ°ννμ§λ§, νΌμ°μ°μ μ체λ κ·Έλλ‘μΈ νλ‘κ·Έλλ° ν¨ν΄μ ν¨μν νλ‘κ·Έλλ°μ΄λΌκ³ νλ€.
(μ΄μ λ°λλ‘ μ μ°¨μ νΉμ λͺ λ Ήν νλ‘κ·Έλλ°μμλ λ©μλμ νΌμ°μ°μμΈ μμ μ μμ ν΄ μμ μ μνκ° λ³νκ² νλ€.)
2οΈβ£ λΆλ³ κ°μ²΄λ λ¨μνλ€.
λΆλ³ κ°μ²΄λ μμ±λ μμ μ μνλ₯Ό νκ΄΄λ λκΉμ§ κ·Έλλ‘ κ°μ§νλ€.
λͺ¨λ μμ±μκ° ν΄λμ€ λΆλ³μμ 보μ₯νλ€λ©΄ κ·Έ ν΄λμ€λ₯Ό μ¬μ©νλ νλ‘κ·Έλλ¨Έκ° λ€λ₯Έ λ Έλ ₯μ λ€μ΄μ§ μλλΌλ μμν λΆλ³μΌλ‘ λ¨λλ€.
3οΈβ£ λΆλ³ κ°μ²΄λ κ·Όλ³Έμ μΌλ‘ μ€λ λ μμ νμ¬ λ°λ‘ λκΈ°νν νμ μλ€.
λΆλ³ κ°μ²΄λ μ¬λ¬ μ€λ λκ° λμμ 곡μ νλλΌλ μ λλ‘ νΌμλμ§ μλλ€! (κ·Έλμ μ¬μ€ μ€λ λ μμ νκ² λ§λλ κ°μ₯ κ°λ¨ν λ°©λ²μ΄κΈ°λ νλ€) λΆλ³ κ°μ²΄μ λν΄μλ κ·Έ μ΄λ€ μ€λ λλ λ€λ₯Έ μ€λ λμ μν₯μ μ€ μ μμΌλ λΆλ³ κ°μ²΄λ μμ¬νκ³ κ³΅μ ν μ μλ€.
λΆλ³ κ°μ²΄λ₯Ό μμ λ‘κ² κ³΅μ ν μ μλ€λ κ²μ λ°©μ΄μ 볡μ¬λ νμμλ€λ κ²°λ‘ μΌλ‘ μμ°μ€λ½κ² μ΄μ΄μ§λ€. (μλ³Έμ΄ κ·Έλλ‘ μ μ§λλκΉ)
-> λ°λΌμ λΆλ³ ν΄λμ€λΌλ©΄ νλ² λ§λ μΈμ€ν΄μ€λ₯Ό μ΅λν μ¬νμ©νκΈ°λ₯Ό κΆνλ€!
4οΈβ£ λΆλ³ κ°μ²΄λ μμ λ‘κ² κ³΅μ ν μ μμμ λ¬Όλ‘ , λΆλ³ κ°μ²΄λΌλ¦¬λ λ΄λΆ λ°μ΄ν°λ₯Ό 곡μ ν μ μλ€.
5οΈβ£ κ°μ²΄λ₯Ό λ§λ€ λ λ€λ₯Έ λΆλ³ κ°μ²΄λ€μ ꡬμ±μμλ‘ μ¬μ©νλ©΄ μ΄μ μ΄ λ§λ€.
κ°μ΄ λ°λμ§ μλ ꡬμ±μμλ€λ‘ μ΄λ£¨μ΄μ§ κ°μ²΄λΌλ©΄ κ·Έ κ΅¬μ‘°κ° μ무리 볡μ‘νλλΌλ λΆλ³μμ μ μ§νκΈ° ν¨μ¬ μμνκΈ° λλ¬Έμ΄λ€.
ex) λΆλ³ κ°μ²΄λ 맡μν€μ μ§ν©(set)μ μμλ‘ μ°κΈ°μ μμ±λ§μΆ€μ΄λ€. 맡μ΄λ μ§ν©μ μμ λ΄κΈ΄ κ°μ΄ λ°λλ©΄ λΆλ³μμ΄ νλ¬Όμ΄μ§λλ° λΆλ³ κ°μ²΄λ₯Ό μ¬μ©νλ©΄ κ·Έλ° κ±±μ μ νμ§ μμλ λλ€.
6οΈβ£ λΆλ³ κ°μ²΄λ κ·Έ μμ²΄λ‘ μ€ν¨ μμμ±μ μ 곡νλ€.
μνκ° μ λλ‘ λ³νμ§ μκΈ° λλ¬Έμ μ κΉμ΄λΌλ λΆμΌμΉ μνμ λΉ μ§ κ°λ₯μ±μ΄ μλ€.
λΆλ³ ν΄λμ€μ λ¨μ
1οΈβ£ κ°μ΄ λ€λ₯΄λ©΄ λ°λμ λ 립λ κ°μ²΄λ‘ λ§λ€μ΄μΌ νλ€.
-> μ΄μ λν ν΄κ²° λ°©λ²μΌλ‘λ "λ€λ¨κ³ μ°μ°"μ μ 곡νκ±°λ, "κ°λ³ λλ° ν΄λμ€"λ₯Ό μ 곡νμ¬ λμ²ν μ μλ€.
λ€λ¨κ³ μ°μ°μ μ 곡νλ λ°©λ²μ plus, minus, dividedBy λ©μλ κ°μ κ±Έ νλ²μ μ 곡ν΄μ κ° λ¨κ³λ§λ€ κ°μ²΄λ₯Ό μμ±νμ§ μμλ λκ² νλ€.
κ°λ³ λλ° ν΄λμ€μ μλ‘ Stringμ StringBuilder κ° μλ€.
public class StringExample
{
public static void main(String[] args)
{
String name = "whiteShip";
StringBuilder sb = new StringBuilder(name); // κ°λ³ λλ° ν΄λμ€λ₯Ό μ 곡νμ¬ λ¨μ 보μ κ°λ₯
sb.append("hyejin");
}
}