1. ์ถ”์ƒํด๋ž˜์Šค์™€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ž€?

 1.1 ์ถ”์ƒ ํด๋ž˜์Šค : abstractํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ํด๋ž˜์Šค์ด๋ฉฐ, ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค.

 1.2 ์ถ”์ƒ ๋ฉ”์„œ๋“œ : ๋ฉ”์„œ๋“œ ๋ชธ์ฒด(๋ฐ”๋””)๊ฐ€ ์—†๋Š” ๋ฉ”์„œ๋“œ๋กœ, ์„ ์–ธ๋งŒ ๋˜์–ด ์žˆ๊ณ  ๊ตฌํ˜„์€ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.

 

2. ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ์•Œ๊ฒŒ๋œ ์ฃผ์š” ๊ฐœ๋…

 2.1 ์ถ”์ƒ ํด๋ž˜์Šค์— ๋ฉ”์„œ๋“œ ๋ฐ”๋””๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.

์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋Š” ๋ฉ”์„œ๋“œ ๋ฐ”๋””๊ฐ€ ์กด์žฌํ•˜๋ฉฐ ๋ฐ˜๋“œ์‹œ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ํ•„์š”๋Š” ์—†๋‹ค.

 

 2.2 ์ถ”์ƒ ํด๋ž˜์Šค์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ํ•„์ˆ˜.

์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

๋งŒ์•ฝ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž์‹ ํด๋ž˜์Šค๋„ ์ถ”์ƒ ํด๋ž˜์Šค๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 2.3 ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœ ๋ถˆ๊ฐ€

์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ๋ชธ์ฒด๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ˜ธ์ถœ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•œ ํด๋ž˜์Šค์— abstract๋ฅผ ์„ ์–ธํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ์„ ์ฐจ๋‹จํ•œ๋‹ค. 

 

 2.4 ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด ์ƒ์„ฑ ๋ถˆ๊ฐ€

Animal a = new Animal();์€ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์‹ค์ฒด๊ฐ€ ์—†๋Š” ๊ฐœ๋…์  ํด๋ž˜์Šค์ด๋ฉฐ, ์ž์‹ ํด๋ž˜์Šค์—์„œ ๊ตฌ์ฒดํ™”๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 2.5 ์ž์‹ ํด๋ž˜์Šค์˜ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋œ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์•ผํ•œ๋‹ค.

์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ž์‹ ํด๋ž˜์Šค๋„ ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

 

2.6 ์˜ˆ์‹œ: public abstract void ();

๋ฉ”์„œ๋“œ ๋ฐ”๋””๊ฐ€ ์—†๋Š” sound() ๋ฉ”์„œ๋“œ๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋กœ ์„ ์–ธ๋œ๋‹ค. ์ด๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž์‹ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

 

2.7 ์ถ”์ƒ ํด๋ž˜์Šค์˜ ๋ชฉ์ 

์ƒ์†์„ ๊ฐ•์ œํ•˜์—ฌ ์ž์‹ ํด๋ž˜์Šค์—์„œ ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋งŒ๋“ฆ.

์‹ค์ฒดํ™”๋˜์ง€ ์•Š์€ ๊ฐœ๋…์„ ๋ชจ๋ธ๋งํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋จ


<์‹ค์Šต ์ฝ”๋“œ>

// ์ถ”์ƒ ํด๋ž˜์Šค ์„ ์–ธ
abstract class Animal {
    // ์ถ”์ƒ ๋ฉ”์„œ๋“œ
    public abstract void sound();

    // ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ
    public void eat() {
        System.out.println("This animal eats food.");
    }
}

// ์ž์‹ ํด๋ž˜์Šค
class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Bark");
    }
}

public class Main {
    public static void main(String[] args) {
        // Animal a = new Animal(); // ์—๋Ÿฌ: ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šคํ™”ํ•  ์ˆ˜ ์—†์Œ
        Animal dog = new Dog();     // ์—…์บ์ŠคํŒ…
        dog.sound();                // "Bark" ์ถœ๋ ฅ
        dog.eat();                  // "This animal eats food." ์ถœ๋ ฅ
    }
}

3. ์™œ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๊ฒŒ abstract ํ‚ค์›Œ๋“œ๋กœ ๋ง‰๋Š”๊ฑธ๊นŒ?

 

3.1 ์ถ”์ƒ ํด๋ž˜์Šค์˜ ๋ชฉ์ 

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์‹ค์ฒดํ™”๋  ์ˆ˜ ์—†๋Š” ๊ณตํ†ต๋œ ๊ฐœ๋…์ด๋‚˜ ๊ธฐ๋ณธ ์„ค๊ณ„๋„๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

์ถ”์ƒ์  ๊ฐœ๋…์ด๋ž€, ๊ตฌ์ฒด์ ์ธ ๋™๋ฌผ, ์ฐจ๋Ÿ‰, ๋„ํ˜•์ด ์•„๋‹ˆ๋ผ, ์ด๋“ค์˜ ๊ณตํ†ต์ ์ธ ์†์„ฑ๊ณผ ํ–‰๋™๋งŒ์„ ์ •์˜ํ•œ๋‹ค.

์ƒ์†๊ณผ ๊ตฌํ˜„ ๊ฐ•์ œํ™”๋ž€,์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ž์‹ ํด๋ž˜์Šค์—์„œ ๊ณตํ†ต๋œ ๊ธฐ๋Šฅ์„ ์ƒ์†๋ฐ›๊ฒŒ ํ•˜๊ณ , ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐ•์ œํ•œ๋‹ค.

