
JAVA의 인터페이스란? 인터페이스목적,개요, 실습, 추상클래스와 비교, 추상메소드(자바/JAVA/자바교육/자바강의/자바동영상/자바강좌/추천JAVA강좌/JAVA동영상)
1. 인터페이스(interface) 사용목적 인터페이스는 추상클래스와 마찬가지로 어떤 클래스를 만들 때 그 “틀” 로 서 사용 되는 것이 주 목적 입니다. (계약상의 의무) 자바 컴파일러가 코드가 의존하는 계약(인터페이스에 정의한 추상 메소드)이 실제로 충족되는지(자식 클래스가 모두 구현했는지) 확인할 수 있다. 자바는 단일 상속만 지원하므로 인터페이스를 이용하여 다중 상속 기능을 구현할 수 있습니다. 자바프로그래밍에서 결합도를 떨어뜨리는 프로그래밍을 할 때 인터페이스를 기반으로 하여 프로그래밍 합니다. Emp라는 인터페이스가 있고 이를 구현한 Programmer, Designer 클래스가 있을 때 Emp e1 = new Programmer(); e1.work(); //Dynamic Binding, Late Binding Emp e2 = new Programmer(); e2.work(); //Dynamic Binding, Late Binding 자바컴파일러는 컴파일 시점에는 Emp 타입에 work() 메소드가 있는지 체크만 하고 work() 메소드의 호출을 실제 바인딩 하지 않고 런 타임중에 오른쪽에 new 되는 클래스의 매소드로 바인딩 합니다. 이를 late binding, dynamic binding, run-time binding 이라고 합니다. 바인딩이란 “logical address를 physical address로 mapping하는것” 2. 인터페이스(interface) 추상클래스는 일부 메소드를 구현할 수 있고, 또 일부는 추상 메소드로 만들어 추상메소드를 상속받는 자식 클래스에서 재정의 하라고 하는 것 입니다. 인터페이스는 모든 메소드가 미완성 메소드인 추상 메소드이고 접근지정은 기본적으로 public으로 설정 됩니다. 추상클래스의 경우 protected, private 설정 가능합니다. 클래스를 설계도 라는 관점에서 보면 추상클래스는 “미완성 설계”도 이고, 인터페이스는 하나도 만들어 지지않은 “기본 설계도”로 볼 수 있습니다. 인터페이스는 상수(final 변수)와 추상 메소드로 구성 됩니다. 추상클래스와 마찬가지로 객체의 인스턴스를 생성할 수 없습니다. 클래스는 필드의 타입으로 기본자료형, 클래스 등이 올 수 있지만 인터페이스는 int, double 등의 기본 자료형 만이 필드로 사용될 수 있습니다. 또한 각 필드는 반드시 초기화가 되어야 하는데 초기화가 되어야 하는 이유는 인터페이스의 필드는 암시적으로 final과 static으로 설정되어 있기 때문 입니다. int age = 5 static final int age = 5; 클래스가 인터페이스를 구현하게 되면 인터페이스 내에 정의된 상수는 상속된 것 처럼 직접 사용 할 수 있습니다. 클래스가 구현하는 인터페이스의 모든 메소드를 재정의 하지 않으면 abstract 클래스로 선언되어야 합니다. 서로 관련이 없는 클래스들 사이의 유사성을 표현시 용이 합니다. (수평적인 개념) 인터페이스는 여러 개의 인터페이스를 상속 가능 합니다. interface I1 { void m1(); } interface I2 { void m2(); } interface I3 extends I1, I2 { void m3(); } 클래스는 상위 클래스를 extends 하는 대신에 여러 개의 인터페이스 구현 가능 합니다. 인터페이스 계층 구조와 클래스 계층 구조는 다를 수도 있습니다. 3. Abstract class & interface 추상 메소드를 가지고 있고 이를 상속 받거나 구현하는 클래스는 이 추상 메소드를 재정의하고 구현해야 한다는 점, 그리고 다형성을 구현하는 방법이라는 점, 메소드들이 동적으로 바인딩 된다는 점들은 비슷합니다. 차이점 인터페이스는 서로 연관성이 없는 클래스들에 의해 구현될 수 있고 따라서 수평적인 구현이 가능하지만 추상클래스의 경우 단일 상속 개념 하에 수직적인 구조로 상속을 해야만 합니다. 인터페이스에서는 메소드를 선언만 할 수 있으며 구현할 수 없고 이 구현은 인터페이스를 구현하도록 설정된 클래스에서 가능 합니다. 하지만 추상클래스의 경우에는 추상 클래스 내부에서 메소드의 선언과 구현이 모두 가능하며 또한 이를 상속 받은 클래스에서도 재정의가 가능 합니다. 인터페이스의 모든 메소드는 구현되지 않은 추상 메소드이고 추상클래스는 구현된 메소드도 가질 수 있습니다. 자바 인터페이스 안에 정의된 변수는 기본적으로 public static final 입니다. 즉 더 이상 수정이 불가능한 상수이지만 추상클래스의 필드는 private, protected등을 가질 수 있습니다. 추상클래스는 확장해서 상속 받아야 하며(extends), 인터페이스는 구현(implements) 해야 합니다. 인터페이스도 상속을 받는 것이 가능하지만 다른 인터페이스만 상속을 받을 수 있으며, 추상클래스는 다른 자바클래스를 상속받을 수 있고 다른 인터페이스도 여러 개 구현할 수 있습니다. Java 클래스는 여러 인터페이스를 구현할 수 있지만 하나의 클래스 만 확장하여 상속받을 수 있습니다. 인터페이스, 추상클래스 모두 인스턴스화 할 수 없습니다. 추상 클래스는 인스턴스화 할 수 없지만 main ()이 있으면 호출 할 수 있습니다. package javatest; /** 사원이 되려면 출근하고, 일하고, 퇴근해야 한다는 규칙, 계약사항 @author jclee */ interface Emp { void gotoWork(); void work(); void getOff(); } class Programmer implements Emp { private String ename; public Programmer(String ename) { this.ename = ename; } public void gotoWork() { System.out.println(ename + "사원이 걸어서 출근 합니다."); } @Override public void work() { System.out.println(ename + "사원이 개발을 합니다."); } @Override public void getOff() { System.out.println(ename + "사원이 걸어서 퇴근 합니다."); } } class Designer implements Emp { private String ename; public Designer(String ename) { this.ename = ename; } public void gotoWork() { System.out.println(ename + "사원이 차타고 출근 합니다."); } @Override public void work() { System.out.println(ename + "사원이 디자인을 합니다."); } @Override public void getOff() { System.out.println(ename + "사원이 차타고 퇴근 합니다."); } } public class EmpTest { public static void main(String[] args) { Emp p = new Programmer("홍길동"); p.gotoWork(); p.work(); p.getOff(); Emp d = new Designer("김길동"); d.gotoWork(); d.work(); d.getOff(); } } 홍길동사원이 걸어서 출근 합니다. 홍길동사원이 개발을 합니다. 홍길동사원이 걸어서 퇴근 합니다. 김길동사원이 차타고 출근 합니다. 김길동사원이 디자인을 합니다. 김길동사원이 차타고 퇴근 합니다. #자바인터페이스, #인터페이스, #JAVA인터페이스, #추상클래스, #자바추상클래스, #추상메소드, #자바추상메소드, #자바동영상, #자바강의, #자바교육, #자바강좌, #자바, #JAVA, #자바동영상강의, #추천자바강의, #추천자바강좌, #JAVA동영상, #JAVA강의, #JAVA강좌, #JAVA교육, #JAVA, #추천JAVA강의, #추천JAVA교육, #추천JAVA강좌, #자바소스, #자바실습