-
JAVA μλ° μΈν°νμ΄μ€, λ컀νλ§JAVA 2020. 8. 8. 17:50
π― μλ° μΈν°νμ΄μ€, λ컀νλ§ μ€κ³λ₯Ό μμλ³Έλ€.
μΈν°νμ΄μ€
public interface μΈν°νμ΄μ€λͺ { // public static finalλ‘ μ§μ ν μμ // public abstract μ§μ μλ₯Ό μ΄μ©ν μΆμλ©μλ // public default μ§μ μλ₯Ό μ΄μ©ν μΌλ°λ©μλ // public static μ§μ μλ₯Ό μ΄μ©ν μΌλ°λ©μλ }
μΈν°νμ΄μ€λ μΆμν΄λμ€μ λΉμ·ν μ©λλ‘ λ©μλ μ¬μ©μ κ°μ ν μ μλ νΉμ§μ κ°μ‘λ€. μμ, μΆμλ©μλ, defualt λ©μλ, staticλ©μλλ§ κ°μ§ μ μλ€. λΆμμ ν μΆμλ©μλλ₯Ό κ°κ³ μκΈ° λλ¬Έμ κ°μ²΄μμ±μ΄ λΆκ°λ₯νλ©° ꡬνμ ν λλ μΌλ°ν΄λμ€μ extendsκ° μλ ꡬννλ€λ λ»μ implementsν€μλλ₯Ό μ¬μ©νλ€. μΈν°νμ΄μ€μ ꡬνκ΄κ³λ₯Ό κ°μ§ ν΄λμ€λ μ€μμκ΄κ³μ΄λ€.
μΈν°νμ΄μ€ μ¬μ©νκΈ°
public interface Flyer{ public abstract void takeOff(); public abstract void fly(); public void land(); } class Bird implements Flyer{ @Override public void takeOff() {System.out.println("Bird μ΄λ₯");} @Override public void fly() {System.out.println("Bird λΉν");} @Override public void land() {System.out.println("Bird μ°©λ₯");} } class Airplane implements Flyer{ @Override public void takeOff() {System.out.println("Airplane μ΄λ₯");} @Override public void fly() {System.out.println("Airplane λΉν");} @Override public void land() {System.out.println("Airplane μ°©λ₯");} } public class Ex07_2 { public static void main(String[] args) { Bird bird = new Bird(); bird.takeOff(); bird.fly(); bird.land(); Flyer flyer = new Airplane(); flyer.takeOff(); flyer.fly(); flyer.land(); } }
1) Birdμ Airplane ν΄λμ€λ λ μλ€λλ€λ κ³΅ν΅ κΈ°λ₯μ κ°μ‘λ€. κ³΅ν΅ κΈ°λ₯μ λ½μ FlyerλΌλ μΈν°νμ΄μ€μ ꡬνλμ§ μμ μΆμλ©μλλ₯Ό 3κ° λ§λ€μλ€. μΆμν΄λμ€μ λ€λ₯΄κ² μΈν°νμ΄μ€μ μΆμλ©μλλ abstract ν€μλλ₯Ό μλ΅ν μ μμ§λ§ μ¨μ£Όλ κ² μ’λ€.
2) μ΄μ Birdμ Airplane ν΄λμ€λ Flyer μΈν°νμ΄μ€λ₯Ό ꡬννλ€λ λ»μ implements ν€μλλ‘ μμλ°κ³ μΈν°νμ΄μ€μ μΆμλ©μλλ₯Ό κ·Έλλ‘ μ€λ²λΌμ΄λ© ν΄μ ꡬννκ³ μλ€.
3) λ©μΈν¨μ μμμ μΌλ°ν΄λμ€μ κ°μ²΄λ₯Ό μμ±νκ³ λ©μλλ₯Ό νΈμΆνλ€.
4) μΈν°νμ΄μ€λ λ€νμ±μ΄ μ μ©λκΈ° λλ¬Έμ Airplaneμ λΆλͺ¨νμ μΈ Flyerλ‘ κ°μ²΄μμ±ν΄μ μ¬μ©ν μ μλ€.
default λ©μλμ static λ©μλ μΆκ°
interface Vehicle{ public abstract void speed(); public default void start() { System.out.println("start~"); } public static void stop() { System.out.println("stop~"); } } class Car implements Vehicle{ @Override public void speed() { System.out.println("100km"); } } public class Ex07_3 { public static void main(String[] args) { Car c = new Car(); c.start(); c.speed(); Vehicle.stop(); } } ----------- start~ 100km stop~
Vehicle μΈν°νμ΄μ€μ μΆμλ©μλ speed()μ default μΌλ°λ©μλ, static μΌλ°λ©μλλ₯Ό λ§λ λ€. μΈν°νμ΄μ€λ₯Ό ꡬνν΄μ μ¬μ©νκΈ° μν΄ Car ν΄λμ€λ₯Ό λ§λ€κ³ μΆμλ©μλλ₯Ό μ€λ²λΌμ΄λ© ν΄μ ꡬ체μ μΈ μ€νμ½λλ₯Ό ꡬννλ€. λ§μ§λ§μΌλ‘ λ©μΈν¨μ μμ Car κ°μ²΄λ₯Ό μμ±νκ³ ν¨μλ₯Ό νΈμΆνλ€. static λ©μλλ μΈν°νμ΄μ€λͺ μΌλ‘ μ κ·Όν΄μ νΈμΆν μ μλ€.
interface A{} interface B{} interface C extends A,B{} class My implements A,B{} public class Test { public static void main(String[] args) { A a = new A(); //κ°μ²΄μμ± λΆκ° A a2 = new My(); //λ€νμ± } }
μΈν°νμ΄μ€κ° λ€μ€μμμ΄ κ°λ₯νλ©° ν΄λμ€λ λ€μ€κ΅¬νμ΄ κ°λ₯νλ€.
λ컀νλ§
컀νλ§μ΄λ μμ‘΄μ±, ν μμ μλ―Ένλ€. κ°μ²΄λ€ κ° μμ‘΄μ±μ΄ κ°ν κ²½μ°, ν νλ‘κ·Έλ¨μ ꡬμ±μμλ₯Ό μμ νλ©΄ κ·Έμ μ°κ΄λ λͺ¨λ ꡬμ±μμλ₯Ό μλ‘ μμ ν΄μΌ νλ€. μ¬κΈ°μ λ컀νλ§μ΄λ μΈν°νμ΄μ€λ₯Ό μ΄μ©ν΄ λͺ¨λ μ¬μ΄μ μμ‘΄μ±μ κ°μνκ³ μ μ§λ³΄μ ν¨κ³Όλ₯Ό λμ΄λ λ°©λ²μ λ§νλ€.
μλ°μ DBλ₯Ό μ°κ²°ν λ μΈν°νμ΄μ€λ₯Ό μ¬μ©νκ² λλλ°, μλ μ½λμ λ±μ₯νλ DAO(Data Access Object)λ λ°μ΄ν°λ² μ΄μ€μ μ κ·Όν΄μ μμ νκΈ° μν κ°μ²΄λ₯Ό λ»νλ€.
μ μ§λ³΄μκ° μ΄λ €μ΄ μ€κ³
package com.dao; public class MySQLDAO { public void connectMySQL() { System.out.println("MySQLDAO.connect"); } }
package com.dao; public class OracleDAO { public void connectOracle() { System.out.println("OracleDAO.connect"); } }
μν ν΄λμ€μ μ€λΌν΄ ν΄λμ€λ₯Ό λ§λ λ€. λ λ€ connectλ₯Ό νλ¦°νΈνλ κ³΅ν΅ κΈ°λ₯μ κ°κ³ μμ§λ§ μμ ν΄λμ€λ₯Ό λ§λ€μ§ μκ³ κ°μ μ¬μ©νκ³ μλ€.
package com.service; import com.dao.MySQLDAO; public class DBService { public void setDAO(MySQLDAO dao) { dao.connectMySQL(); } }
μλΉμ€ ν΄λμ€λ νλΌλ―Έν°λ‘ μν ν΄λμ€λ₯Ό λ°μμ 컀λ₯νΈ ν¨μλ₯Ό νΈμΆνλ λ©μλλ₯Ό κ°κ³ μλ€. μ¬κΈ°μλ λΆνΈν¨μ΄ λ°μνλλ°, μλΉμ€ ν΄λμ€μμ OracleDAOλ₯Ό μ¬μ©νκ³ μ νλ€λ©΄ μ΄ μμ μ ν λͺ¨λ λ΄μ©μ μμ ν΄μΌ νλ€.
import com.dao.MySQLDAO; import com.service.DBService; public class DBMain { public static void main(String[] args) { DBService service = new DBService(); //OracleDAO μ¬μ© //service.setDAO(new OracleDAO()); //MySQLDAO μ¬μ© service.setDAO(new MySQLDAO()); } }
main ν¨μμμ μλΉμ€ ν΄λμ€μ κ°μ²΄λ₯Ό μμ±νκ³ setDAO ν¨μλ₯Ό νΈμΆνλ©΄μ μΈμλ‘ μν ν΄λμ€λ₯Ό λ£μλ€. νΈμΆλ setDAOν¨μκ° λ μνμ 컀λ₯νΈ ν¨μλ₯Ό νΈμΆνλ€.
μΈν°νμ΄μ€λ₯Ό μ΄μ©ν λ컀νλ§ μ€κ³
package com.dao; public interface DBDAO { public abstract void connect(); }
μΆμλ©μλ connectλ₯Ό κ°μ§ μΈν°νμ΄μ€ DBDAOλ₯Ό λ§λ λ€.
package com.dao; public class MySQLDAO implements DBDAO { @Override public void connect() { System.out.println("MySQLDAO.connect"); } }
package com.dao; public class OracleDAO implements DBDAO { @Override public void connect() { System.out.println("OracleDAO.connect"); } }
import com.dao.DBDAO; public class MariaDAO implements DBDAO { @Override public void connect() { System.out.println("MariaDAO.connect"); } }
μΈν°νμ΄μ€λ₯Ό μμλ°λ μΈ νμν΄λμ€μ μΆμλ©μλ connectλ₯Ό μ€λ²λΌμ΄λ© ν΄μ λ΄μ©μ ꡬννλ€.
package com.service; import com.dao.DBDAO; public class DBService { public void setDAO(DBDAO dao) { dao.connect(); } }
μλΉμ€ ν΄λμ€μ setDAO λ©μλμλ νλΌλ―Έν°λ‘ μΈν°νμ΄μ€λ₯Ό λ£κ³ μΈν°νμ΄μ€μ λ©μλλ₯Ό νΈμΆνλ€.
import com.dao.MySQLDAO; import com.dao.OracleDAO; import com.service.DBService; public class DBMain { public static void main(String[] args) { DBService service = new DBService(); //OracleDAO μ¬μ© service.setDAO(new OracleDAO()); //MySQLDAO μ¬μ© service.setDAO(new MySQLDAO()); // MariaDAO μ¬μ© service.setDAO(new MariaDAO()); } }
λ©μΈν¨μ μμ μλΉμ€ κ°μ²΄λ₯Ό μμ±νκ³ setDAOλ©μλλ₯Ό νΈμΆν΄ 3κ°μ ν΄λμ€μ 컀λ₯νΈ μ€νκ²°κ³Όλ₯Ό μΆλ ₯νλ€. μΈν°νμ΄μ€λ₯Ό μ¬μ©ν΄μ μ μ§λ³΄μκ° κ°λ¨ν΄μ‘λ€.
π NEXT : μλ° μ€μ²©ν΄λμ€μ ν΅μ¬ ν΄λμ€ κ³΅λΆνκΈ°
λ°μν'JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
JAVA μλ° μμΈμ²λ¦¬, throws, μ¬μ©μμ μ μμΈν΄λμ€ (2) 2020.08.10 JAVA μλ° μ€μ²©ν΄λμ€, comparator μΈν°νμ΄μ€ (2) 2020.08.09 JAVA μλ° μΆμν΄λμ€ abstract (0) 2020.08.07 JAVA μλ° μ€λ²λΌμ΄λ©, λ€νμ± (0) 2020.08.06 JAVA μλ° μμ, μ κ·Όμ§μ μ (0) 2020.08.06