한마디 정리
무엇인가? 어떤 기능을 강제하는 설계도면
왜 사용하는가?
1) 개발자들에게 구현 가이드라인을 주기 위해
2) 사용자에게 사용 가이드라인을 주기 위해
3) 다양한 타입의 기능들을 재사용 하기 위해
tv를 볼때 우리는 기계적으로 어떻게 동작하는지 전혀 모르지만, 리모컨이라는 인터페이스를 이용해 tv를 자유자제로 사용할 수 있는것 처럼, 인터페이스는 해당 객체를 추상적인 설계도면을 제시하여 사용자로 하여금 사용할 수 있게 하는 역할을 가지고 있다.
인터페이스의 문법
총 4가지의 필드를 사용하여 인터페이스를 구현할 수 있다.(java 8버전이후부터 디폴트 메서드, 정적 메서드 추가)
String HOMETOWN = "수원";
// ex)
public boolean isExpired();
디폴트 메소드: default 타입 메소드명(매개변수, ... ){
//구현부
}
// ex) 금융결제원에서 제공하는 디폴트 메서드
default String findDormancyAccount(String custId){
System.out.println("**금융개정법안 00이후 고객의 휴면계좌 찾아주기 운동**");
System.out.println("**금융결제원에서 제공하는 로직**");
return "00은행 000-000-0000-00";
}
static 타입 메소드 : 타입 메소드 명(매개변수) {
//구현부
}
상수 : 인터페이스에서 값을 정해줄테니 함부로 바꾸지 말고 제공해주는 값만 참조해라 (절대적)
추상메소드 : 가이드만 줄테니 추상메소드를 오버라이팅해서 재구현해라. (강제적)
디폴트메소드 : 인터페이스에서 기본적으로 제공해주지만, 맘에 안들면 각자 구현해서 써라. (선택적)
정적메소드 : 인터페이스에서 제공해주는 것으로 무조건 사용 (절대적)
한마디 정리
추상이란 무엇인가? : 추상 클래스와 추상 메서드가 있다.
추상클래스는 여러 객체들의 공통점을 한데 모아 따로 추출해서, 그 공통점을 하나의 클래스로 선언하고, 다른 객체들에 이 추상클래스를 상속시켜 구현하게 시킨다.
추상클래스를 왜 사용하는가?
한마디 정리
공통점
추상메소드를 가지고 있다.
상속받는 클래스 혹은 구현하는 인터페이스 안에 추상메소드를 구현하도록 강제 한다.
추상클래스는 추상클래스를 상속받을 수 있고, 인터페이스는 인터페이스를 상속받을 수 있다.
차이점
목적이 다르다-> 인터페이스를 사용하는 이유는 구현한 객체들에 대해서 동일한 동작을 위해 == 재사용을 위해 존재한다. 반면 추상클래스는 기능의 확장(추가 혹은 수정, 변경 등)을 위해 사용한다.
인터페이스의 경우 다중상속이 가능하지만, 추상클래스는 다중상속을 지원하지 않는다(다중상속의 모호성 문제를 피하기 위해)
인터페이스는 추상메소드의 집합으로 이루어져있고, 추상 클래스의 경우 추상메소드가 하나 이상만 존재한다면 그 외의 변수나 일반메서드가 존재하더라도 추상클래스로 역할을 할 수 있다.
출처