💡 추상화란?
1. '추상화 기법'은 특정클래스를 상속받은 경우,
'부모의 특정 메소드들을 무조건 재정의하도록 강제하는 기법'이다.
2. '특정 메소드를 재정의하도록 강제함'으로써,
자식클래스들을 작성하기 위한 '가이드의 역할'을 할 수 있다.
3. 즉, 추상화 기법은 Java클래스를 작성하기 위한 설계도를
'소스코드 형태로 제시하는 역할'을 한다.
💡 추상메소드 만들기
1. 추상메소드를 정의하기 위해서는 'abstract' 키워드를 사용하여 메소드를 정의한다.
2. 추상 메소드는 자식클래스가 구현해야 하는 메소드의 가이드라인만 제시하기 위해 사용되기 때문에,
선언만 가능하고 구현부'{ }'가 없다.
ex) public abstract void move();
💡 추상클래스
1. 추상메소드 하나 이상 포함하고 있는 클래스는 반드시 '추상클래스'로 정의되어야한다.
2. 추상클래스는 'abstract' 키워드를 사용하여 정의할 수 있다.
3. 추상클래스를 상속받는 과정은 일반클래스의 상속과 동일하게 extends를 사용한다.
(하나의 클래스만 상속 가능.)
4. 추상클래스는 '객체를 생성할 수 없고, 반드시 상속을 통해서만 사용'될 수 있다.
즉, 추상클래스는 다른 자식클래스를 위한 '가이드라인'의 역할을 한다.
ex) public abstract class Hello{
public abstract void move();
}
5. 공통기능과 설계지시를 모두 처리한다.
-> 추상클래스는 생성자, 멤버변수, 일반메소드 등을 포함할 수 있다.
즉, 공통기능과 가이드라인을 모두 정하여 다른 클래스에게 상속된다.
ex) public abstract class Hello{
private String msg; -> 멤버변수
public Hello(String msg){ -> 생성자
this.msg = msg;
}
public String getMsg(){ -> 일반메소드
return this.msg;
}
public abstract void sayHello(); -> 추상메소드
}
6. 추상클래스의 한계점.
-> 자바 클래스 간의 상속에는 하나의 부모만 존재할 수 있기 때문에,
추상클래스로는 다중상속의 구현은 불가능하다.
💡 인터페이스
1. 완벽한 추상화를 구현하기 위한 Java Class의 한 종류이다.
2. 다중 상속이 가능하기 때문에, 용도별로 세분화하여 필요한 요소만 상속할 수 있다.
3. 인터페이스도 추상화를 구현하고 있기 때문에,
인터페이스를 상속받는 클래스는 인터페이스 내의 모든 메소드들을 반드시 재정의 해야한다.
4. 인터페이스를 상속받기 위해서는 'implements' 키워드를 사용한다.
5. 인터페이스는 추상화 메소드로만 이루어져 있기 때문에,
'abstract' 키워드를 명시할 필요가 없다.
6. 인터페이스의 다중 상속 예시.
1) 인터페이스는 콤마','로 연결하여 여러 클래스를 상속시킬 수 있다.
public class Son implements Father, Mother{
}
2) 필요한 경우 다른 클래스와 동시에 상속 시킬 수 있다.
public class Son extends School implements Father, Mother{
}
💡 추상클래스와 인터페이스 비교
💡 추상클래스
-> 멤버변수, 생성자, 메소드, 추상메소드를 포함할 수 있다.
-> 이 클래스를 상속받는 자식클래스는 다른 클래스를 상속받을 수 없다.
-> 객체의 생성이 불가능하다.
-------------------------------------------------------------------------------
💡 인터페이스
-> 추상메소드만 포함할 수 있다.
-> 인터페이스는 다중 상속이 가능하다.
-> 객체의 생성이 불가능하다.