• 인터페이스는 객체 사용 설명서 (공통API의 역할)
    인터페이스의 메소드는 전부 abstract 메소드 (키워드 생략)
  • 자바7까지는 추상메소드만 선언가능했는데
    자바8에서부터는 디폴드메소드, 정적메소드도 선언가능
  • 코드수정없이 객체를 변경할 수 있다
    > 동일기능의 구현객체를 새로만들고 선언부만 변경 가능
  • 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출
  • 인터페이스의 구현클래스에서 메소드를 작성할때 더 낮은 접근제한을 지정할수없음
    (추상메소드는 디폴트로 public)
    인터페이스 설계의 핵심은 선언부를 얼마나 추상화하여 작성할 것인가...
  • 인터페이스는 다중상속 가능
  • 디폴트 메소드 필요성
    - interfaceA 를 사용하다가 추가할 기능이 생겼을때 추상메소드를 추가하면 interfaceA 구현체에 모두 추가해줘야하는데
    디폴트메소드는 추상메소드가 아니기 때문에 구현클래스에서 모두 작성해줄 필요가 없음
    - 리턴타입 앞에 default 작성
  • 인터페이스 vs 추상클래스
    접근제한자 모두 public / 접근제한자 지정 가능
    구현객체가 동일기능을 구현 / 핵심로직은 추상클래스에서 정의하고 달라지는 부분만 구현객체에서 작성
    > 나중에 디자인패턴에서 쓰임 비교해보기


1번 - 3
2번 - 4
3번 -

public class Cat implements Soundable {
  @Override
  public String sound() {
  	return "야옹";
  }
}
public class Dog implements Soundable {
  @Override
  public String sound() {
  	return "멍멍";
  }
}


4번 -

public interface DataAccessObject {
  void select();
  void insert();
  void update();
  void delete();
}
public class OracleDao implements DataAccessObject {
  public void select() {
  	sysout("OracleDB에서 검색")
  }
  public void insert() {
  	sysout("OracleDB에서 삽입")
  }
  public void update() {
  	sysout("OracleDB에서 수정")
  }
  public void delete() {
  	sysout("OracleDB에서 삭제")
  }
}
  
public class MySqlDao implements DataAccessObject {
  public void select() {
  	sysout("MySqleDB에서 검색")
  }
  public void insert() {
  	sysout("MySqleDB에서 삽입")
  }
  public void update() {
  	sysout("MySqleDB에서 수정")
  }
  public void delete() {
  	sysout("MySqleDB에서 삭제")
  }
}


5번 -

Action action = new Action() {
	public void work() {
		sysout("복사를 합니다.");
	}
};

'Language > Java' 카테고리의 다른 글

자바 커뮤니티2 - 상속  (0) 2019.05.28
자바 커뮤니티1 - Class  (0) 2019.05.22
Java 문자열 객체  (0) 2018.08.04
Java 배열 선언, 초기화  (0) 2018.08.04
Java 접근지정자 (Access Modifier)  (0) 2018.08.04

+ Recent posts