Abstract Class


public abstract class AbstractClass {
 
    private final String name;
 
    public AbstractClass(final String name) {
        this.name = name;
    }
 
    abstract void method();
 
    public String getName() {
        return name;
    }
}

Abstract Class, ์ถ”์ƒ ํด๋ž˜์Šค๋ž€ ํ•˜๋‚˜ ์ด์ƒ์˜ abstract ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•œ ํด๋ž˜์Šค๋กœ์จ ์ด๋ฅผ ์ƒ์†ํ•˜๋Š” ์ž์† ํด๋ž˜์Šค์—์„œ ์™„์„ฑํ•˜๋„๋ก ์œ ๋„ํ•˜๋Š” ํด๋ž˜์Šค๋‹ค.

์ผ๋ฐ˜ ํด๋ž˜์Šค์— abstract ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ๋ถˆ๊ฐ€ํ•˜๊ณ  ๋ฏธ์™„์„ฑ ์„ค๊ณ„๋„๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.

ํŠน์ง•

  • ๋‹จ์ผ ์ƒ์†๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ์ง‘ํ•ฉ๊ฐ„์—๋Š” ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค.

Interface


interface Interface {
 
    /* public static final */ String name = "name";
 
    /* public abstract */ void method();
 
    /* public */ static void staticMethod() {
        System.out.println("do something");
    }
 
    /* public */ default void defaultMethod() {
        System.out.println("do something");
    }
}

Interface ๋ž€ ์ƒ์ˆ˜์™€ abstract ๋ฉ”์„œ๋“œ์˜ ์ง‘ํ•ฉ์œผ๋กœ Abstract Class ์™€ ๋™์ผํ•˜๊ฒŒ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค์—์„œ abstract ๋ฉ”์„œ๋“œ๋ฅผ ์™„์„ฑํ•˜๋„๋ก ๊ฐ•์ œํ•˜์ง€๋งŒ Abstract Class ๋ณด๋‹ค ์ถ”์ƒํ™” ์ •๋„๊ฐ€ ๋†’๋‹ค.

์ถ”์ƒ ํด๋ž˜์Šค๊ฐ€ ๋ฏธ์™„์„ฑ ์„ค๊ณ„๋„๋ผ๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ธฐ๋ณธ ์„ค๊ณ„๋„๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ง•

  • ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ง‘ํ•ฉ๊ฐ„์—๋Š” ๊ด€๊ณ„๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ๋‹ค.
  • JDK1.8 static ๋ฉ”์„œ๋“œ์™€ default ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • default ๋ฉ”์„œ๋“œ์˜ ๋ชฉ์ ์€ ๊ตฌํ˜„์ฒด์— ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋  ๋ฉ”์„œ๋“œ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค์— ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.