์ž๋ฐ”์˜ ์ •์„ - ์ถ”์ƒํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค

๋ธ”๋กœ๊ทธ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค! ๐Ÿก’ integer.blog



์ž๋ฐ”์˜ ์ •์„(๋‚จ๊ถ์„ฑ ์ €) ํ•™์Šต๋‚ด์šฉ ์ •๋ฆฌ

1. ์ถ”์ƒ ํด๋ž˜์Šค (Abstract class)

  • ๋ฏธ์™„์„ฑ ๋ฉ”์†Œ๋“œ(์ถ”์ƒ๋ฉ”์†Œ๋“œ)๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ผ๋ฐ˜ํด๋ž˜์Šค์™€ ๊ฐ™๋‹ค.
  • ์ถ”์ƒ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์–ด๋„ abstract๋ฅผ ๋ถ™์—ฌ์„œ ์ถ”์ƒํด๋ž˜์Šค๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ถ”์ƒํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ถ”์ƒํด๋ž˜์Šค๋Š” ์ƒ์†์„ ํ†ตํ•ด์„œ ์ž์†ํด๋ž˜์Šค์— ์˜ํ•ด์„œ๋งŒ ์™„์„ฑ๋œ๋‹ค.
    abstract class ํด๋ž˜์Šค์ด๋ฆ„  {
      ...
    }

2. ์ถ”์ƒ ๋ฉ”์†Œ๋“œ (Abstract method)

  • ์„ ์–ธ๋ถ€๋งŒ ์ž‘์„ฑํ•˜๊ณ  ๊ตฌํ˜„๋ถ€๋Š” ์ž‘์„ฑํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ์ถ”์ƒ๋ฉ”์†Œ๋“œ.
    /* ์ฃผ์„์„ ํ†ตํ•ด ๊ธฐ๋Šฅ ์„ค๋ช… */
    abstract ๋ฆฌํ„ดํƒ€์ž… ๋ฉ”์†Œ๋“œ์ด๋ฆ„();
  • ์ถ”์ƒํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›๋Š” ์ž์†ํด๋ž˜์Šค๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ†ตํ•ด ์กฐ์ƒ์ธ ์ถ”์ƒํด๋ž˜์Šค์˜ ์ถ”์ƒ๋ฉ”์†Œ๋“œ๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋งŒ์•ฝ ๋ถ€๋ชจ๋กœ ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์€ ์ถ”์ƒ๋ฉ”์†Œ๋“œ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž์‹ํด๋ž˜์Šค ์—ญ์‹œ ์ถ”์ƒํด๋ž˜์Šค๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

3. ์ธํ„ฐํŽ˜์ด์Šค

  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ผ์ข…์˜ ์ถ”์ƒํด๋ž˜์Šค๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ถ”์ƒํด๋ž˜์Šค์ฒ˜๋Ÿผ ์ถ”์ƒ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ–์ง€๋งŒ, ์ถ”์ƒํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ๋ชธํ†ต์„ ๊ฐ–์ถ˜ ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ ๋˜๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์˜ค์ง ์ถ”์ƒ๋ฉ”์†Œ๋“œ์™€ ์ƒ์ˆ˜๋งŒ์„ ๋ฉค๋ฒ„๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

4. ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ž‘์„ฑ

  • interface PlayingCard {
      public static final int SPADE = 4;
      final int DIAMOND = 3; //public static final int DIAMOND = 3;
      static int HEART = 2;  //public static final int HEART = 2;
      int CLOVER = 1;        //public static final int CLOVER = 1;
      
      public abstract String getCardNumber();
      String getCardKind();  //public abstract String getCardKind();
    }
  • ๋ชจ๋“  ๋ฉค๋ฒ„๋ณ€์ˆ˜๋Š” public static final ์ด์–ด์•ผํ•˜๋ฉฐ, ์ด๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” public abstract ์ด์–ด์•ผํ•˜๋ฉฐ, ์ด๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹จ, jdk 1.8๋ถ€ํ„ฐ static ๋ฉ”์„œ๋“œ์™€ ๋””ํดํŠธ ๋ฉ”์„œํŠธ๋Š” ์˜ˆ์™ธ

5. ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒ์†๊ณผ ๊ตฌํ˜„

  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ๋งŒ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋„ ์ถ”์ƒํด๋ž˜์Šค์ฒ˜๋Ÿผ ๊ทธ ์ž์ฒด๋กœ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค.
  • ํด๋ž˜์Šค๋Š” extends(ํ™•์žฅํ•˜๋‹ค) ์‚ฌ์šฉ, ์ธํ„ฐํŽ˜์ด์Šค๋Š” implements(๊ตฌํ˜„ํ•˜๋‹ค) ์‚ฌ์šฉ.
  • ์ƒ์†๊ณผ ๊ตฌํ˜„์„ ๋™์‹œ์— ํ•  ์ˆ˜ ์žˆ๋‹ค.
    class Fighter extends Unit implements Fightable {
      public void move(int x, int y)  { /* ๋‚ด์šฉ ์ƒ๋žต */ }
      public void attack(Unit u)  { /* ๋‚ด์šฉ ์ƒ๋žต */ }
    }

6. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•œ ๋‹คํ˜•์„ฑ

  • ๋ฆฌํ„ด ํƒ€์ž…์ด ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋Š” ๊ฒƒ์€ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

    Fightable method()  {
        ...
        Fighter f = new Fighter();
        return f;
    }

  • repair ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ Repairable๋กœ ์„ ์–ธํ•˜๋ฉด, ์ด ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Repairable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋งŒ ๋ฐ›์•„๋“ค์—ฌ์ง„๋‹ค.

    interface Repairable() {}
    class SCV extends GroundUnit implements Repairable {
        ...
    }
    class Tank extends GroundUnit implements Repairable {
        ...
    }
    class Drop extends AirUnit implements Repairable  {
        ...
    }
    void repair(Repairable r) {
        // ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ๋ฐ›์€ ์œ ๋‹›์„ ์ˆ˜๋ฆฌํ•œ๋‹ค.
    }

  • ์•ž์œผ๋กœ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ, SCV์˜ repair ๋ฉ”์†Œ๋“œ์— ์˜ํ•ด ์ˆ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋ ค๋ฉด Repairable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

  • ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๊ฐ–๋Š” ์˜๋ฏธ๋Š” ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

7. default ๋ฉ”์†Œ๋“œ์™€ static ๋ฉ”์†Œ๋“œ

  • ์ธํ„ฐํŽ˜์ด์Šค์— ์›๋ž˜ ์ถ”์ƒ๋ฉ”์†Œ๋“œ๋งŒ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, JDK1.8๋ถ€ํ„ฐ default ๋ฉ”์†Œ๋“œ์™€ static ๋ฉ”์†Œ๋“œ๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค์˜ default๋ฉ”์†Œ๋“œ์™€ static๋ฉ”์†Œ๋“œ๋Š” ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ ํ•ญ์ƒ public์ด๋ฉฐ, ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • default ๋ฉ”์†Œ๋“œ๋Š” ์ถ”์ƒ๋ฉ”์†Œ๋“œ์˜ ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.
  • default ๋ฉ”์†Œ๋“œ๋Š” ์ถ”์ƒ๋ฉ”์†Œ๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— default ๋ฉ”์†Œ๋“œ๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜์–ด๋„ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • default ๋ฉ”์†Œ๋“œ๋Š” ์ถ”์ƒ๋ฉ”์†Œ๋“œ์™€ ๋‹ฌ๋ฆฌ ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ์ฒ˜๋Ÿผ ๋ชธํ†ต{}์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

8. ๋‚ด๋ถ€ํด๋ž˜์Šค

  • ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค ๋‚ด์— ์„ ์–ธ๋œ ํด๋ž˜์Šค๋‹ค.
  • ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ์ฃผ๋กœ AWT๋‚˜ Swing๊ณผ ๊ฐ™์€ GUI์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ด๋ฒคํŠธ์ฒ˜๋ฆฌ ์™ธ์—๋Š” ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ์ข…๋ฅ˜์™€ ํŠน์ง•
    • instance class
      • ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์„ ์–ธ์œ„์น˜์— ์„ ์–ธ.
      • ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„์ฒ˜๋Ÿผ ๋‹ค๋ฃจ์–ด์ง„๋‹ค.
      • ์ฃผ๋กœ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„๋“ค๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…์— ์‚ฌ์šฉ๋  ๋ชฉ์ ์œผ๋กœ ์„ ์–ธ๋œ๋‹ค.
    • static class
      • ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์„ ์–ธ์œ„์น˜์— ์„ ์–ธ.
      • ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ static ๋ฉค๋ฒ„์ฒ˜๋Ÿผ ๋‹ค๋ฃจ์–ด์ง„๋‹ค.
      • ํŠนํžˆ static ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉ๋  ๋ชฉ์ ์œผ๋กœ ์„ ์–ธ๋œ๋‹ค.
    • local class
      • ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋‚˜ ์ดˆ๊ธฐํ™”๋ธ”๋Ÿญ ์•ˆ์— ์„ ์–ธ.
      • ์„ ์–ธ๋œ ์˜์—ญ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
    • anonymous class
      • ํด๋ž˜์Šค์˜ ์„ ์–ธ๊ณผ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์„ ๋™์‹œ์— ํ•˜๋Š” ์ด๋ฆ„์—†๋Š” ํด๋ž˜์Šค(์ผํšŒ์šฉ)