Language/JAVA

[JAVA] ์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค

๊ต ๋ฏผ 2024. 8. 19. 14:30

 

๐Ÿ“Œ ์ถ”์ƒํด๋ž˜์Šค : ๋ถ€๋ชจ ํด๋ž˜์Šค๋Š” ์ œ๊ณตํ•˜์ง€๋งŒ, ์‹ค์ œ ์ƒ์„ฑ๋˜๋ฉด ์•ˆ ๋˜๋Š” ํด๋ž˜์Šค
๐Ÿ“Œ ์ธํ„ฐํŽ˜์ด์Šค : ์ˆœ์ˆ˜ ์ถ”์ƒ ํด๋ž˜์Šค๋กœ, ์‹คํ–‰ ๋กœ์ง์„ ์ „ํ˜€ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ์ธ ์ถ”์ƒ ํด๋ž˜์Šค

 

์ถ”์ƒํด๋ž˜์Šค ์„ ์–ธ๋ฒ•
abstract class abstractClass {...} 

 : ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•  ๋•Œ ์•ž์— ์ถ”์ƒ์ด๋ผ๋Š” ์˜๋ฏธ์˜ abstract ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

 

์ถ”์ƒํด๋ž˜์Šค ํŠน์ง•
  • ์ง์ ‘ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • ์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š” ํด๋ž˜์Šค๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

 

์ถ”์ƒ ๋ฉ”์„œ๋“œ ์„ ์–ธ๋ฒ•
public abstract void abstractMethod();

 : ๋ฉ”์„œ๋“œ ์•ž์— ์ถ”์ƒ์ด๋ผ๋Š” ์˜๋ฏธ์˜ abstract ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

 

์ถ”์ƒ ๋ฉ”์„œ๋“œ ํŠน์ง•
  • ๋ฐ”๋”” ๋ถ€๋ถ„์ด ์—†๋‹ค.
  • ์ƒ์†๋ฐ›๋Š” ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ฐ˜๋“œ์‹œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • ์˜ค๋ฒ„๋ผ์ด๋”ฉ ์•ˆํ•˜๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

๐Ÿ“„ ์ถ”์ƒ ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ ์˜ˆ์‹œ ์ฝ”๋“œ 

// ์ถ”์ƒ ํด๋ž˜์Šค ์ •์˜
abstract class Animal {
    // ์ถ”์ƒ ๋ฉ”์„œ๋“œ ์ •์˜ - ๋ฐ”๋”” ์กด์žฌX
    public abstract void sound();
    
    //์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ : ๋ชจ๋“  ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    public void sleep() {
        System.out.println("Animal Sleep");
    }
}

// ๊ตฌ์ฒด ํด๋ž˜์Šค: Animal์„ ์ƒ์†๋ฐ›์•„ ์ถ”์ƒ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
class Dog extends Animal {
    @Override // ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ์˜ ์ถ”์ƒ๋ฉ”์„œ๋“œ ์žฌ์ •์˜
    public void sound() {
        System.out.println("Bark");
    }
}

// ๊ตฌ์ฒด ํด๋ž˜์Šค: Animal์„ ์ƒ์†๋ฐ›์•„ ์ถ”์ƒ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
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
        cat.sleep();  // ์ถœ๋ ฅ: Animal Sleep
    }
}

 

 

๐Ÿ“Œ  ์ˆœ์ˆ˜ ์ถ”์ƒ ํด๋ž˜์Šค : ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ์ธ ์ถ”์ƒ ํด๋ž˜์Šค

  • ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋ฐ”๋”” ๋ถ€๋ถ„์ด ์ „ํ˜€ ์—†๋‹ค. (์‹คํ–‰๋กœ์ง ์กด์žฌ x)
  • ๋‹คํ˜•์„ฑ์„ ์œ„ํ•œ ๋ถ€๋ชจํƒ€์ž…์œผ๋กœ์จ ๊ป๋ฐ๊ธฐ ์—ญํ• ๋งŒ ์ œ๊ณต
  • ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ž์‹์€ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ“„ ์ˆœ์ˆ˜ ์ถ”์ƒ ํด๋ž˜์Šค ์˜ˆ์‹œ ์ฝ”๋“œ

public abstract class AbstractAnimal {
 public abstract void sound();
 public abstract void move();
}

 

 

 

๐Ÿ“Œ ์ธํ„ฐํŽ˜์ด์Šค : ์ž๋ฐ”์—์„œ ์ˆœ์ˆ˜ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•œ ๊ฐœ๋…

  • ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋‘ public, abstract์ด๋‹ค.
  • ๋ฉ”์„œ๋“œ์— oublic abstract๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๊ณ , ์ƒ๋žต์ด ๊ถŒ์žฅ๋œ๋‹ค.
  • ๋‹ค์ค‘ ๊ตฌํ˜„(๋‹ค์ค‘ ์ƒ์†)์„ ์ง€์›ํ•œ๋‹ค.
    • ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ชจ๋‘ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์„ ์ž์‹ ํด๋ž˜์Šค์—์„œ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋‹ค์ด์•„๋ชฌ๋“œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๊ตฌํ˜„์€ ํ•˜๋‚˜๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ๋ฒ•

 : class๊ฐ€ ์•„๋‹ˆ๋ผ interface ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

//class๊ฐ€ ์•„๋‹Œ interface ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ
public interface InterfaceAnimal { 
       void sound();   // puiblic abstract ์ƒ๋žต๋œ ํ˜•ํƒœ
       void move();
}

 

์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜

 : ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋Š” public, static, final์ด ๋ชจ๋‘ ํฌํ•จ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ„์ฃผ๋œ๋‹ค.

public interface InterfaceMath {
 double PI = 3.14;  //public static final double PI = 3.14
}
  • final ์‚ฌ์šฉ์œผ๋กœ, ๊ณ ์น  ์ˆ˜ ์—†๋Š” ์ƒ์ˆ˜

 

 

โœ๏ธ ์ƒ์†๊ณผ ๊ตฌํ˜„

  • ์ƒ์† : ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ.
  • ๊ตฌํ˜„ : ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ž˜์Šค๊ฐ€ ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ์‹ค์ œ ๊ตฌํ˜„์€ ๊ตฌํ˜„ํด๋ž˜์Šค์—์„œ ์ด๋ฃจ์–ด์ง€๊ธฐ์— ๋ถ€๋ชจ์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋Šฅ์„ ์ž์‹์ด ์ƒ์†๋ฐ›์„ ๋•Œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

 

โœ๏ธ ์ƒ์†๊ณผ ๊ตฌํ˜„์„ ๋™์‹œ์— ํ•˜๋Š” ๊ฒฝ์šฐ

 : extends๋ฅผ ํ†ตํ•œ ์ƒ์†์€ ํ•˜๋‚˜๋งŒ ํ•  ์ˆ˜ ์žˆ๊ณ , implement๋ฅผ ํ†ตํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘ ๊ตฌํ˜„ ๊ฐ€๋Šฅ.

  • extends๊ฐ€ ๋จผ์ € ๋‚˜์™€์•ผ ํ•œ๋‹ค.
  • ๋‹ค์ค‘ ๊ตฌํ˜„์˜ ๊ฒฝ์šฐ " , " ๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌ๋ถ„
public class Bird extends Animal implements Dog, Cat { ... }