본문 바로가기
JAVA

JAVA(추상화, 인터페이스)

by 글로리. 2020. 6. 10.

 

Override 처리의 문제발생 가능성

  • '@Override' 키워드를 사용하지 않고 메서드 재정의 과정에서 메서드이름에 오타가 발생하더라도
    에러가 아닌 새로운 메서드로 인식.
  • '@Override' 키워드를 사용하더라도 자식클래스를 구현하는 개발자의 실수로 인해
    부모의 기능이 재정의 되지 않으면 다형성 구현 실패.

추상화

  • 위 와 같은 문제발성 가능성을 없애고자 부모클래스를 상속받은 경우, 부모의 특정 메서드들을 무조건 재정의 하도록 하는 기법
  • 자식클래스들이 재정의 해야 할 메서드를 알려줌으로써 가이드 의 역할을 할 수 있음.
  • 추상화는 Java클래스를 작성하기 위한 설계도 를 소스코드형태로 제시하는 역할.

추상클래스

추상메서드를 포함한 클래스

// 추상 클래스의 정의 - 'abstract' 키워드 사용
public abstract class Hello {
    // 추상메서드 입력 - 선언만 가능하며 구현부를 위한 블록 존재하지 않음.
    public abstract void sayHello();
}
  • 추상클래스는 객체 생성불가능, 반드시 상속을 통해서 사용된다.

공통기능과 설계지시 동시 처리

  • 추상클래스는 생성자, 멤버변수, 일반메서드등을 포함한다.
  • 공통기능과 가이드라인을 모두 정의하여 다른크래스에게 상속한다.
public abstract class Hello {
    // 멤버변수
    private String msg;

    // 생성자
    public Hello(String msg) {this.msg = msg;}

    // getter, setter
    public String getMsg() {return this.msg;}
       public void setMsg(String msg) {this.msg = msg;}

    // 자식들이 재정의 해야할 추상메서드를 명시
    public abstract void say();
}

추상클래스 적용

public class 자식클래스 extends 추상클래스 {
    public 생성자(파라미터) {
        super(파라미터);
    }

    @Override
    puvlic void 재정의메서드 {
        ... 메서드 재정의 ... 
    }
}

인터페이스

  • 추상클래스를 상속받은 자식클래스는 부모클래스의 모든 추상 메서드를 재정의 해야한다.
    하지만 어떠한 자식클래스는 상속받은 추상메서드가 불필요 한 경우가 생긴다.
  • 이럴때 자신이 필요한 메서드만 상속받는 방법이 인터페이스 이다.

추상클래스와 인터페이스 비교

추상클래스 인터페이스
멤버변수, 생성자, 메서드, 추상메서드 포함가능 추상메서드만 포함
또 다른 클래스 상속받는것 불가능 다중 상속 가능
객체생성 불가능 객체생성 불가능

인터페이스 만들기

// 인터페이스에 추가되는 모든 메서드는 추상메서드이기 때문에 'abstract'키워드 명시 불필요  
public interface Unit {  
public void attack();  
public void shield();  
public void move();'  
// ...여러 메서드...

// 인터페이스 다중상속  
public class 자식클래스 implements 부모클래스1 부모클래스2 .... {

}  

댓글