๐ ์ถ์ํด๋์ค 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 |
๋ฉ์๋ ์ ์ธ๋ง ๊ฐ๋ฅ | ๋ฉ์๋์ ๋ถ๋ถ์ ์ธ ๊ตฌํ์ด ๊ฐ๋ฅ |
์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ๋ ํด๋์ค๋ ๋ฐ๋์ ์ธํฐํ์ด์ค์ ์๋ ๋ฉ์๋๋ฅผ ๋ค ๊ตฌํํด์ผ ํ์ง๋ง
์ถ์ํด๋์ค๋ฅผ ์์๋ฐ๋ ํด๋์ค๋ ์ถ์๋ฉ์๋๋ง ๊ตฌํํ๊ณ ์ผ๋ฐ๋ฉ์๋๋ ์ฌ์ฉํ์ง ์์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
'JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Java ] ์๋ฐ ๋ฒ์ ํ์ธ ๋ฐฉ๋ฒ (0) | 2022.06.15 |
---|---|
[ jQuery ] ajax / ๋น๋๊ธฐ ํต์ (0) | 2022.06.15 |
[ Java ] ํด๋์ค ๋ณ์/์ธ์คํด์ค ๋ณ์/์ง์ญ๋ณ์ (0) | 2022.05.10 |
JAVA ์ฉ์ด ์ ๋ฆฌ [1] JVM/์ค๋ ๋/์ค๋ฒ๋ก๋ฉ/์ค๋ฒ๋ผ์ด๋ฉ (0) | 2022.05.02 |
JAVA ์ฉ์ด ์ ๋ฆฌ [2] ํ๋ ์์ํฌ/์คํ๋ง/JSP/JSTL/JQuery (0) | 2022.05.02 |
๋๊ธ