추상클래스와 인터페이스
왜 등장했을까?
다형성이 보장되려면 부모가 자식에게 명령하면 무조건 동작해야 한다. 이것을 다형성 보장이라고 한다
다형성을 보장하기 위해선, 전제조건으로
반드시 재정의를 해야한다.
다형성을 보장한다는 것은 무슨 의미일까?
부모가 명령하면 자식은 반드시 동작 (재정의 후 동작)
재정의된 부모의 메서드는 자식으로 가는 통로 역할을 해준다.
즉, 본래 가지고 있던 메시지는 쓸모가 없어진다. 이것을 유지할 필요가 없어진다. 그래서 메서드의 구현부를 없앤다.
public abstract class Animal {
public abstract void eat();// 추상메서드라고 한다. 불완전 메서드
//:메서드의 구현부가 없다. 자식이 반드시 재정의
//재정의하면 ? 안나옴, 자식을 찾아가는 통로 역할
public void move(){ //추상 클래스엔 정의된 메서드도 온다.
System.out.println("animal: move");
//바디가 있는 구현 메서드
}
}
중괄호를 없애고 클래스와 메서드에 abstract를 붙인다. 이것이 추상클래스이다.
추상 클래스는 단독 사용이 불가능하다. 반드시 하위 클래스가 있어야함.
하위에서 eat을 재정의해 사용한다.
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("dog: eat");
}
}
dddd
이렇게 재정의를 해줘야 한다. -> 다형성 보장이 완료되었다.
추상 클래스는 다형성을 보장하기 위해 등장했다.
추상 클래스는 구현된 메서드도 올 수 있다.
Animal을 일반 클래스로 사용하면?
재정의를 하지 않아도 동작하지만, 오동잘 할 수 있기에 재정의를 유도해야한다.
때문에 부모클래스를 추상 클래스로 만든다.
추상클래스는 단독으로 객채 생성이 불가하다
ex) Animal ani = new Animal();
인터페이스의 등장
인터페이스도 다형성을 보장하기 위해 등장했다.
추상클래스는 비슷한 클래스의 공통 부분을 묶을 때 사용되지만
인터페이스는 서로 다른 클래스의 공통을 묶을 때 사용한다 (?)
또한 인터페이스는 반드시 추상 메서드만 와야 한다. 구현 메서드는 올 수 없다.
-> 인터페이스는 100% 추상 메서드로 이루어져 있기에 다형성을 보장한다
인터페이스는 추상 메서드만 온다. 이것을 상속받은 하위 클래스들은 모든 메서드를 재정의 해야한다.
extends 대신 implements를 사용한다.
public interface RemoCon {
//chUp(), chDow(), volUp,volDown
public void chUp();
public void chDown();
public void voUp();
public void volDown();
public void internet();
}
인터페이스는 abstract키워드 생략이 가능하다.
부모가 인터페이스면 자식의 내부 동작을 전혀 몰라도 동작 시킬 수 있다.
추상화는 다형성을 일부만 보장하고, 인터페이스는 100%보장한다.
또한 인터페이스는 자기 자신 객체 생성이 불가하다
ex) Remocon remo = new Remocon();
인터페이스 변수 : final static 상수, 값 수정 불가.
채널의 최대, 최소값을 정해준다.
인터페이스 메소드 앞 abstract이 생략되어 있고 또한 final static이 생략되어 있다.
인터페이스는 객체를 생성 할 수 없다. 그럼 max, min을 어떻게 접근해서 사용할까?
객체를 생성하지 않고 사용하는 방법 = static
max, min 에 클래스 이름으로 접근한다. 클래스 + 도트 연산자
RemoCon.min
자바는 단일 상속만 지원하는데 (extends 하나만 가능)
구현 implements는 여러 개 하능하다. 마치 다중상속 처럼 사용 할 수 있다.
왜 인터페이스를 쓸까?
Pet에 play()라는 메서드를 두고, dog 에게 물려주면 재정의 가능하다
하지만 하마나 호랑이에겐 play()는 필요 없다.
물려주고 싶은 클래스에 인터페이스를 둬서 부분적, 선택적으로 물려준다.
인터페이스도 하나의 클래스이기 때문에 이렇게 상속, 구현한 것들을 업캐스팅으로 받을 수 있다.
'JAVA > Bootcamp 자바' 카테고리의 다른 글
내가 만드는 API, int array (0) | 2024.03.14 |
---|---|
직접 만들어 사용하는 Class, Gson, Json (0) | 2024.03.14 |
최상위 클래스 Object (0) | 2024.03.13 |
추상 클래스, 인터페이스 (2) | 2024.03.05 |
자바 - 다형성 (0) | 2024.02.29 |