-
728x90๋ฐ์ํ
<1> Abstraction
ํด๋์ค๋ ์ถ์ํ์ ์ต์ ๋จ์์ด๋ค
์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์ถ์ํ ํ์ฌ ํด๋์ค๋ก ๋ง๋ค๊ณ , ์ด ํด๋์ค๋ฅผ ๊ตฌ์ฒดํ ํ๋ฉด ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๊ฐ ๋๋ค
Practice Problem: ์๋ ํด๋์ค๋ค์ ๊ณตํต ๋ถ๋ชจ๋ฅผ ๋ฝ์์ ์์ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด ๋ณด์
public class DiselSuv{private int curX, curY;public void reportPosition(){System.out.printf("ํ์ฌ ์์น: (%d, %d)%n" ,curX, curY );}public void addFuel(){System.out.printf("์ฃผ์ ์์์ ๊ธ์ ");}}public class ElectricCar{private int curX, curY;public void reportPosition(){System.out.printf("ํ์ฌ ์์น: (%d %d)%n", curX, curY);}public void addFuel(){System.out.printf("๊ธ์ ์ถฉ์ ");}}}์์ ๊ตฌ์กฐ๋ก ์ ๋ฌธ์ ๋ฅผ ํํํ๋ฉด ์๋์ ๊ฐ์ ์ฝ๋๋ก ์์ฑ ํด ๋ณผ ์ ์๋ค
public class Car{private int curx, curY;public void reportPosition(){System.out.printf("ํ์ฌ ์์น: (%d %d)%n",curX,curY);}}public void addFuel(){**System.out.pirntf("์ฐ๋ฃ");} //์ ๊ฒฐ๊ตด ์์ฐ๋น?**}class DiselSuv extends Car {//@override -> ์ฐ๋ฃ๋ฅผ ์ง์ฐ๊ณ ์ค๋ฒ๋ผ์ด๋๋ฅผ ์์จ๊น?public void addFuel(){System.out.println("์ฃผ์ ์์์ ๊ธ์ ");}}class ElectricCar extends Car{@overridepublic void addFuel(){System.out.println("๊ธ์์ถฉ์ ");}}}//Testpublic class CarTest{public static void main(String[ ]args){Car[] c = {new DiselSuv(), new ElectricCar()};for(Car cx = c){cx.addFuel(); cx.reportPosition();}}}์์์ ํตํด ์ฝ๋ํ ํ์๋๋, ๊ฒฐ๊ตญ Car class ์์ ์๋ addFuel() ์ "์ฐ๋ฃ"๋ ๋จ ํ๋ฒ๋ ์ฐ์ด์ง ์๊ณ ๋ชจ๋ ์ค๋ฒ๋ผ์ด๋ ๋์๋ค. ํ์ง๋ง addFuel() ๋ฉ์๋๋ฅผ ์ง์๋ฒ๋ฆฐ ํ, ๋์ ค๊ณผ ์ ๊ธฐ์ฐจ ํด๋์ค ์์ override๋ฅผ ์์ ๊ณ ์ง์ ๋ฉ์๋๋ฅผ ๋ง๋ ๋ค๋ฉด, Test ํด๋์ค์์๋ ๋ถ๋ชจ ํด๋์ค์ addFuel์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
for(Car cx = c){cx.addFuel(); cx.reportPosition();}if ( cx instance of ElectricCar) {ElectricCar ev = new (ElectricCar) cx;cx.addFuel();}else if (cx instance of DiselSuv) {DiselSuv ds = new (DiselSuv) cx;cx.addFuel();์ฆ, ์์ํ ์ฐ์ด์ง ์๋ Car Class ์ ์ฐ๋ฃ ๋ฉ์๋๋ฅผ ์์ ๋ฒ๋ฆฐ๋ค๋ฉด, Car Test ํด๋์ค ์์์ Car ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์ด๋ค ์์ ํด๋์ค์ ์ํด์๋์ง ์ผ์ผ์ด ํ์ธํด๋ด์ผ ํ๋ค.
์ง๊ธ ์ด car ๊ฐ์ฒด๊ฐ ํน์..ev๋? ์๋๋ฉด ๋์ ค? ํ์ด๋ธ๋ฆฌ๋...?
โ ์์ฒญ ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ๋ณต์กํด์ง๋ค!์ด๋ฅผ ํด๊ฒฐํด ์ค ์ ์๋ ํด๋์ค๊ฐ ๋ฐ๋ก abstract class ์ด๋ค
<2> Abstract Class
Abstract Class ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ ํด๋์ค๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ฉฐ, ํด๋์ค ์ ์ธ๋ถ์ abstract ๋ฅผ ์ถ๊ฐํ์ฌ ์ ์ธํ๋ค.
์ธ์ abstract class ๋ฅผ ์จ์ผ ํ ๊น?
์์ ํด๋์ค์์ ๋ฐ๋์ ์ฌ์ ์ ๋์ด ์ฌ์ฉ โ ์กฐ์์ ๊ตฌํ์ด ๋ฌด์๋ฏธํ ๋ฉ์๋์ผ ๋ [EX] ์กฐ์์ addFuel()์ ์๋ฌด์ง์ ์ธ๋ชจ ์์๋ค...ใ โabstract class ๋ก ๊ตฌํํ์
abstract class Car {private int curX, curY;public void reportPosition(){ System.out.prinf("ํ์์น: (%d %d)%n", curX, curY);}public abstract void addFuel();// abstract method design pattern -> body ์๋ค}์์ ์ฝ๋๋ ๋ถ๋ชจ ํด๋์ค๋ก ์ฐ์ด๋ Car class๋ฅผ abstract class๋ก ๋ง๋ ์ฝ๋์ด๋ค. ์ด ๋, abstract class๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ ํด๋์ค๋ผ๊ณ ํ๋๋ฐ, ํ ์คํธ ํด๋์ค์์์ ์ฝ๋๋ ์ด๋ป๊ฒ ๋ฐ๋์ด์ผ ํ ๊น?
//Car cx = new Car();Car cxx = new DisselSuv(); //์์์ ์ฐธ์กฐํ๋ค๋น๋ก, abstract class๋ฅผ ๊ฐ์ฒด๋ก ์์ฑํ ์๋ ์์ง๋ง, ์์ ํด๋์ค ํ์ ์ผ๋ก ์์์ธ disselsuv ํด๋์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
๐คฆ๐ปโโ๏ธ ์กฐ์ ํด๋์ค์์ ์์๋ฐ์ abstract ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ์ง ์์ ๊ฒฝ์ฐ: ํด๋์ค ๋ด๋ถ์ abstract method ๊ฐ ์๋ ์ํฉ์ด๋ฏ๋ก ์์ํด๋์ค๋ abstract ํด๋์ค๋ก ์ ์ธ๋์ด์ผ ํ๋ค
์ abstract class๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น?
abstract class ๋ ๊ตฌํ์ ๊ฐ์ ๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ํฅ์์ํค๋ฉฐ, interface์ ์๋ ๋ฉ์๋ ์ค ๊ตฌํํ ์ ์๋ ๋ฉ์๋๋ฅผ ๊ตฌํํด ๊ฐ๋ฐ์ ํธ์๋ฅผ ์ง์ํ๋ค.
<3> Interface
์ธํฐํ์ด์ค๋ ์ต๊ณ ์์ค์ ์ถ์ํ ๋จ๊ณ๋ก, ๋ชจ๋ ๋ฉ์๋๊ฐ abstract ํํ์ด๋ค JDK 8์์ default method ์ static method๋ฅผ ์ถ๊ฐ๋์ด body๋ฅผ ๊ฐ์ง๊ณ ์๋ ํํ๋ ์๋ค.
๐งธ static์ ํญ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ์๋ค
ํํ
ํด๋์ค์ ์ ์ฌํ๊ฒ ์ ์ธํ๋ค ๋งด๋ฒ ๊ตฌ์ฑ:
1. ๋ชจ๋ ๋งด๋ฒ ๋ณ์๋ public static final ์ด๋ฉฐ ์๋ต ๊ฐ๋ฅํ๋ค
2. ๋ชจ๋ ๋ฉ์๋๋ public abstract ์ด๋ฉฐ ์๋ต ๊ฐ๋ฅํ๋ค
public interface InterfaceName{public static final int MEMBER1 =1;int MEMBER2 = 2; //public static final์ด ์๋ ์๋ตpublic abstract void method(int parameter);void method2 (int parameter); //public abstract ์๋ต}๋ฐ๋ผ์, method overriding ์์ ์ฃผ์ํด์ผ ํ ์ ์, Method Overriding์ ํ๊ธฐ ์ํด์ , ๋ถ๋ชจ์ ์ ๊ทผ์ ํ์๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ฝ๋์ void method2 (int parameter) ๊ฐ ๋ํดํธ ์ ๊ทผ ์ ํ์๊ฐ ์๋๋ผ public ์ ๊ทผ์ ํ์ ์ธ๊ฒ์ ์ธ์งํด์ผํ๋ค. ์ค๋ฒ๋ผ์ด๋ฉ์ ์กฐ๊ฑด์ ์์ ํ์ด์ง์์ ํ์ธํ๋๋ก ํ์.
์์
- ํด๋์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธํฐํ์ด์ค๋ Extends ๋ฅผ ์ด์ฉํด ์์์ด ๊ฐ๋ฅํ๋ค
- ์ธํฐํ์ด์ค๋ ๋ค์ค ์์์ด ๊ฐ๋ฅํ๋ค. ์ด์ ๋ ๋ฉ์๋์ ๊ตฌํ์ด ์๊ธฐ ๋๋ฌธ์, ํด๋์ค์ ์์๊ณผ๋ ๋ฐ๋๋ก ํผ๋์ ์ค ์ ์๋ ์ํฉ์ด ์๋ค
interface ๋ฐ์ฃฝ {boolean ์ฃผ๋ฌผ์ฃผ๋ฌผ(boolean ๋ฐ๊ฐ๋ฃจ); }interface ์ {boolean ๊ฝ๊ฝ๋ด์(String ์์ฌ๋ฃ); }interface ๋นตํ๋๋ฅด๊ธฐ {void ๊พน๊พน๋๋ฌ(int time); }public interface ๋ถ์ด๋นตํ์ด์ฟค extends ๋ฐ์ฃฝ, ์, ๋นตํ๋๋ฅด๊ธฐ {void ๋ถ์ด๋นต๋ง๋ค๊ธฐ();void ๋ถ์ด๋นตํ๊ธฐ();}์ธํฐํ์ด์ค ๊ตฌํ๊ณผ ๊ฐ์ฒด ์ฐธ์กฐ
์ด๋ ๊ฒ ๋ค์ค ์์ ๋ฐ์ ์ธํฐํ์ด์ค๋ฅผ ํด๋์ค์์ implements ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ interface๋ฅผ ๊ตฌํํ ์ ์๋ค. Implements ํ ํด๋์ค๋,
- ๋ชจ๋ abstract methods ๋ฅผ override ํ์ฌ ๊ตฌํํ๊ฑฐ๋
- ๊ตฌํํ์ง ์์ ๊ฒฝ์ฐ abstract ํด๋์ค๋ก ํ์ํด์ผ ํ๋ค
- ์ฌ๋ฌ๊ฐ์ interface ๋ฅผ implements ํ ์ ์๋ค
/*extends ์ implements ๋์์ฌ์ฉ๊ฐ๋ฅ*/public class ํฅ๋ถ์ด๋นต extends ๊ฐ์ implements ๋ถ์ด๋นตํ์ด์ฟค{//์ธํฐํ์ด์ค๋ฅผ ์ฃ๋ค ์ค๋ฒ๋ผ์ด๋ํ๊ฑฐ๋ abstract ํด๋์ค๋ก ํ์ํด์ผํ๋คString ์์ฌ๋ฃ = "ํฅ";boolean ๋ฐ๊ฐ๋ฃจ = true;int time = 3;//๋ถ์ด๋นต ํ์ด์ฟค์ด ์์ํ ๋ฉ์๋๋ค์ ์ค๋ฒ๋ผ์ด๋ฉ@overridepublic boolean ์ฃผ๋ฌผ์ฃผ๋ฌผ(){ if(๋ฐ๊ฐ๋ฃจ){ return true;}else{System.out.println("๋ฐ์ฃฝํ ์ ์์ด.."); return false;} }@overridepublic boolean ์(String ์์ฌ๋ฃ) { if (์์ฌ๋ฃ == "๋ถ์ด") {return false;} return true;}@overridepublic void ๊พน๊พน๋๋ฌ(int time){ return 30;}//๋ถ์ด๋นต ํ์ด์ฟค์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ@overridepublic void ๋ถ์ด๋นต๋ง๋ค๊ธฐ() {if(์ฃผ๋ฌผ์ฃผ๋ฌผ() && ์()){ System.out.println("๋ฐ๋๋ฐ๋ ๋ถ์ด๋นต ์์ฑ");} }@overridepublic void ๋ถ์ด๋นตํ๊ธฐ(){}}//๋ง์ฝ public void ๋ถ์ด๋นตํ๊ธฐ๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๊ธฐ ์ซ๋ค๋ฉด??: ์์ abstract class ํ*/public abstract class ํฅ๋ถ์ด๋นต implements ๋ถ์ด๋นตํ์ด์ฟค {//์ธํฐํ์ด์ค๋ฅผ ์ฃ๋ค ์ค๋ฒ๋ผ์ด๋ํ๊ฑฐ๋ abstract ํด๋์ค๋ก ํ์ํด์ผํ๋คString ์์ฌ๋ฃ = "ํฅ";boolean ๋ฐ๊ฐ๋ฃจ = true;int time = 3;//๋ถ์ด๋นต ํ์ด์ฟค์ด ์์ํ ๋ฉ์๋๋ค์ ์ค๋ฒ๋ผ์ด๋ฉ@overridepublic boolean ์ฃผ๋ฌผ์ฃผ๋ฌผ(){ if(๋ฐ๊ฐ๋ฃจ){ return true;}else{System.out.println("๋ฐ์ฃฝํ ์ ์์ด.."); return false;} }@overridepublic boolean ์(String ์์ฌ๋ฃ) { if (์์ฌ๋ฃ == "๋ถ์ด") { return false;} return true;}@overridepublic void ๊พน๊พน๋๋ฌ(int time){ return 30;}//๋ถ์ด๋นต ํ์ด์ฟค์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉpublic void ๋ถ์ด๋นต๋ง๋ค๊ธฐ() { if(์ฃผ๋ฌผ์ฃผ๋ฌผ() && ์()){ System.out.println("๋ฐ๋๋ฐ๋ ๋ถ์ด๋นต ์์ฑ");}}/*public void ๋ถ์ด๋นตํ๊ธฐ(){}*/}๐คฆ๐ปโโ๏ธ Interface
์์ : interface extends interface1, interface 2, interface 3
๊ตฌํ : class implements interface์ธํฐํ์ด์ค์ ํ์์ฑ
- ๊ตฌํ์ ๊ฐ์ ๋ก ํ์คํ ์ฒ๋ฆฌ โ ์์ฌ์ด ๋ชจ๋ ๊ต์ฒด๋ฅผ ์ง์ํ๋ค ํ๋ ๊ดด์์ด ์ ํํด์ ์์ฌ๋ฃ์ ๋ญ๊ฐ ๋ค์ด๊ฐ๋์ง ํ์ธํ ํ์๊ฐ ์์ด์ง โ ๊ทธ๋ผ ๊ฐ๋จํ๊ฒ ์์ฌ๋ฃ ์ธํฐํ์ด์ค๋ง ํ๋ ๊ต์ฒดํ๋ฉด ์ฝ๊ฒ ์ ์ง ๋ณด์๊ฐ ๊ฐ๋ฅํ๋ค. ์ฆ, ๋ถ์ด๋นต ์์ ๋ถ์ด๋นต์ ๋ฃ์ ์ ์๊ฒ ํ์ค์ด ๋ฐ๋์ด๋ ๋ถ์ด๋นต์ ๋ถ์ด๋นต์ด์ฌ..
- ๋
๋ฆฝ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๊ฐ๋ฐ ๊ธฐ๊ฐ์ ๋จ์ถ์ํฌ ์ ์๋ค.
๋ถ์ด๋นต ์ฃผ์ธ์ ํธ์ํฐ์ ๋๊ฐ ์ฌ๋๊น์ง ์๋ฌด๊ฒ๋ ์ํ๊ณ ๋๋ค๊ฐ ์๋์ด ์ค๋ฉด ๊ทธ์ ์์ผ ๋ฐ์ฃฝ์ ํ๊ณ ๋ถ์ด๋นต์ ํ๊ฒจ์ค์ผ ํ๋๊ฐ? ๋ํ, ์๋์ ์๋ฒฝ 7์์ ํฌ์ฅ๋ง์ฐจ๊ฐ ์ด์๋ง์ ๋ถ์ด๋นต์ ๋น์ฅ ๋ฌ๋ผ๋ฉฐ ์ฃผ์ธ์ ๋ฆ๋ฌํด์ผ ํ๋๊ฐ? ์ด๋, ์ฃผ์ธ๊ณผ ์๋์ ์๋ก ํฉ์์ ์ ์ฐพ์์ผ ํ๋ค. ์ฆ, ๋ฐ์ฃฝ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ์ฌ ๋ฏธ๋ฆฌ ๋ฐ์ฃฝ์ ํด๋๊ณ ์๋์ด ์์๋ ๊ตฌ์ธ ์ ์๋๋ก ํ์ํ๋ ๊ฒ์ด๋ค. - ์๋ก ์์์ ๊ด๊ณ๊ฐ ์๋ ํด๋์ค๋ค์๊ฒ ์ธํฐํ์ด์ค๋ฅผ ํตํ ๊ด๊ณ ๋ถ์ฌ๋ก ๋คํ์ฑ ํ์ฅ
์ ๊ทธ๋ฆผ์์, ๋ถ์ด๋นต๊ณผ ์๊ณผ์ผ ์ฃผ์ค๋ ์์ ๋ค์ด๊ฐ๋ ์ฌ๋ฃ๋, ๋ง๋๋ ๋ฐฉ๋ฒ๋ ๋ค๋ฅด๋ค. ํ์ง๋ง ๋ ๋ค ํ์ด์ฟค์ด๋ผ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค. ํ์ง๋ง, ์๋ฐ๋ ๋จ์ผ ์์๋ง์ ์ง์ํ๊ธฐ ๋๋ฌธ์, ๋์ด์ ์์์ ํ ์ ์๋ค.
์ธํฐํ์ด์ค๋ ์ด๋ ๊ฒ ์๋ก ์์ ๊ด๊ณ๊ฐ ์๋ ํด๋์ค๋ค์๊ฒ ๊ด๊ณ๋ฅผ ๋ถ์ฌํด ์ค ์ ์๋ค. ์ฅ์ฌ ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ์ฌ, ์ด๋ฏธ ๋นต์ ์์ํ ๋ถ์ด๋นต๊ณผ, ์๋ฃ์๋ฅผ ์์ํ ์๊ณผ์ผ ์ฃผ์ค ์ฌ์ด์ ํ์ด์ฟค์ด๋ ๊ด๊ณ๋ฅผ ๋งบ์ด์ค ์ ์๊ฒ ๋๋ค. ์ด๋ ์ฝ๋์ ์ฌ์ฌ์ฉ๋ฅ ์ ๋์ด๊ณ ํจ์จ์ ์ธ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
์๋ ์ฝ๋๋ ์์ ๊ด๊ณ๋๋ฅผ ์ฝ๋๋ก ์์ฑํ ๊ฒ์ด๋ค.
public interface Sellable {void ํ์ด์ฟค();}
public ๋ถ์ด๋นต extends ๋นต implements Sellable {@overridepublic void ํ์ด์ฟค(){System.out.println("๋ฐ๋๋ฐ๋ ๋ถ์ด๋นต์ฌ์ธ์ฉ");}}public ์๊ณผ์ผ์ฃผ์ค extends ์๋ฃ์ implements Sellable{@overridepublic void ํ์ด์ฟค(){System.out.println("์์ํ ์๊ณผ์ผ์ฃผ์ค์ฌ์ธ์ฉ");}public ๋์ extends ๊ฐ์กฑ{public void ๋ด๋์(){System.out.println("๋ด๋์ ์งฑ๊ท์ฝ์ง? ๊ฐ์ง๋?");}}public class RelationShipTest{public static void main (String[] args){Object[] obj = {new ๋ถ์ด๋นต(), new ์๊ณผ์ผ์ฃผ์ค(), new ๋์()};for( Object x : obj) {//์ด ์ค๋ธ์ ํธ๊ฐ Sellable ์ธํฐํ์ด์ค์ ์ธ์คํด์ค ์ธ๊ฐ์?if(x instanceof Sellable)Sellable sell = (Sellable) x; //๊ทธ๋ผ ์ด ์ค๋ธ์ ํธ๋ Sellable ์ธ๊ฑฐ์ผx.ํ์ด์ฟค(); //Sellable ์ด๋๊น ํ์๋ฒ๋ฆฌ์}}๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ implements ํ๊ณ ์๋ ํด๋์ค๋ค์ "Sellable" ์ด๋ ๊ด๊ณ๋ฅผ ๋๋์๊ธฐ ๋๋ฌธ์, ํ ์ ์๋ค. ์ฆ, ๋ถ์ด๋นต๊ณผ ์๊ณผ์ผ ์ฃผ์ค๋ ๊ฐ๊ฐ ๋นต๊ณผ ์๋ฃ์๋ฅผ ์์ํ๊ณ ์์ง๋ง ๊ฐ์ ํ๋งค ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ๋ค ํ์ด์ฟค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง, ๋์์ ํ๋งค ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ํ์๋ฒ๋ฆด์ ์๋ค
Default Method
Default Method ๋ ์ธํฐํ์ด์ค์ ์ ์ธ๋ ๊ตฌํ๋ถ๊ฐ ์๋ ์ผ๋ฐ ๋ฉ์๋๋ฅผ ๋ปํ๋ค.
1. ๋ฉ์๋ ์ ์ธ๋ถ์ default modifier ์ถ๊ฐ ํ ๋ฉ์๋ ๊ตฌํ๋ถ ์์ฑ
interface ์์ฌ๋ฃ{void ๊ฝ๊ฝ๋ด์();default void ์ฌ๋ฃ์ํํ์ธ(){System.out.println("์ด ๋ฉ์๋๋ ๊ธฐ๋ณธ ๋ฉ์๋ ์ ๋๋ค");System.out.println("์ผ๋จ ์์ฌ๋ฃ๊ฐ ์์ผ๋ฉด ์ํ๋ถํฐ ํ์ธํ๊ณ ์์ํฉ์๋ค");}}2.ํ์์ฑ
(1) ๊ธฐ์กด์ interface ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ interface ์ ์ถ๊ฐํด์ผํ๋ ๊ธฐ๋ฅ์ด ๋ฐ์ abstract ํํ๋ก ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด, ๊ธฐ์กด ๋ฉ์๋๋ค์ ํ๋ํ๋ ๋ค ์ด์ด์ ์ค๋ฒ๋ผ์ด๋ฉ์ ์ถ๊ฐํด์ผํ๋ค โ ์ ์ ๋ง ๋ถํธ...
(2) ๊ธฐ์กด ๋ฐฉ์์ผ๋ก๋ผ๋ฉด ๋ชจ๋ ๋ฉ์๋๋ฅผ override ํด์ผํ๋ฐ ๋ํดํธ ๋ฉ์๋๋ abstract ๊ฐ ์๋๋ฏ๋ก ๋ฐ๋์ ๊ตฌํํด์ผ ํ ํ์๊ฐ ์๋ค!
(3) ๋ํดํธ ๋ฉ์๋์ ์ธํฐํ์ด์ค ์ด๋ฆ์ ์ถฉ๋ ๋ฐ์ ๊ฐ๋ฅ :
a. ์ธํฐํ์ด์ค โ ํด๋์ค: ํด๋์ค๊ฐ ์ฐ์ ๊ถ์ ๊ฐ๋๋ค
b. ์ธํฐํ์ด์ค1 โ ์ธํฐํ์ด์ค2: ๊ตฌํํ๋ ํด๋์ค์์ ๋ฐ๋์ ์ค๋ฒ๋ผ์ด๋๋ฅผ ํด์ผํ๋ค
728x90๋ฐ์ํ'๐ STUDY > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋คํ์ฑ (0) 2022.05.17 ์์ (0) 2022.05.17 ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (1) 2022.05.17 Class Case Exception (0) 2022.05.17 JAVA Basics (0) 2022.05.12