추상화
미완성 클래스를 작성하는 것, 객체지향에서의 추상화는 개념을 정의하는 것.
기본(부모/조상) 클래스를 설계할 때 메소드의 이름 있는 부분(선언부)만 정의하는 것.
추상 클래스와 추상 메소드
추상 클래스 Abstract class |
멤버 중에 하나라도 추상 메소드가 있으면 추상 클래스임. |
추상 클래스 안에는 추상 메소드가 없을 수도 있음. 이 경우 추상 클래스로 만들 필요가 없음. | |
추상 메소드 Abstract method |
선언부만 정의(작성)된 메소드. 추상 메소드가 있으면 그 클래스는 반드시 추상 클래스여야 함. |
추상 메소드는 반드시 상속 받은 하위 클래스에서 내용을 정의해야 함. (또는 하위 클래스도 추상 클래스가 되어야함.) |
추상 클래스와 추상 메소드의 예제)
package AbstractPkg;
public class AbstractTest01 {
public static void main(String[] args) {
Abs abs2 = new Abs() {
@Override
public void absMethod() {
System.out.println(1);
}
};
Abs abs3 = new Abs() {
@Override
public void absMethod() {
System.out.println(2);
}
};
abs2.absMethod();
abs3.absMethod();
ChildAbs abs4 = new ChildAbs();
ChildAbs abs5 = new ChildAbs();
abs4.absMethod();
abs5.absMethod();
}
}
abstract class Abs{
public abstract void absMethod();
}
class ChildAbs extends Abs {
@Override
public void absMethod() {
System.out.println(5);
}
}
Abs abs = new Abs();를 사용하면 안되는 이유는 추상 클래스는 인스턴스를 만들 수 없기 때문이다.
대신 인스턴스를 만들 때 추상메소드를 정의하면 가능하다.
abs2와 abs3는 추상 클래스 객체가 아닌, 만듦과 동시에 정의된 추상 클래스를 재정의 해줘서 독자적으로 사용이 가능하다.
abs4와 abs5는 하나의 추상 클래스를 상속받은 ChildAbs를 생성한거라서 출력시 같은 결과가 나왔다.
부모 클래스의 추상 메소드를 반드시 정의해야 함.
이 메소드에서 실질적으로 처리해야 할 작업을 작성.
추상 사용 => 작업 팀 내의 표준화(정해진 규칙대로 진행함)
인터페이스(Interface)
추상화 정도가 깊은 클래스, 모든 메소드는 추상메소드임.
변수는 없고, 상수는 들어갈 수 있다. 상수일 경우에는 초기값이 있어야함.
완전 미완성이기 때문에 인스턴스를 만들 수 없음.
인터페이스를 상속받아서 작성하는 클래스의 작성 형식
class 클래스명 implements 인터페이스명 { }
*인터페이스에 선언된 모든 메소드를 반드시 재정의(Override)해야한다.
인터페이스를 상속받은 클래스에 새로운 멤버(변수, 메소드)를 추가할 수 있다.
인터페이스 예제)
package InterfacePkg;
public class InterfaceClass implements ParentInterface {//구현한다.(상속받는다가 아님)
@Override
public void iMethod1() {
}
@Override
public void iMethod2() {
}
}
package InterfacePkg;
public interface ParentInterface {
//필드 == 상수
public static final int ci = 100;
int ci2 = 200;
//메소드 == 추상 메소드
public abstract void iMethod1();
void iMethod2();
}
int ci2 = 200; 앞에는 public static final, void iMethod2(); 앞에는 public abstract 가 생략되어 있다.
'JAVA' 카테고리의 다른 글
0408 JAVA - 문자열의 처리 (0) | 2020.04.08 |
---|---|
0407 JAVA - 예외처리 (0) | 2020.04.07 |
0330 JAVA - 객체지향의 특성(다형성) (0) | 2020.03.31 |
0330 JAVA - 객체지향의 특성(상속) (0) | 2020.03.31 |
0327 JAVA - 객체 지향의 특성(상속) (0) | 2020.03.27 |