๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JAVA

[ Java ] ์ถ”์ƒํด๋ž˜์Šค,์ถ”์ƒ๋ฉ”์„œ๋“œ/์ธํ„ฐํŽ˜์ด์Šค

by haeun ํ•˜์€ 2022. 5. 10.
728x90

๐Ÿ“Œ ์ถ”์ƒํด๋ž˜์Šค OR ์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” class, return type ์•ž์— abstract๋ฅผ ์ถ”๊ฐ€  

abstract class ํด๋ž˜์Šค๋ช…{

 abstract void ๋ฉ”์„œ๋“œ๋ช…();
}

 

โœ” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์•„๋„ abstract class๋กœ ์„ ์–ธํ•˜๋ฉด ์ด๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์ธ์ง€๋œ๋‹ค.

โœ” ์ƒ์†์„ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.


 

๐Ÿ“— ์ถ”์ƒํด๋ž˜์Šค(abstract class)

 

โœ” ์ถ”์ƒํด๋ž˜์Šค๋Š” ์ผ๋ฐ˜ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ๋ฏธ์™„์„ฑ๋˜์–ด ์žˆ๋Š” ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ƒ์†๊ด€๊ณ„๋ฅผ ๋งบ์€ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๊ฐ์ฒด ์ƒ์„ฑ๋˜์–ด์•ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

public abstract class Parent{

}โ€‹

๐Ÿ“– ์ถ”์ƒํ™” :๊ตฌ์ฒด์ ์ธ ๊ฐœ๋…์œผ๋กœ๋ถ€ํ„ฐ ๊ณตํ†ต๋œ ๋ถ€๋ถ„๋“ค๋งŒ ์ถ”๋ ค๋‚ด์–ด ์ผ๋ฐ˜ํ™” ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ, ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๊ณ„๊ฐ€ ์•„๋‹Œ ์•„์ง ๋ฏธ์™„์„ฑ(ๆœชๅฎŒๆˆ)์  ๊ฐœ๋…

โœ… ํ•œ ๊ฐœ ์ด์ƒ์˜ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค / ๊ฐ์ฒด ์ƒ์„ฑ ๋ถˆ๊ฐ€๋Šฅ

โœ… ์ถ”์ƒ๋ฉ”์„œ๋“œ๋Š” ์„ ์–ธ๋งŒ๋˜๊ณ  ๊ตฌํ˜„์ด ๋˜์ง€ ์•Š์€ ๋ถˆ์™„์ „ํ•œ ๋ฉ”์„œ๋“œ

โœ… ์ถ”์ƒ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋œ ํด๋ž˜์Šค๋Š” ์ถ”์ƒํด๋ž˜์Šค๋กœ ์„ ์–ธํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ์„ ๊ธˆ์ง€์‹œํ‚จ๋‹ค.

โœ… ์Šˆํผํด๋ž˜์Šค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์žˆ์œผ๋ฉฐ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์ง€ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•ด์•ผํ•œ๋‹ค.

 


๐Ÿ“Œ ์žฅ์ 

 

โœ”  ๋ถ€๋ชจํด๋ž˜์Šค์—์„œ ๊ณตํ†ต ๋ถ€๋ถ„์„ ๊ตฌํ˜„๊ณผ ์„ค๊ณ„๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์•„ ๊ธฐ๋Šฅ์„ ํ™•์žฅ ์‹œ ์ด๋กญ๋‹ค.

โœ”  ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐ•์š”ํ•œ๋‹ค. ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ํ‘œ์ค€ํ™” ์ •๋„๋ฅผ ๋†’์ธ๋‹ค.

โœ”  ๊ณตํ†ต ์‚ฌํ•ญ์ด ํ•œ๊ณณ์—์„œ ๊ด€๋ฆฌ๋˜์–ด ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ดํ•˜๋‹ค.

 


๐Ÿ“Œ ์ƒ์„ฑ ๋ฐฉ๋ฒ•

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ํด๋ž˜์Šค์ด๋‹ค. ๋ฏธ ๊ตฌํ˜„๋œ ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šคํ™” ์‹œํ‚ฌ์ˆ˜ ์—†๋‹ค.

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

๋ถ€๋ชจํด๋ž˜์Šค c = new ์ž์‹ํด๋ž˜์Šค();
or
์ž์‹ํด๋ž˜์Šค c = new ์ž์‹ํด๋ž˜์Šค();

 


๐Ÿ“— ์ถ”์ƒ๋ฉ”์„œ๋“œ(abstract method)

์ถ”์ƒํด๋ž˜์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ•œ ๊ฐœ์ด์ƒ์˜ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

์ถ”์ƒ๋ฉ”์„œ๋“œ๋Š” ์ผ๋ฐ˜๋ฉ”์„œ๋“œ์™€ ๋‹ค๋ฅด๊ฒŒ ๋ฉ”์„œ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š๋‹ค.

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

 

