• ๋‹คํ˜•์„ฑ

    2022. 5. 17.

    by. JuneBee

    728x90
    ๋ฐ˜์‘ํ˜•

    Polymorphism

    <1> ์ •์˜

    ๋‹คํ˜•์„ฑ์ด๋ž€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋งŽ์€ ํ˜•(ํƒ€์ž…)์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์„ฑ์งˆ์ด๋‹ค. ๋‹คํ˜•์„ฑ์€, ์ƒ์†๊ด€๊ณ„์— ์žˆ์„ ๋•Œ ์กฐ์ƒํด๋ž˜์Šค์˜ ํƒ€์ž…์œผ๋กœ ์ž์‹ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ๋ ˆํผ๋Ÿฐ์Šค ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ex) ํŒฅ๋ถ•์–ด๋นต is a ๋ถ•์–ด๋นต | ์Šˆํฌ๋ฆผ๋ถ•์–ด๋นต is a ๋ถ•์–ด๋นต | ํ”ผ์ž ๋ถ•์–ด๋นต is a ๋ถ•์–ด๋นต

    <2> ํ™œ์šฉ

    1. ๋‹คํ˜•์„ฑ์œผ๋กœ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค
      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);}}
      
    2. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ, ์˜ค๋ธŒ์ ํŠธ ํด๋ž˜์Šค๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์˜ค๋ธŒ์ ํŠธ ํด๋ž˜์Šค๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์กฐ์ƒ์ธ๋ฐ, ์˜ค๋ธŒ์ ํŠธ์˜ ๋ฐฐ์—ด์€ ์–ด๋–ค ํƒ€์ž…์˜ ๊ฐ์ฒด๋ผ๋„ ๋‹ค ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    3. ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋‹คํ˜•์„ฑ
      public void println (Object x){ //Object ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์žˆ์–ด์„œ ์ถœ๋ ฅ์ด ๋˜๊ณ ์žˆ๋˜๊ฑฐ์ž„
      	String s = String.valueOf(x);
      	synchronized(this){print(s); newLine();}}
      
    4. ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋งž์•„์•ผ ํ•˜๋Š”๋ฐ, 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

    1. ์ฐธ์กฐํ˜• ๊ฐ์ฒด์˜ ํ˜• ๋ณ€ํ™˜ 
      1. ๋ฌต์‹œ์  ์บ์ŠคํŒ… : child → super
        ์ž์† ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์กฐ์ƒ ํƒ€์ž…์œผ๋กœ ์ฐธ์กฐํ•  ๋•Œ์—๋Š” ํ˜•๋ณ€ํ™˜ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค
        ๐Ÿงธ์กฐ์ƒ์˜ ๋ชจ๋“  ๋‚ด์šฉ์ด ์ž์‹์—๊ฒŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฑ์ •ํ•  ํ•„์š” ์—†๋‹ค
      2. ๋ช…์‹œ์  ์บ์ŠคํŒ… : super → child
        ์กฐ์ƒ ํƒ€์ž…์„ ์ž์†ํƒ€์ž…์œผ๋กœ ์ฐธ์กฐํ•  ๋•Œ์—๋Š” ํ˜•๋ณ€ํ™˜ ์ƒ๋žต์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค ์กฐ์ƒ์„ ๋ฌด์ž‘์ • ์ž์†์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†์œผ๋‹ˆ ์ฃผ์˜ํ•˜์ž → instanceof ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ํŠน์ • ํด๋ž˜์Šค ํƒ€์ž…์ธ์ง€ boolean์œผ๋กœ ๋ฆฌํ„ดํ•œ ํ›„ true ์ผ๋•Œ์—๋งŒ ์บ์ŠคํŒ…ํ•  ๊ฒƒ

        ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” super → child ๋กœ์˜ ํ˜•๋ณ€ํ™˜ํ•œ ์ฝ”๋“œ์ด๋‹ค. ๋ช…์‹œ์  ์บ์ŠคํŒ… ์‹œ, instanceof ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ๋กœ ์บ์ŠคํŒ…์ด ๊ฐ€๋Šฅํ•œ์ง€ ์•„๋‹Œ์ง€ ํ™•์ธ์„ ํ•˜์ง€ ์•Š๋А๋‹ค๋ฉด, ์ž๋ฐ”๋Š” ์•Œ๋ ค์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹ ์ค‘ํ•˜๊ฒŒ ์จ์•ผํ•œ๋‹ค.
    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๋Š” ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฉ”์„œ๋“œ, ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค์—์„œ ์ปดํŒŒ์ผ ์‹œ์— ํƒ€์ž…์„ ์ฒดํฌํ•œ๋‹ค ์ฆ‰, ๋ฏธ๋ฆฌ ํ˜•๋ณ€ํ™˜์„ ํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    ํ‘œํ˜„

    1. ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ ์‹œ <> ์— ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ‘œ์‹œ
    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 ๋งŒ ๊ฐ€๋Šฅํ•ด์กŒ์–ด !
    }
    } //์ปดํŒŒ์ผ ํƒ€์ž…์— ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์ด ๋Œ€์ž…๋œ ํƒ€์ž…์œผ๋กœ ๋Œ€์ฒด๋จ!
    

    ์‚ฌ์šฉ

    1. 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>>{}
    
    728x90
    ๋ฐ˜์‘ํ˜•

    '๐Ÿ““ STUDY > JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    QUEUE  (0) 2022.05.18
    ์บก์Аํ™”  (0) 2022.05.17
    ์ƒ์†  (0) 2022.05.17
    ์ถ”์ƒํ™”  (0) 2022.05.17
    ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ  (1) 2022.05.17

    ๋Œ“๊ธ€