Java/πŸ“• Effective Java

Java/πŸ“• Effective 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

[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

[Effective Java] ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€ 上

15. ν΄λž˜μŠ€μ™€ λ©€λ²„μ˜ μ ‘κ·Ό κΆŒν•œμ„ μ΅œμ†Œν™” μ ‘κ·Ό μ œν•œμžλ₯Ό μ œλŒ€λ‘œ ν™œμš©ν•˜λŠ” 것이 정보 은닉(μΊ‘μŠν™”)의 핡심  λͺ¨λ“  ν΄λž˜μŠ€μ™€ λ©€λ²„μ˜ 접근성을 κ°€λŠ₯ν•œ ν•œ μ’ν˜€μ•Ό ν•¨νŒ¨ν‚€μ§€ μ™ΈλΆ€μ—μ„œ μ“Έ μ΄μœ κ°€ μ—†λ‹€λ©΄ package-private으둜 μ„ μ–Έν•œ ν΄λž˜μŠ€μ—μ„œλ§Œ μ‚¬μš©ν•˜λŠ” package-private ν†±λ ˆλ²¨ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λŠ” 이λ₯Ό μ‚¬μš©ν•˜λŠ” 클래슀 μ•ˆμ— private static으둜 μ€‘μ²©μ‹œν‚€κΈ°βœ¨ public일 ν•„μš”κ°€ μ—†λŠ” 클래슀의 μ ‘κ·Ό μˆ˜μ€€μ„ package-private ν†±λ ˆλ²¨ 클래슀둜 쒁히기 βœ³οΈ μ ‘κ·Ό μˆ˜μ€€ private : 멀버λ₯Ό μ„ μ–Έν•œ ν†±λ ˆλ²¨ ν΄λž˜μŠ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ package-private : 멀버가 μ†Œμ†λœ νŒ¨ν‚€μ§€ μ•ˆμ˜ λͺ¨λ“  ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯. μ ‘κ·Ό μ œν•œμžλ₯Ό λͺ…μ‹œν•˜μ§€ μ•Šμ•˜μ„ λ•Œ μ μš©λ˜λŠ” νŒ¨ν‚€μ§€ μ ‘κ·Ό μˆ˜μ€€.pro..

Java/πŸ“• Effective 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

[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

[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

[Effective Java] 객체 생성과 파괴 上

1. μƒμ„±μž λŒ€μ‹  정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œ ! πŸ”Ή 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œ (static factory method) πŸ‘‰ ν•΄λ‹Ή 클래슀의 μΈμŠ€ν„΄μŠ€ λ°˜ν™˜μ΄λ―Έ μΊμ‹œλœ 객체 λ°˜ν™˜ν•˜μ—¬ 객체 생성 μ€„μž„πŸ‘ μž₯점이름을 κ°€μ§ˆ 수 μžˆμ–΄μ„œ λ°˜ν™˜λ  객체의 νŠΉμ„±μ„ μ œλŒ€λ‘œ μ„€λͺ… κ°€λŠ₯ ex) BigInteger(int, int, Random) vs BigInteger.probablePrime πŸ‘‰ λ‘˜ 쀑 '값이 μ†Œμˆ˜μΈ BigIntegerλ₯Ό λ°˜ν™˜ν•˜λ‹€'λŠ” 의미λ₯Ό 더 잘 μ„€λͺ…ν•  수 μžˆλŠ” 것을 λ°”λ‘œ νŒŒμ•… κ°€λŠ₯ ν•œ ν΄λž˜μŠ€μ— μ‹œκ·Έλ‹ˆμ²˜κ°€ 같은 μƒμ„±μžκ°€ μ—¬λŸ¬ 개 ν•„μš”ν•  μ‹œ 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜λŠ” 것이 λ”μš± 유용public class Account { private String owner; private double balance; ..

soogoori
'Java/πŸ“• Effective Java' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