โœ… ๋‚ด์šฉ์ด ์—†๋Š” ๋ฉ”์„œ๋“œ, ๊ตฌํ˜„(์ •์˜)๋Š” ํ•˜์ง€ ์•Š๊ณ  ์„ ์–ธ๋งŒ ํ•œ ๋ฉ”์„œ๋“œ

โœ… ๋ฉ”์„œ๋“œ์˜ ๋‚ด์šฉ์ด ๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์ธ ๋‚ด์šฉ์ด๋ผ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ๊ตฌ์ฒดํ™”ํ•˜์—ฌ ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์—†์„ ๊ฒฝ์šฐ

์ถ”์ƒ๋ฉ”์„œ๋“œ๋กœ ์„ ์–ธ๋งŒํ•˜๊ณ  ์ƒ์†๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•˜๋„๋ก ํ•  ๋•Œ ์‚ฌ์šฉ

 

public abstract class Parent{
     public abstract void drive();
}

public class Child extends Parent{
     //์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉด Child ๊ฐ์ฒด ์ƒ์„ฑ ๋ถˆ๊ฐ€๋Šฅ
     public void drive(){
    System.out.println("๋‹ฌ๋ฆฌ๋‹ค");
}
}โ€‹

 


๐Ÿ“Œ ์„ ์–ธํ•˜๋Š” ์ด์œ 

์„ค๊ณ„์ž๊ฐ€ ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ ํด๋ž˜์Šค ๋ณ„๋กœ ์žฌ ๊ตฌํ˜„์„ ์›ํ•  ๋•Œ

๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์ž์‹ ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„์„ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒ

์ถ”์ƒ ๋ฉ”์„œ๋“œ๋กœ ์„ ์–ธํ•ด์„œ ์ž์‹ ํด๋ž˜์Šค๋Š” ์žฌ ๊ตฌํ˜„์„ ๊ฐ•์š”๋ฅผ ๋ฐ›๋Š”๋‹ค.

 


๐Ÿ“Œ ์ถ”์ƒ ํด๋ž˜์Šค์˜ ์ƒ์† ๊ด€๊ณ„

์ถ”์ƒ ํด๋ž˜์Šค๋“ค๊ฐ„์—๋„ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ผ๋ฐ˜ ํด๋ž˜์Šค๋“ค๊ฐ„์˜ ์ƒ์†๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ถ”์ƒ ํด๋ž˜์Šค๋“ค๊ฐ„์˜ ์ƒ์†์—์„œ๋Š” ์ƒ์† ๋ฐ›์€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋“ค์„ ๊ผญ ์žฌ์ •์˜ํ•  ํ•„์š”๋Š” ์—†๋‹ค. ๊ทธ๋ƒฅ ์ƒ์†๋งŒ ๋ฐ›์•„๋‘๊ณ  ์žˆ๋‹ค๊ฐ€ ์–ธ์ œ๊ฐ€ ์ผ๋ฐ˜ ํด๋ž˜์Šค์™€ ์ƒ์†๊ด€๊ณ„๊ฐ€ ์ด๋ฃจ์–ด ์งˆ ๋•Œ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๋•Œ ์žฌ์ •์˜ ํ•˜์ง€ ๋ชปํ–ˆ๋˜ ์ƒ์† ๋ฐ›์€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋“ค์„ ๋ชจ๋‘ ์ผ๋ฐ˜ ํด๋ž˜์Šค ๋‚ด์—์„œ ์žฌ์ •์˜ํ•ด๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 


๐Ÿ“— ์ธํ„ฐํŽ˜์ด์Šค(interface)

 

ํด๋ž˜์Šค๊ฐ€ ๋ฉค๋ฒ„ํ•„๋“œ(๋ณ€์ˆ˜,์ƒ์ˆ˜)์™€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌ์„ฑ์š”์†Œ๋กœ ํ•œ๋‹ค๋ฉด

์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ƒ์ˆ˜์™€ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌ์„ฑ์š”์†Œ๋กœ ํ•œ๋‹ค.

์ƒ์ˆ˜๋Š” staticํ•œ ์ƒ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ƒ์„ฑ ์—†์ด ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ

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

 

[์ ‘๊ทผ์ œํ•œ] interface [์ธํ„ฐํŽ˜์ด์Šค๋ช…] {
   ์ƒ์ˆ˜;
   ์ถ”์ƒ๋ฉ”์„œ๋“œ;
}

 

 


โœ” ํด๋ž˜์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ํ˜•์‹

class ํด๋ž˜์Šค๋ช… extends ์ƒ์†๋ฐ›์„ํด๋ž˜์Šค๋ช… implements ์ธํ„ฐํŽ˜์ด์Šค๋ช… {
๋‚ด์šฉ
}โ€‹

 

 


๐Ÿ”ฝ ์˜ˆ์ œ

interface haeunWorld{
    public void call();
}
 
 
public class InterfaceTest implements haeunWorld{
    
    public void call() { //์˜ค๋ฒ„๋ผ์ด๋“œ
        System.out.println("ํ•˜์€");
    }
    
