Java/π Effective Java
23. νκ·Έ λ¬λ¦° ν΄λμ€λ³΄λ€λ ν΄λμ€ κ³μΈ΅ ꡬ쑰 νμ©νκΈ°νκ·Έ λ¬λ¦° ν΄λμ€ π μμ νλλ μΈν°νμ΄μ€, μ΄κ±°ν(enum) λ±μ νμ©ν΄μ νΉμ κ°μ²΄κ° μ΄λ€ μΉ΄ν
κ³ λ¦¬μ μνλμ§ μλ³class Figure { enum Shape {RECTANGLE, CIRCLE}; // νκ·Έ νλ - νμ¬ λͺ¨μμ λνλΈλ€. final Shape shape; // λ€μ νλλ€μ λͺ¨μμ΄ μ¬κ°ν(RECTANGLE)μΌ λλ§ μ°μΈλ€. double length; double width; // λ€μ νλλ λͺ¨μμ΄ μ(CIRCLE)μΌ λλ§ μ°μΈλ€. double radius; // μμ© μμ±μ Figure(double radius) { shape = Shape.CIRCLE; ..
Java/π Effective Java
18. μμ보λ€λ μ»΄ν¬μ§μ
μ¬μ©λ€λ₯Έ ν¨ν€μ§μ ꡬ체 ν΄λμ€λ₯Ό μμνλ μΌμ μν λ©μλ νΈμΆκ³Ό λ¬λ¦¬ μμμ μΊ‘μνλ₯Ό κΉ¨λ¨λ¦Ό π μμ ν΄λμ€κ° μ΄λ»κ² ꡬνλλλμ λ°λΌ νμ ν΄λμ€μ λμμ μ΄μ μκΈΈ μ μμμμ ν΄λμ€λ 릴리μ¦λ§λ€ λ΄λΆ ꡬνμ΄ λ¬λΌμ§ μ μλλ°, κ·Έλ‘ μΈν΄ νμ ν΄λμ€κ° μ€λμν μ μμ β³οΈ μμμ μλͺ» μ¬μ©ν μ public class InstrumentedHashSet extends HashSet { private int addCount = 0; public InstrumentedHashSet(){ } public InstrumentedHashSet(int initCap, float loadFactor){ super(i..
Java/π Effective Java
15. ν΄λμ€μ λ©€λ²μ μ κ·Ό κΆνμ μ΅μν μ κ·Ό μ νμλ₯Ό μ λλ‘ νμ©νλ κ²μ΄ μ 보 μλ(μΊ‘μν)μ ν΅μ¬ λͺ¨λ ν΄λμ€μ λ©€λ²μ μ κ·Όμ±μ κ°λ₯ν ν μ’νμΌ ν¨ν¨ν€μ§ μΈλΆμμ μΈ μ΄μ κ° μλ€λ©΄ package-privateμΌλ‘ μ μΈν ν΄λμ€μμλ§ μ¬μ©νλ package-private ν±λ 벨 ν΄λμ€λ μΈν°νμ΄μ€λ μ΄λ₯Ό μ¬μ©νλ ν΄λμ€ μμ private staticμΌλ‘ μ€μ²©μν€κΈ°β¨ publicμΌ νμκ° μλ ν΄λμ€μ μ κ·Ό μμ€μ package-private ν±λ 벨 ν΄λμ€λ‘ μ’νκΈ° β³οΈ μ κ·Ό μμ€ private : λ©€λ²λ₯Ό μ μΈν ν±λ 벨 ν΄λμ€μμλ§ μ κ·Ό κ°λ₯ package-private : λ©€λ²κ° μμλ ν¨ν€μ§ μμ λͺ¨λ ν΄λμ€μμ μ κ·Ό κ°λ₯. μ κ·Ό μ νμλ₯Ό λͺ
μνμ§ μμμ λ μ μ©λλ ν¨ν€μ§ μ κ·Ό μμ€.pro..
Java/π Effective Java
13. clone μ¬μ μλ μ£Όμν΄μ μ§νCloneable : 볡μ ν΄λ λλ ν΄λμ€μμ λͺ
μνλ μ©λμ μΈν°νμ΄μ€Objectμ protected λ©μλμΈ cloneμ λμ λ°©μμ κ²°μ Cloneableμ μμ ν΄λμ€μ μ μλ protected λ©μλμ λμ λ°©μμ λ³κ²½μμ κ΄κ³μ λ ν΄λμ€ μ€ νμ ν΄λμ€μμ super.cloneμ νΈμΆνλ€λ©΄ μλͺ»λ ν΄λμ€μ κ°μ²΄κ° λ§λ€μ΄μ§ μ μμ π ν΄λμ€ Bκ° ν΄λμ€ Aλ₯Ό μμν λ, νμ ν΄λμ€μΈ Bμ cloneμ B νμ
κ°μ²΄λ₯Ό λ°νν΄μΌ ν¨. νμ§λ§ Aμ cloneμ΄ new A(...)λ‘ μμ±ν κ°μ²΄λ₯Ό λ°ννλ€λ©΄, Bμ cloneλ A νμ
κ°μ²΄λ₯Ό λ°ν.β³οΈ κ°λ³ κ°μ²΄λ₯Ό μ°Έμ‘°νλ Stack ν΄λμ€ λ³΅μ νκΈ° public class Stack { private..
Java/π Effective Java
10. equalsλ μΌλ° κ·μ½μ μ§μΌ μ¬μ μequalsλ₯Ό μ¬μ μνλ κ²½μ°λ ...π λ κ°μ²΄κ° 물리μ μΌλ‘ κ°μμ§(κ°μ²΄ μλ³μ±)κ° μλλΌ λ
Όλ¦¬μ λμΉμ±μ νμΈν΄μΌ νλλ°, μμ ν΄λμ€μ equalsκ° λ
Όλ¦¬μ λμΉμ±μ λΉκ΅νλλ‘ μ¬μ μλμ§ μμ λ β³οΈ μΌλ° κ·μ½ λμΉμ± : x.equals(y)κ° trueμ΄λ©΄, y.equals(x)λ trueμΆμ΄μ± : x.equals(y)κ° trueμ΄κ³ , y.equals(z)λ trueμ΄λ©΄, x.equals(z)λ trueμΌκ΄μ± : x.equals(y)λ₯Ό λ°λ³΅ν΄μ νΈμΆνλ©΄ νμ true λλ false λ°νβ³οΈ equals λ©μλ ꡬν λ°©λ²== μ°μ°μ μ¬μ©ν΄ μ
λ ₯μ΄ μκΈ° μμ μ μ°Έμ‘°μΈμ§ νμΈ π μκΈ° μμ μ΄λ©΄ true λ°νinstanceof μ°μ°μλ‘ μ
λ ₯μ΄ μ¬λ°λ₯Έ ν..
Java/π Effective Java
4. μΈμ€ν΄μ€νλ₯Ό λ§μΌλ €λ©΄ private μμ±μ μ¬μ© 5. μμμ μ§μ λͺ
μνμ§ λ§κ³ μμ‘΄ κ°μ²΄ μ£Όμ
μ¬μ© μ¬μ©νλ μμμ λ°λΌ λμμ΄ λ¬λΌμ§λ ν΄λμ€μλ μ μ μ νΈλ¦¬ν° ν΄λμ€λ μ±κΈν΄ λ°©μ μ ν© Xπ μΈμ€ν΄μ€λ₯Ό μμ±ν λ μμ±μμ νμν μμμ λ겨주λ λ°©μ = μμ‘΄ κ°μ²΄ μ£Όμ
μμ±μμ μμ ν©ν 리λ₯Ό λ겨μ€β¨ ν©ν 리π νΈμΆν λλ§λ€ νΉμ νμ
μ μΈμ€ν΄μ€λ₯Ό λ°λ³΅ν΄μ λ§λ€μ΄μ£Όλ κ°μ²΄ public class SpellChecker{ private final Lexicon dictionary; public SpellChecker(Lexicon dictionary){ this.dictionary = Objects.requireNonNull(dictionary); } ..
Java/π Effective Java
1. μμ±μ λμ μ μ ν©ν 리 λ©μλ ! πΉ μ μ ν©ν 리 λ©μλ (static factory method) π ν΄λΉ ν΄λμ€μ μΈμ€ν΄μ€ λ°νμ΄λ―Έ μΊμλ κ°μ²΄ λ°ννμ¬ κ°μ²΄ μμ± μ€μπ μ₯μ μ΄λ¦μ κ°μ§ μ μμ΄μ λ°νλ κ°μ²΄μ νΉμ±μ μ λλ‘ μ€λͺ
κ°λ₯ ex) BigInteger(int, int, Random) vs BigInteger.probablePrime π λ μ€ 'κ°μ΄ μμμΈ BigIntegerλ₯Ό λ°ννλ€'λ μλ―Έλ₯Ό λ μ μ€λͺ
ν μ μλ κ²μ λ°λ‘ νμ
κ°λ₯ ν ν΄λμ€μ μκ·Έλμ²κ° κ°μ μμ±μκ° μ¬λ¬ κ° νμν μ μ μ ν©ν 리 λ©μλλ₯Ό νμ©νλ κ²μ΄ λμ± μ μ©public class Account { private String owner; private double balance; ..