๋”ฐ๋ผ์„œ, ์ถ”์ƒ ํด๋ž˜์Šค ์ž์ฒด๋Š” ์™„์ „ํ•˜์ง€ ์•Š์€ ํด๋ž˜์Šค์ด๋‹ค. ์‹ค์ฒด๊ฐ€ ์—†๊ธฐ ๋–„๋ฌธ์— ์ด๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋Š” ๊ฒƒ์€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋งž์ง€ ์•Š๋‹ค.

 

3.2 ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

  3.2.1 ๊ตฌ์ฒด์ ์ธ ํ–‰๋™์ด ์ •์˜๋˜์ง€ ์•Š์Œ.

์ถ”์ƒํด๋ž˜์Šค๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ๋ฉ”์„œ๋“œ ๋ฐ”๋””๊ฐ€ ์—†์œผ๋ฏ€๋กœ, ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ด๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

abstract class Animal {
    public abstract void sound(); // ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ
}

Animal a = new Animal(); // ์—๋Ÿฌ: ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด sound()๋ฅผ ํ˜ธ์ถœํ•  ๋ฐฉ๋ฒ•์ด ์—†์Œ

 

  3.2.2 ๋ถˆ์™„์ „ํ•œ ์„ค๊ณ„๋กœ ์ธํ•ด ์‹ค์ฒดํ™”ํ•  ์ˆ˜ ์—†์Œ

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๊ตฌ์ฒด์ ์ธ ๋™์ž‘์„ ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ด๋ฅผ ๊ตฌ์ฒดํ™”ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. 

๋”ฐ๋ผ์„œ ์ถ”์ƒ ํด๋ž˜์Šค ์ž์ฒด๊ฐ€ ์ธ์Šคํ„ด์Šคํ™”๋˜๋ฉด, ํด๋ž˜์Šค ์„ค๊ณ„์˜ ๋ณธ์งˆ์ด ๊นจ์ง„๋‹ค.

 

  3.2.3 ์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค ๋น„๊ต

์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋น„์Šทํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜์ง€๋งŒ, 

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ผ๋ถ€ ๊ตฌํ˜„๋œ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด, ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ํ˜•ํƒœ(์ถ”์ƒ ๋ฉ”์„œ๋“œ)์ด๋‹ค.

- ์ถ”์ƒ ํด๋ž˜์Šค : ๊ณตํ†ต๋œ ๊ธฐ๋Šฅ๊ณผ ๊ตฌ์กฐ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ์„ค๊ณ„๋„.

- ์ธํ„ฐํŽ˜์ด์Šค : ํด๋ž˜์Šค ๊ฐ„์˜ ๊ณ„์•ฝ์„ ์ •์˜ํ•˜๋ฉฐ, ๋‹คํ˜•์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค. 

 

<์ž˜๋ชป๋œ ์‚ฌ์šฉ>

abstract class Animal {
    public abstract void sound();
}

Animal a = new Animal(); // ์—๋Ÿฌ: ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ง์ ‘ ์ธ์Šคํ„ด์Šคํ™”ํ•  ์ˆ˜ ์—†์Œ
a.sound(); // ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋Š” ๋ฉ”์„œ๋“œ

 

<์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ>

abstract class Animal {
    public abstract void sound(); // ์ถ”์ƒ ๋ฉ”์„œ๋“œ

    public void eat() {
        System.out.println("This animal eats food.");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Bark");
    }
}

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("Meow");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog(); // ์—…์บ์ŠคํŒ…
        dog.sound();            // "Bark"

        Animal cat = new Cat(); // ์—…์บ์ŠคํŒ…
        cat.sound();            // "Meow"
    }
}

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

 4.1 ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ

์ธํ„ฐํŽ˜์ด์Šค ๋‚ด ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถ”์ƒ ๋ฉ”์„œ๋“œ์ด๋‹ค. (๊ตฌํ˜„์ด ์—†๋‹ค.)

Java 8 ์ดํ›„์—๋Š” default ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ธํ„ฐํŽ˜์ด์Šค์—๋„ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ด์กŒ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋งŒ ํฌํ•จํ•œ๋‹ค.

 

 4.2 ๋‹ค์ค‘ ์ƒ์† ์ง€์›

Java์—์„œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋งŒ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๊ตฌํ˜„(implements)ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹คํ˜•์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋ฉฐ, ์„œ๋กœ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์กฐํ•ฉํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค.

 

 4.3 ๊ฐ์ฒด ์ƒ์„ฑ ๋ถˆ๊ฐ€

์ธํ„ฐํŽ˜์ด์Šค๋„ ์ถ”์ƒ์  ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌ์ฒด ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋งŒ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 4.4 ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋Š” implements ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

interface Animal {
    void sound(); // ์ถ”์ƒ ๋ฉ”์„œ๋“œ
    default void eat() { // Java 8 ์ดํ›„ default ๋ฉ”์„œ๋“œ
        System.out.println("This animal eats food.");
    }
}

class Dog implements Animal {
    @Override
    public void sound() {
        System.out.println("Bark");
    }
}

class Cat implements Animal {
    @Override
    public void sound() {
        System.out.println("Meow");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.sound(); // ์ถœ๋ ฅ: Bark
        dog.eat();   // ์ถœ๋ ฅ: This animal eats food.

        Animal cat = new Cat();
        cat.sound(); // ์ถœ๋ ฅ: Meow
    }
}

 


5. ์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ฐจ์ด์ 

+ Recent posts