    public static void main(String[] args) {
        InterfaceTest it = new InterfaceTest();
        
        it.call();
    }
 
}

 

 


โœ” ์ƒ์ˆ˜

public interface Number{
   public static final int NUM = 10;
}

public class Hello{
    public static void main(String[] args){
    System.out.println(Number.NUM);
}
}

 

 


โœ” ์ถ”์ƒ๋ฉ”์„œ๋“œ

public interface Inter{
    public abstract void product();
}

public class Item implements Inter{
   //์ถ”์ƒ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ
   public void product(){
      System.out.println("์ œํ’ˆ์„ ์ƒ์‚ฐํ•˜๋‹ค");
   }
}โ€‹

 

 


๐Ÿ“Œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์žฅ์ 

 

โœ”  ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ(ํ”„๋กœ๊ทธ๋žจ๊ธฐ๋Šฅ)์„ ํ‘œ์ค€ํ™”ํ•˜๊ณ  ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”  ๋ฉ”์†Œ๋“œํ™” ์‹œ์ผœ์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ถ„๋ฅ˜ํ•ด์•ผ ํ•˜๋Š” ๊ณ ๋ฏผ ์—†์ด ๊ตฌํ˜„๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๊ฐœ๋ฐœ์‹œ๊ฐ„์„ ๋‹จ์ถ• ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

โœ”  ์ผ๋ฐ˜ ํด๋ž˜์Šค ์ƒ์†์„ ์ด์šฉํ•ด์„œ ์ž์‹ ํด๋ž˜์Šค๋“ค์˜ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ด€๊ณ„ ๋ฅผ ๋งบ์„ ์ˆ˜ ์žˆ๋‹ค.

 


๐Ÿ“š ์ธํ„ฐํŽ˜์ด์Šค VS ์ถ”์ƒํด๋ž˜์Šค

 

๐Ÿ“Œ๊ณตํ†ต์ 

 

โœ… ์ถ”์ƒํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์„ ์–ธ๋งŒ ์žˆ๊ณ  ๊ตฌํ˜„ ๋‚ด์šฉ์ด ์—†๋‹ค.

โœ… ์ž๊ธฐ ์ž์‹ ์ด new๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ƒ์†๋ฐ›์€ ์ž์‹๋งŒ์ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… ์ƒ์†๋ฐ›์€ ์ž์‹์ด ๊ตฌํ˜„์„ ๋ฐ˜๋“œ์‹œ ํ•˜๋„๋ก ํ•ด์•ผํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

โœ… JAVA์—์„œ๋Š” type์ด ์ง€์ •๋˜์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ ์–ธ๋œ type๊ณผ ์ž์‹์˜ type์ด ๊ฐ™์•„์•ผ๋งŒ ํ•œ๋‹ค.

 

๐Ÿ“Œ ์ฐจ์ด์ 

 

์ธํ„ฐํŽ˜์ด์Šค(Interface) ์ถ”์ƒํด๋ž˜์Šค(Abstract Class) 
 ๊ตฌํ˜„ ๊ฐ์ฒด์˜ ๊ฐ™์€ ๋™์ž‘์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•จ ์ถ”์ƒํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๊ณ , ํ™•์žฅ์‹œํ‚ค๊ธฐ ์œ„ํ•จ 
 ๋‹ค์ค‘ ์ƒ์† ๊ฐ€๋Šฅ ๋‹ค์ค‘ ์ƒ์† ๋ถˆ๊ฐ€๋Šฅ 
 ์ถ”์ƒ๋ฉ”์„œ๋“œ๋งŒ ๊ฐ€๋Šฅ ์ผ๋ฐ˜๋ฉ”์„œ๋“œ+์ถ”์ƒ๋ฉ”์„œ๋“œ ๊ฐ€๋Šฅ
 ์ƒ์ˆ˜+์ถ”์ƒ๋ฉ”์„œ๋“œ ํ˜•ํƒœ ์ผ๋ฐ˜๋ณ€์ˆ˜(๊ฐ€๋Šฅ)+์ผ๋ฐ˜๋ฉ”์„œ๋“œ(๊ฐ€๋Šฅ)+์ถ”์ƒ๋ฉ”์„œ๋“œ ํ˜•ํƒœ 
 ์ƒ์„ฑ์ž์™€ ์ผ๋ฐ˜๋ณ€์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ ์ƒ์„ฑ์ž์™€ ์ผ๋ฐ˜๋ณ€์ˆ˜ ๋ชจ๋‘ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ 
 implments extends 
 ๋ฉ”์„œ๋“œ ์„ ์–ธ๋งŒ ๊ฐ€๋Šฅ ๋ฉ”์„œ๋“œ์˜ ๋ถ€๋ถ„์ ์ธ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅ 

 

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋Š” ๋ฐ˜๋“œ์‹œ ์ธํ„ฐํŽ˜์ด์Šค์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค ๊ตฌํ˜„ํ•ด์•ผ ํ•˜์ง€๋งŒ

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

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€