**
면접 단골 질문 정리
사용하는 이유? 여러명의 개발자가 협업을 할때, 미리 정해놓는 '약속'같은 개념
만약 여러명이 프로젝트를 한다고 생각할때, 각자 알아서 하면 나중에 수정해야 하는 경우가 많으므로,
미리 그려놓는 설계도 라고 생각하면 편하다.
그냥 내가 만든 예시 - 아래와 같이 orderPizza라는 메서드를 구현하고 싶은 경우?
A라는 사람이 interface로 정의해 놓으면 B라는 실체를 구현하는 사람이 parameter를 어떻게 쓸 지 고민없이 사용 가능함.
이렇게 미리 인터페이스를 정의한 경우에는 추후에 변수명을 바꾼다던가 변수타입을 바꾼다든가하는 추가적인 일이 필요없다는 말임. 인터페이스가 설계도 라는 말이 이해가 되지 않으신가요? 나는 이해됨,
interface I {
public void orderPizza(string menu, int inch, int price);
}
class A implements I {
public void orderPizza(string menu, int inch, int price) {
}
}
인터페이스가 구현된 클래스에서는(위에선 Class A) 인터페이스 내에 있는 메소드가 반드시 구현되어야 함
인터페이스 멤버는 무조건 public이여야 함
클래스는 여러개의 인터페이스를 구현할 수 있음
다중 상속 가능
class A implements IA, IB, IC {
}
interface IA {
public class A();
}
interface IB extends IA{
public class B();
}
class IB {
public class A(){ }
public class B(){ }
// 둘 다 반드시 구현되어야 함
}
추상메서드를 가진 클래스는 무조건 추상 클래스
추상메드는 상속받은 클래스에서 무조건 구현되어야 함.
public abstract class animal {
abstract void eat();
abstract void sleep();
}
public abstract class 어류 extends 동물{ // 추상클래스'동물'을 상속받음
}
public abstract class 포유류 extends 동물{ // 추상클래스'동물'을 상속받음
}
public abstract class 조류 extends 동물{ // 추상클래스'동물'을 상속받음
}
이렇게하면 어류도 포유류도 인스턴스를 생성할 수 없음
public class 고등어 extends 어류 { // 고등어는 추상클래스 '동물'을 상속받은 추상클래스'어류'를 상속받음
}
public class 상어 extends 포유류 { // 추상클래스'포유류'를 상속받음
}
public class 펭귄 extends 조류 { // 추상클래스'조류'를 상속받음
}
이런식으로 정의되어 있다면,
고등어, 상어, 펭귄은 '물'에 사는 동물이라는 공통점이 있지만, 이를 상속할 수는 없음.
쉽게 말하면 위에서 아래로만 상속 가능.
public clas 고래 extends 포유류, 수생동물 { -> 이렇게 사용 불가능
}
이럴 때 사용하는게 인터페이스!
public interface 물생활 {
public abstract void 수영();
}
물생활 물 = new 물생활();
물.수영();
참고 자료. https://www.youtube.com/watch?v=SgjRG0dS66o
선언만 있고 구현 내용이 없는 클래스
상속을 받은 하위클래스는 모든 메소드를 재정의해야 함(오버라이딩)
인스턴스화 불가능 Animal a = new Animal() 불가
추상클래스는 단일 상속 = extends a (추상클래스)
인터페이스는 다중 상속 = implements a, b, c(인터페이스) /
추상클래스는 상속받은 클래스의 기능을 이용하고 확장하는 것
인터페이스는 하위클래스에게 일종의 설계도를 제공하는 것. 다형성과 코드 사용성을 높일 수 있음.