π JAVA/μ΄νν°λΈ μλ°

int μμ λμ μ΄κ±° νμ μ μ¬μ©νλΌ - [6μ₯. μ΄κ±° νμ κ³Ό μ λν μ΄μ (μμ΄ν 34)] - (1)
μλ°λ₯Ό μ΄μ©νμ¬ μ½λ©μ νλ€ λ³΄λ©΄ μ μ μ΄κ±° ν¨ν΄(int enum pattern)κ³Ό μ΄κ±° νμ (enum type)μ μ¬μ©ν΄ λ³Έ μ μ΄ μμ κ²μ΄λ€. μ΄λ² κΈμμλ μ μ μ΄κ±° ν¨ν΄μ λ¨μ λ€μ μ΄ν΄λ³΄κ³ , μ μ΄κ±° νμ μ μ¬μ©ν΄μΌ νλμ§ μμλ³΄κ³ μ νλ€. κ·Έλ¦¬κ³ κΈ°λ³Έμ μΈ μ΄κ±° νμ μ μ¬μ©λ²λ μμλ³Ό κ²μ΄λ€. π 1. μ μ μ΄κ±° ν¨ν΄ (int enum pattern) public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public static final int ORANGE_NAVEL = 0; public static final int ..

νμ μμ μ΄μ’ 컨ν μ΄λλ₯Ό κ³ λ €νλΌ - [5μ₯. μ λ€λ¦(μμ΄ν 33)]
1. νμ μμ μ΄μ’ 컨ν μ΄λ π νμ μμ μ΄μ’ (Heterogeneous) 컨ν μ΄λλ ν νμ μ κ°μ²΄λ§ λ΄μ μ μλ 컨ν μ΄λκ° μλ, μ¬λ¬ λ€λ₯Έ νμ (μ΄μ’ )μ λ΄μ μ μλ νμ μμ ν 컨ν μ΄λλ₯Ό λ§νλ€. μ§κΈκΉμ§ μ°λ¦¬κ° νν μκ³ μλ 컨ν μ΄λλ ν κ°μ§ νμ λ§ μ¬μ©ν μ μλ 컨ν μ΄λλ€. public static void main(String[] args) { Set names = new HashSet(); names.add("amenable"); // names.add(1); // λΆκ°λ₯ Set numbers = new HashSet(); numbers.add(1); // numbers.add("amenable"); // λΆκ°λ₯ } νμ§λ§, κ²½μ°μ λ°λΌμλ μ΄μ’ 컨ν μ΄λ(= κ°μ μ’ μ΄ μλ νμ ..

μ λ€λ¦κ³Ό κ°λ³μΈμλ₯Ό ν¨κ» μΈ λλ μ μ€νλΌ - [5μ₯. μ λ€λ¦(μμ΄ν 32)]
1. κ°λ³μΈμ & μ λ€λ¦ πͺ κ°λ³μΈμ(varargs)λ 맀κ°λ³μλ‘ λ€μ΄μ€λ κ°μ κ°μμ μκ΄μμ΄ λμ μΌλ‘ μΈμλ₯Ό λ°μμ κΈ°λ₯νλλ‘ ν΄μ£Όλ λ¬Έλ²μ λ§νλ€. public PrintStream printf(String format, Object ... args) { return format(format, args); } κ°λ³μΈμ λ©μλλ₯Ό νΈμΆνλ©΄ κ°λ³μΈμλ₯Ό λ΄κΈ° μν λ°°μ΄μ΄ μλμΌλ‘ νλ λ§λ€μ΄μ§λ€. λ§μ½ λ€μκ³Ό κ°μ΄ μ λ€λ¦κ³Ό κ°λ³μΈμλ₯Ό ν¨κ» μ¬μ©νλ©΄ μ΄λ»κ² λ κΉ? static void dangerous(List... stringLists) { } μ΄ κ²½μ°μλ κ°λ³μΈμ λ©μλκ° νΈμΆλκΈ° λλ¬Έμ κ°λ³μΈμλ₯Ό λ΄κΈ° μν λ°°μ΄μ΄ μλμΌλ‘ λ§λ€μ΄μ§λ€. μ¦, μ λ€λ¦ λ°°μ΄μ΄ λ§λ€μ΄μ§λ κ²μ΄λ€. μΌλ°μ μΌλ‘λ μ λ€λ¦ λ°°μ΄μ ..

νμ μ μμΌλμΉ΄λλ₯Ό μ¬μ©ν΄ API μ μ°μ±μ λμ΄λΌ - [5μ₯. μ λ€λ¦(μμ΄ν 31)]
1. PECS π PECS(Producer-Extends, Consumer-Super)λ 맀κ°λ³μν νμ Tκ° μμ°μλΌλ©΄ μλ null μΈμλ μ΄λ€ κ°λ λ£μ μ μκΈ° λλ¬Έμ΄λ€. κ·Έλμ μλμ κ°μ΄ λμ°λ―Έ λ©μλλ₯Ό λ°λ‘ μμ±ν΄μ μ¬μ©ν΄μΌ νλ€. public class Swap { public static void swap(List list, int i, int j) { swapHelper(list, i, j); } private static void swapHelper(List list, int i, int j){ list.set(i, list.set(j, list.get(i))); } } ν΄λΉ κΈμ λ°±κΈ°μ λμ 'μ΄νν°λΈ μλ° μλ²½ 곡λ΅'μ μ°Έκ³ νμμ΅λλ€.

μ΄μμ΄λ©΄ μ λ€λ¦ λ©μλλ‘ λ§λ€λΌ - [5μ₯. μ λ€λ¦(μμ΄ν 30)]
ν΄λμ€μ λ§μ°¬κ°μ§λ‘, λ©μλλ μ λ€λ¦μΌλ‘ λ§λ€ μ μλ€. μ λ€λ¦ λ©μλ 3κ°μ§λ₯Ό μ΄ν΄λ³΄λ©΄μ μ΄λ»κ² μ λ€λ¦ λ©μλλ₯Ό λ§λλμ§ μμ보μ. 1. 맀κ°λ³μν νμ μ λ°λ μ μ μ νΈλ¦¬ν° λ©μλ πΌ 맀κ°λ³μν νμ μ λ°λ μ μ μ νΈλ¦¬ν° λ©μλλ λ³΄ν΅ μ λ€λ¦μ΄λ€. (Collectionsμ μκ³ λ¦¬μ¦ λ©μλλ λͺ¨λ μ λ€λ¦μ΄λ€.) μ°μ , μ λ€λ¦μ μ¬μ©νμ§ μμ λ©μλλ₯Ό μ΄ν΄λ³΄μ public class Union { public static Set union(Set s1, Set s2) { Set result = new HashSet(s1); result.addAll(s2); return result; } } ν΄λΉ λ©μλλ μλμ μμμμ μ΄ν΄λ³Ό μ μλ κ²μ²λΌ μμ νμ§ μλ€. public static void main(S..

μ΄μμ΄λ©΄ μ λ€λ¦ νμ μΌλ‘ λ§λ€λΌ - [5μ₯. μ λ€λ¦(μμ΄ν 29)]
1. λ€μ΄κ°κΈ° μ πβοΈ μλμ Object κΈ°λ°μΌλ‘ λ§λ€μ΄μ§ Stack ν΄λμ€λ₯Ό μ΄ν΄λ³΄μ. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if(size == 0) throw new EmptyStackException(); Object resu..

λ°°μ΄λ³΄λ€λ 리μ€νΈλ₯Ό μ¬μ©νλΌ - [5μ₯. μ λ€λ¦(μμ΄ν 28)]
1. λ°°μ΄κ³Ό μ λ€λ¦ νμ μ μ°¨μ΄ π¦ π 1. λ°°μ΄μ 곡λ³μ΄κ³ , μ λ€λ¦μ λΆκ³΅λ³μ΄λ€. λ°°μ΄μ 곡λ³(Convariant)μ΄λ€. Subκ° Superμ νμ νμ μ΄λΌλ©΄ Sub[]λ λ°°μ΄ Super[]μ νμ νμ μ΄λ€. μ λ€λ¦μ λΆκ³΅λ³(Invariant)μ΄λ€. μλ‘ λ€λ₯Έ νμ Type1κ³Ό Type2κ° μμ λ, Listμ Listμ νμ νμ λ μλκ³ μμ νμ λ μλλ€. 곡λ³κ³Ό λΆκ³΅λ³ μ€ μ΄λ μͺ½μ΄ λ¬Έμ κ° μμκΉ? μ½λλ₯Ό ν΅ν΄ μμ보μ. public static void main(String[] args) { // λ°°μ΄ Object[] objectArray = new Long[1]; objectArray[0] = "νμ μ΄ λ¬λΌμ λ£μ μ μλ€."; // ArrayStoreException (λ°νμμ λ°μ) //..

λΉκ²μ¬ κ²½κ³ λ₯Ό μ κ±°νλΌ - [5μ₯. μ λ€λ¦(μμ΄ν 27)]
1. λΉκ²μ¬ κ²½κ³ κ°λ π¦ 'λΉκ²μ¬(unchecked) κ²½κ³ 'λ μ»΄νμΌλ¬κ° νμ μμ μ±μ νμΈνλλ° νμν μ λ³΄κ° μΆ©λΆνμ§ μμ λ λ°μμν€λ κ²½κ³ μ΄λ€. λΉκ²μ¬ κ²½κ³ μ μμ μ€μ νλλ‘ λ€μκ³Ό κ°μ΄ λ‘ νμ μ μ¬μ©νλ κ²½μ°λ₯Ό λ€ μ μλ€. public static void main(String[] args) { // λΉκ²μ¬ κ²½κ³ λ°μ // Raw use of parameterized class 'Set' Set names = new HashSet(); // λΉκ²μ¬ κ²½κ³ λ°μ // Raw use of parameterized class 'HashSet' Set strings = new HashSet(); } 2. λΉκ²μ¬ κ²½κ³ λ₯Ό μ κ±°ν΄μΌ νλ μ΄μ π¦ μ΄λ² μμ΄ν μμλ 'λΉκ²μ¬ κ²½κ³ λ₯Ό μ κ±°νλΌ'λΌκ³ λ§νκ³ ..

λ‘ νμ μ μ¬μ©νμ§ λ§λΌ - [5μ₯. μ λ€λ¦(μμ΄ν 26)]
μ΄λ² μ₯(5μ₯)λΆν°λ μ λ€λ¦μ λ€λ£¬λ€. νΉμλ μ λ€λ¦μ λν κΈ°λ³Έ κ°λ μ΄ νμνλ€λ©΄ μ΄μ κΈμ λ¨Όμ λ³΄κ³ μ€λλ‘ νμ. 1. λ‘ νμ (Raw Type) κ°λ π½ λ‘ νμ μ΄λ μ λ€λ¦ νμ μμ νμ 맀κ°λ³μλ₯Ό μ ν μ¬μ©νμ§ μμ λλ₯Ό λ§νλ€. μλ₯Ό λ€μ΄ Listμ λ‘ νμ μ Listλ€. 2. λ‘ νμ μ μ¬μ©νλ©΄ μ λλ μ΄μ πΎ μ λ€λ¦μ΄ μ겨주λ μμ μ±κ³Ό ννλ ₯μ κ³ λ €ν λ λ‘ νμ μ μ λλ‘ μ¨μλ μ λλ€. λ‘ νμ μ μ¬μ©νλ μ½λ(= μ λ€λ¦μ μ¬μ©νμ§ μλ μ½λ)μ λ‘ νμ μ μ¬μ©νμ§ μλ μ½λ(= μ λ€λ¦μ μ¬μ©νλ μ½λ)λ₯Ό λΉκ΅ν΄ 보μ. π 1. λ‘ νμ μ μ¬μ©νλ κ²½μ° κΈ°λ³Έμ μΈ λμμ numbersμ μ«μλ₯Ό λ£κ³ λ°λ³΅λ¬Έμ ν΅ν΄ λ€μ΄κ° μ«μλ₯Ό νμΈνλ €κ³ νλ μ½λλ€. μ«μκ° λ€μ΄κ°μΌ νμ§λ§ λ¬Έμμ΄μ΄ ..

ν±λ 벨 ν΄λμ€λ ν νμΌμ νλλ§ λ΄μΌλΌ - [4μ₯. ν΄λμ€μ μΈν°νμ΄μ€(μμ΄ν 25)]
μμ€ νμΌμ νλμ ν±λ 벨 ν΄λμ€(ν±λ 벨 ν΄λμ€λ νμΌμ μ μλμ΄ μλ κ°μ₯ λ°κΉ₯μ μλ ν΄λμ€λ₯Ό λ§νλ€)λ₯Ό μ¬λ¬ κ° μ μΈνλλΌλ μ»΄νμΌν λλ λ¬Έμ κ° μλ€. μ ν¨ν λ¬Έλ²μ΄λΌλ κ²μ΄λ€. νμ§λ§ μ΄κ²μ μλ¬΄λ° λμ΄ μμλΏλλ¬ μ¬κ°ν μνμ κ°μν΄μΌ νλ€. κ·Έ μ΄μ λ ν μμ€ νμΌμ ν±λ 벨 ν΄λμ€λ₯Ό μ¬λ¬ κ° μ μΈνλ©΄ μ»΄νμΌ μμμ λ°λΌ κ²°κ³Όκ° λ¬λΌμ§ μ μκΈ° λλ¬Έμ΄λ€. λ¬Έμ μν©μ λν μμλ₯Ό μ΄ν΄λ³΄κ³ , ν΄κ²°μ± μ μμ보λλ‘ νμ. 1. λ¬Έμ μ π μ§κΈ°(Utensil)μ λμ νΈ(Dessert) ν΄λμ€κ° Utensil.javaλΌλ ν νμΌμ μ μλμ΄ μλ€κ³ νμ. // Utensil.java class Utensil { static final String NAME = "pan"; } class Dessert {..

λ©€λ² ν΄λμ€λ λλλ‘ staticμΌλ‘ λ§λ€λΌ - [4μ₯. ν΄λμ€μ μΈν°νμ΄μ€(μμ΄ν 24)]
μ€μ²© ν΄λμ€(nested class)λ λ€λ₯Έ ν΄λμ€ μμ μ μλ ν΄λμ€λ₯Ό λ§νλ€. μ€μ²© ν΄λμ€λ μμ μ κ°μΌ λ°κΉ₯ ν΄λμ€μμλ§ μ°μ¬μΌ νλ©°, κ·Έ μΈμ μ°μμκ° μλ€λ©΄ ν±λ 벨 ν΄λμ€λ‘ λ§λ€μ΄μΌ νλ€. μ€μ²© ν΄λμ€μ μ’ λ₯λ μλμ 4κ°μ§κ° μλ€. μ μ λ©€λ² ν΄λμ€ (λΉμ μ ) λ©€λ² ν΄λμ€ μ΅λͺ ν΄λμ€ μ§μ ν΄λμ€ 'μ μ λ©€λ² ν΄λμ€'λ₯Ό μ μΈνκ³ λ λͺ¨λ λ΄λΆ ν΄λμ€(inner class)μ ν΄λΉνλ€. 'μ μ λ©€λ² ν΄λμ€'μ 'λΉμ μ λ©€λ² ν΄λμ€'λ λ©€λ² ν΄λμ€μ ν΄λΉνλ€. μ΄λ² κΈμ ν΅ν΄ 4κ°μ§ μ€μ²© ν΄λμ€μ λν΄μ μμλ³΄κ³ , μ λ©€λ² ν΄λμ€λ λλλ‘ staticμΌλ‘ λ§λ€μ΄μΌ νλμ§ μμλ³΄κ³ μ νλ€. 1. μ μ λ©€λ² ν΄λμ€ π§° μ μ λ©€λ² ν΄λμ€λ λ€λ₯Έ ν΄λμ€ μμ μ μΈλκ³ , λ°κΉ₯ ν΄λμ€μ private λ©€λ²μλ..

νκ·Έ λ¬λ¦° ν΄λμ€λ³΄λ€λ ν΄λμ€ κ³μΈ΅κ΅¬μ‘°λ₯Ό νμ©νλΌ - [4μ₯. ν΄λμ€μ μΈν°νμ΄μ€(μμ΄ν 23)]
1. νκ·Έ λ¬λ¦° ν΄λμ€ π§ νκ·Έ λ¬λ¦° ν΄λμ€λ λ κ°μ§ μ΄μμ μλ―Έλ₯Ό ννν μ μμΌλ©°, κ·Έμ€ νμ¬ νννλ μλ―Έλ₯Ό νκ·Έ κ°μΌλ‘ μλ €μ£Όλ ν΄λμ€λ₯Ό λ§νλ€. μλ μ½λλ μκ³Ό μ¬κ°νμ ννν μ μλ νκ·Έ λ¬λ¦° ν΄λμ€μ΄λ€. public class Figure { enum Shape {RECTANGLE, CIRCLE}; // νκ·Έ νλ - νμ¬ λͺ¨μμ λνλΈλ€. final Shape shape; // λ€μ νλλ€μ λͺ¨μμ΄ μ¬κ°ν(RECTANGLE)μΌ λλ§ μ°μΈλ€. double length; double width; // λ€μ νλλ λͺ¨μμ΄ μ(CIRCLE)μΌ λλ§ μ°μΈλ€. double radius; // μμ© μμ±μ Figure2(double radius){ shape = Shape.CIRCLE; this...