λ€νμ±
Polymorphism
<1> μ μ
λ€νμ±μ΄λ νλμ κ°μ²΄κ° λ§μ ν(νμ )μ κ°μ§ μ μλ μ±μ§μ΄λ€. λ€νμ±μ, μμκ΄κ³μ μμ λ μ‘°μν΄λμ€μ νμ μΌλ‘ μμ ν΄λμ€ κ°μ²΄λ₯Ό λ νΌλ°μ€ ν μ μλ€.
ex) ν₯λΆμ΄λΉ΅ is a λΆμ΄λΉ΅ | μν¬λ¦ΌλΆμ΄λΉ΅ is a λΆμ΄λΉ΅ | νΌμ λΆμ΄λΉ΅ is a λΆμ΄λΉ΅
<2> νμ©
- λ€νμ±μΌλ‘ λ€λ₯Έ νμ
μ λ°μ΄ν°λ₯Ό νλμ λ°°μ΄λ‘κ΄λ¦¬ν μ μλ€
public ArrayList(int initialCapacity){ if(initialCapcity>0){this.elementData = new Object [initialCapacity];} else if (initialCapacity ==0 ){this.elementData = EMPTY_ELEMENTDATA;} else{throw new IllegalArgumentException ("Illegal Capcity: " + initialCapacity);}}
- λνμ μΈ μλ‘, μ€λΈμ νΈ ν΄λμ€λ₯Ό λ³Ό μ μλ€. μ€λΈμ νΈ ν΄λμ€λ λͺ¨λ ν΄λμ€μ μ‘°μμΈλ°, μ€λΈμ νΈμ λ°°μ΄μ μ΄λ€ νμ μ κ°μ²΄λΌλ λ€ μ μ₯ν μ μκΈ° λλ¬Έμ μλ°μ μλ£κ΅¬μ‘°λ₯Ό κ°λ¨νκ² μ²λ¦¬ν μ μλ€.
- λ§€κ°λ³μμ λ€νμ±
public void println (Object x){ //Object λ₯Ό νμ±νκ³ μμ΄μ μΆλ ₯μ΄ λκ³ μλκ±°μ String s = String.valueOf(x); synchronized(this){print(s); newLine();}}
- λ©μλκ° νΈμΆλκΈ° μν΄μλ λ©μλ μ΄λ¦κ³Ό νλΌλ―Έν°κ° λ§μμΌ νλλ°, println μλ 무μμ λ£μ΄λ μΆλ ₯μ΄ λλ€ → μκ·Έλ΄κΉ? μλλ printlnμ μμ€ μ½λμ΄λ€
λ€νμ±κ³Ό μ°Έμ‘°ν κ°μ²΄μ νλ³ν
λ©λͺ¨λ¦¬μ μλλΌλ μ°Έμ‘°νλ λ³μμ νμ μ λ°λΌ μ κ·Όν μ μλ λ΄μ©μ΄ μ νλλ€
Method Area: ν΄λμ€ λ‘λ© μ μμ± - ν΄λμ€ μ체 μ λ³΄λ§ μ¬λΌκ°λ€ JVM Stacks : static λ³μ/ λ©μλκ° μμΈλ€ Heap : non-static λ³μ/ λ©μλκ° μμΈλ€. new keyword κ° μ°μΈ μ λ€μ΄ μ¬κΈ°λ‘ μ¨λ€ → λ 립μ
https://junebee.tistory.com/6 μ°Έκ³
Variables
1. μμ (1) μ μ μμλ νλ² μ μ₯ν λ°μ΄ν° κ°μ λ³κ²½ν μ μλ€ format: final datatype VARNAME; public static void main(String[] args){ //λ³μ int age = 30; String name = June; /*age = 20; λ‘ μμ κ°..
junebee.tistory.com
- μ°Έμ‘°ν κ°μ²΄μ ν λ³ν
- 묡μμ μΊμ€ν
: child → super
μμ νμ μ κ°μ²΄λ₯Ό μ‘°μ νμ μΌλ‘ μ°Έμ‘°ν λμλ νλ³ν μλ΅μ΄ κ°λ₯νλ€
π§Έμ‘°μμ λͺ¨λ λ΄μ©μ΄ μμμκ² μκΈ° λλ¬Έμ κ±±μ ν νμ μλ€ - λͺ
μμ μΊμ€ν
: super → child
μ‘°μ νμ μ μμνμ μΌλ‘ μ°Έμ‘°ν λμλ νλ³ν μλ΅μ΄ λΆκ°λ₯νλ€ μ‘°μμ 무μμ μμμΌλ‘ λ°κΏ μ μμΌλ μ£Όμνμ → instanceof μ°μ°μλ₯Ό μ΄μ©νμ¬ μ€μ λ©λͺ¨λ¦¬μ μλ κ°μ²΄κ° νΉμ ν΄λμ€ νμ μΈμ§ booleanμΌλ‘ 리ν΄ν ν true μΌλμλ§ μΊμ€ν ν κ²
μλμ μ½λλ super → child λ‘μ νλ³νν μ½λμ΄λ€. λͺ μμ μΊμ€ν μ, instanceof λ₯Ό μ¬μ©νμ¬ μ€μ λ‘ μΊμ€ν μ΄ κ°λ₯νμ§ μλμ§ νμΈμ νμ§ μλλ€λ©΄, μλ°λ μλ €μ£Όμ§ μκΈ° λλ¬Έμ μ μ€νκ² μ¨μΌνλ€.
- 묡μμ μΊμ€ν
: child → super
Pokemon pikachu = new Pokemon ();
if (pikachu instanceof FairyType) { FairyType ft = (FairyType) pikachu; }
//μμ μ½λμ²λΌ instance of λ₯Ό μ°μ§ μμμ κ²½μ°μλ,
Pokemon phantom = new Pokemon ();
FairyType ft2 = (FairyType) phantom;
phantom.angelicKiss();
//compile error λ°μμ΄ μλ¨. μμΉ«νλ©΄ μ€μ· λλ€ νλ€κ° νλ‘κ·Έλ¨ λΆμ€μλ μλ€..
2. μ°Έμ‘° λ³μμ λ 벨μ λ°λ₯Έ κ°μ²΄μ λ§΄λ² μ°κ²°
1. μμ κ΄κ³μμ κ°μ²΄μ λ§΄λ² λ³μκ° μ€λ³΅λ λ, μ°Έμ‘°λ³μμ νμ
μ λ°λΌ μ°κ²°μ΄ λ¬λΌμ§
(2) μμκ΄κ³μμ λ©μλκ° μ€λ³΅λ λ (Method Overriding) : 무쑰건 μμ ν΄λμ€μ λ©μλκ° νΈμΆλλ©°, μ΅λν λ©λͺ¨λ¦¬μ μμ±λ μ€μ²΄ κ°μ²΄μ μ΅μ ν λ λ©μλκ° λμνλ€ (μ¦, overriding λ λ©μλκ° μλ€λ©΄, κ·Έ λ©μλλ₯Ό μΆλ ₯νλ κ²)
μλμ μ½λλ λλ€ κ°μ κ²°κ³Όλ₯Ό μΆλ ₯νλ€. μ΄λ println μ toString() override λλ¬Έμ΄λ€
System.out.println(Phantom.toString());
System.out.println(Phantom);
<3> Generics
Genericsλ λ€μν νμ μ κ°μ²΄λ₯Ό λ€λ£¨λ λ©μλ, 컬λ μ ν΄λμ€μμ μ»΄νμΌ μμ νμ μ 체ν¬νλ€ μ¦, 미리 νλ³νμ νμ§ μμλ μ¬μ©ν μ μκ² νλ κ²μ΄λ€.
νν
- ν΄λμ€ λλ μΈν°νμ΄μ€ μ μΈ μ <> μ νμ νλΌλ―Έν°λ₯Ό νμ
className : Raw Type
className<T> : Generic Type
public class ClassName<T> {}
public interface InterfaceName<T> {}
2. νμ νλΌλ―Έν° μμμ μ°Έμ‘°ν νμ μ λ»ν¨
π€¦π»βοΈ T : reference Type
E : Element
K : Key
V : Value
public class ArrayList<E> extends AbstractList<E> implements List<E>, RnadomAccess, Cloneable {...}
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Serializable{...}
3. κ°μ²΄ μμ± λ³μμͺ½κ³Ό μμ± μͺ½μ νμ μ λ°λμ κ°μμΌ νλ€
ClassName <String> generic1 = new ClassName<String>();
List<Integer> generic2 = new ArrayList<Integer>();
List<String> generic3 = new ArrayList<Character>(); //νλ¦Ό
μμ
public class GenericClass<T> {
private T something;
public T getSomething(){return something;}
public void setSome(T something){this.something = something;}}
public class Test{
private static void genericTest(){
//< > μμ μνλ νμ
μ λ£κΈ°
GenericClass <String> gStr = new GnericClass<>(); //String μ΄λΌκ³ μ μνλ©΄..?
GenericClass <Integer> gInt = new GenericClass<> (); //Integerλ κ°λ₯,,?!
//μνλ νμ
μ§μ΄ λ£κΈ°
gStr.setsomething("String somethingμ΄λΌκ³ μ ν΄μ Έμ λμ..!");}
gInt.setsomething("Integer something μ΄λΌκ³ suggest λ!");
//μνλ νμ
λμ§μ΄ λ΄κΈ°
String gStr2 = gStr.getSomething();
System.out.println(gStr2); //μ€ λΊλλ string λ§ κ°λ₯ν΄μ‘μ΄ !
}
} //μ»΄νμΌ νμ
μ νμ
νλΌλ―Έν°λ€μ΄ λμ
λ νμ
μΌλ‘ λ체λ¨!
μ¬μ©
- Type Parameter μ μ ν νμμ λ°λΌ ꡬ체μ μΈ νμ
μ νμ΄ νμνλ€.
ex: κ³μ°κΈ° νλ‘κ·Έλ¨ κ΅¬ν μ Number μ΄νμ νμ (byte, short, interger..) λ‘λ§ μ νν΄μΌ νλ€
type parameter μ μΈ λ€ extends μ ν¨κ» μμ νμ μ λͺ μνμ¬ μ ννλ€.
class Number< T extends Number>{} //Tλ Number λ₯Ό μμ λ°μμΌ νλ€
2. μΈν°νμ΄μ€λ‘ μ νν κ²½μ°λ extends μ¬μ©
3. ν΄λμ€μ ν¨κ» μΈν°νμ΄μ€ μ μ½ μ‘°κ±΄μ μ΄μ©ν κ²½μ° & λ‘ μ°κ²°
class TypeRestrcit1 <T extends Cloneable> ();
class TypeRestrict2 <T extends Number & Cloneable & Comparable<String>>{}