1. 추상화
1-1. 상속성과 다형성의 필요성
- 상속성은 객체 간의 공통적인 기능을 관리하기 위한 기법으로, 코드의 재사용을 통하여 프로그램의 유지보수를 편리하게 한다.
- 다형성(Override, Overload)은 서로 다른 기능이지만 메서드의 이름을 공통되게 처리함으로서 전체 프로그램의 일관성을 유지하게 한다.
1-2. Override 처리의 문제 발생 가능성
- '@Override' 키워드를 사용하지 않고 메서드를 재정의하는 과정에서 메서드 이름에 실수가 발생하더라도 에러가 아닌 새러운 메서드 정의로 인식되므로 의도하지 않은 실행 결과를 가져올 수 있다.
- '@Override' 키워드를 사용하더라도 자식 클래스를 구현하는 개발자의 실수로 인하여 부모의 기능을 재정의 하지 않았다면 다형성의 구현은 이루어지지 않게 된다.
1-3. 상속 처리 시, Override를 강제하기
- 추상화 기법은 특정 클래스를 상속받은 경우, 부모의 특정 메서드들을 무조건 재정의하도록 강제하는 기법이다.
- 특정 메서드를 재정의하도록 강제함으로써, 자식 클래스들을 작성하기 위한 가이드 역할을 할 수 있다.
1-4. 추상 메서드 만들기
- 추상 메서드를 정의하기 위해서는 'abstract' 키워드를 사용하여 메서드를 정의한다.
- 추상 메서드는 자식 클래스가 구현해야 하는 메서드의 가이드라인만 제시하기 위한 목적으로 사용되기 때문에, 선언만 가능하고 구현부가 없다.
public abstract void sayHello();
1-5. 추상 메서드를 포함한 클래스
- 추상 메서드를 하나 이상 포함하고 있는 클래스는 반드시 '추상 클래스'로 정의되어야 한다.
- 추상 클래스 'abstract' 키워드를 사용하여 정의할 수 있다.
public abstract class Hello {
public abstract void sayHello();
}
- 추상 클래스는 객체를 생성할 수 없고, 반드시 상속을 통해서만 사용될 수 있다. 즉, 추상 클래스는 다른 자식 클래스를 위한 '가이드라인'의 역할을 한다.
1-6. 공통 기능과 설계 제시를 모두 처리하기
- 추상 클래스는 생성자, 멤버변수, 일반 메서드등을 포함할 수 있다.
- 즉, 공통 기능과 가이드라인을 모두 정의하여 다른 클래스에게 상속된다.
public abstract class Hello {
private String msg;
public Hello(String msg){this.msg = msg;}
public String getMsg(){return this.msg;}
public void setMsg(String msg){this.msg = msg;}
public abstract void sayHello();
}
2. 인터페이스
public abstract class Unit {
public abstract void attack();
public abstract void shield();
public abstract void walk();
public abstract void run();
public abstract void jump();
public abstract void pickup();
}
- 추상 클래스인 Unit의 기능을 용도별로 분할하여 나누어 놓고, 주인공과 몬스터가 각각의 기능 중에서 자신에게 필요한 것들만 상속받도록 하는 방법을 필요로 한다.
2-1. 추상 클래스의 한계
- 자바 클래스 간의 상속에서는 하나의 부모만 존재할 수 있기 때문에, 앞의 상황에서 요구하는 다중 상속의 구현은 불가능하다.
2-2. Interface란?
- 완벽한 추상화를 구현하기 위한 java Class의 한 종류이다.
- 다중 상속이 가능하기 때문에 용도별로 세분화하여 필요한 요소만 상속할 수 잇다.
추상클래스
-> 멤버변수, 생성자, 메서드, 추상 메서드를 포함할 수 있다.
-> 이 클래스를 상속받는 자식 클래스는 다른 클래스를 상속받을 수 없다.
-> 객체의 생성이 불가능하다.
인터페이스
-> 추상 메서드만 포함할 수 있다.
-> 인터페이스는 다중 상속이 가능하다.
-> 객체의 생성이 불가능하다.
2-3. 인터페이스 상속을 위한 implements 키워드
- 인터페이스의 상속은 implements 키워드
- 인터페이스도 추상화를 구현하고 있기 때문에, 인터페이스를 상속받는 클래스는 인터페이스 내의 모든 메서드들을 반드시 재정의해야 한다.
2-4. 인터페이스 다중 상속
- 인터페이스는 콤마(,)로 연결하여 여러개를 동시에 상속받을 수 있다.
public class Monster implements Fight, Move {
}
- 필요한 경우 다른 클래스와 동시에 상속받을 수 있다.
public class Monster extends User implements Fight, Move {
}