Obj. 자바의 패키지에 대해 학습.
Todo.
8-1. 인터페이스 정의하는 방법
8-2. 인터페이스 구현하는 방법
8-3. 인터페이스 래퍼런스를 통해 구현체를 사용하는 방법
8-4. 인터페이스 상속
8-5. 인터페이스의 기본 메소드(Default Method), 자바 8
8-6. 인터페이스의 static 메소드, 자바 8
8-7. 인터페이스의 private 메소드, 자바 9
8-1. 인터페이스 정의하는 방법
인터페이스란? 자바는 클래스를 하나만 상속이 가능한 특성이 있어서 이는 객체 지향 프로그래밍의 큰 제약이 된다. 인터페이스는 추상 메서드의 집합이라고 할 수 있다.
- 모든 메서드는 추상적이다.
- 공용API를 정의하기 때문에 암시적으로 public을 생략하는 것이 일반적.
- 인스턴스 필드를 정의할 수 없다.
- 생성자가 필요 없다.
- 중첩될 수 없음
- java 8 부터 static, default 메소드를 정의할 수 있다.
- java 9 부터 private 메소드를 정의할 수 있다.
추상 클래스와 인터페이스의 차이
자기 자신을 객체화 할 수 없으며 다른 객체가 상속(extends), 구현(implements)를 하여 객체를 생성하며, 하위 클래스에서 정의한 추상 매서드를 반드시 구현해야 한다.
단 추상 클래스는 일반 메소드를 포함할 수 있으며, 다중 상속이 불가능하고, 변수 필드를 포함할 수 있다.
하지만 인터페이스는 다중상속이 가능하며, 상수필드만 포함이 가능하다.
추상 클래스는 " is - a : ~는 ~이다"의 개념이고 인터페이스는 "has-a : ~는 ~할수 있다."의 개념이다.
인터페이스 사용 이유
1. 개발기간 단축 -> 각자 부분만 작선된 코드를 컴파일 할 수 있음
2. 클래스간 결합도 낮춤 -> 코드간 종속성을 줄이고 유지보수성 높임
3. 표준화가 가능하다.
public interface 인터페이스명{
(public static final) 타입 상수;
(public abstract) 타입 메서드명(매개변수, ...);
}
8-2. 인터페이스 구현하는 방법
2가지 방법이 있다. implement 사용과 익명 구현 객체
public class 클래스 명 implements 인터페이스명{
//추상 메소드 구현
}
인터페이스명 인터페이스 변수 = new 인터페이스명(){
// 추상 메소드 구현
};
8-3. 인터페이스 래퍼런스를 통해 구현체를 사용하는 방법
인터페이스 타입의 참조 변수로 클래스의 인터페이스를 참조할 수 있고, 인터페이스 타입으로 형변환도 가능하다.
public interface Animal{
void sound();
}
public class Dog implements Animal{
@Override
public void sound(){}
public void eat(){}
}
public class Cat implements Animal{
@Override
public void sound(){}
public void eat(){}
}
public class Main{
private static void main(String[] args){
Animal dog = new Dog();
Animal cat = new Cat();
dog.sound();
cat.sound(); // 둘다 가능
dog.eat();
cat.eat(); // 둘 다 불가능, Anmial 인터페이스 인스턴스 이므로,
((Dog) dog).eat();
((Cat) cat).eat(); // 으로 캐스팅 가능
}
}
8-4. 인터페이스 상속
인터페이스는 다중 상속이 가능하다.
8-5. 인터페이스의 기본 메소드(Default Method), 자바 8
디폴트 메소드 (Default Method) 는 인스턴스 메소드와 동일 하나, 그대로 사용 할 수 있으며, 필수로 재정의를 할 필요가 없다.
public interface Animal{
dafault void sound(){
System.out.println("디폴트");
}
}
public class Dog implement Animal{
private static void main(String[] args){
Animal a = new Animal();
a.sound();
}
}
8-6. 인터페이스의 static 메소드, 자바 8
static 메소드는 이미 인터페이스 내에서 구현을 했지만, 구현 클래스에서 오버라이딩 할 수 없음.
8-7. 인터페이스의 private 메소드, 자바 9
다른 곳에서의 상속을 하거나, 접근하는 것을 막기 위해 private가 등장했음.
#Reference
'Java > [Whiteship]자바스터디' 카테고리의 다른 글
10주차 과제 : 멀티쓰레드 프로그래밍 (0) | 2021.01.27 |
---|---|
9주차 과제 : 예외 (0) | 2021.01.21 |
7주차 과제 : 패키지 (0) | 2021.01.18 |
6주차 과제 : 상속 (0) | 2021.01.17 |
5주차 과제 : 클래스 (0) | 2021.01.09 |