JAVA - 객체 지향 프로그램 3

이상원·2022년 5월 12일
0

JAVA

목록 보기
4/6

추상 클래스

추상 클래스는 미완성 설계도에 비유할 수 있다. 단어 그대로 완성되지 않고 남겨진 설계도란 것이다. 이러한 추상 클래스는 다른 클래스 작성에 도움을 주는 역할을 수행한다.

  1. 인스턴스 생성이 불가하다.
  2. 미완성 메서드(추상 메서드)를 포함하고 있는 클래스
  3. 선언부만 있고 구현부가 없는 클래스
abstract class Player {     // 추상 클래스

    abstract void play();   //추상 메서드
    abstract void stop();   //추상 메서드
}
class AudioPlayer extends Player{
    void play(){
        /* contents no*/
    }
    void stop() {
        /* contents no*/
    }
}

abstract class AbstractPlayer extends Player {
    //일부 추상 메서드만 구현시 class 앞에 반드시 abstract 붙이기!
    void play(int pos){/* contents no*/ }
}

추상 클래스는 클래스들 중 공통적인 부분만을 뽑아 묶은 후 만들기도 하는 데 이를 통해 코드의 유연함과 확장성을 가질 수 있게 된다.

인터페이스

인터페이스는 두 대상(객체) 간의 연결, 대화, 소통을 돕는 중간역할을 한다. 선언과 구현을 분리하기 때문에 변경에 유리하게 된다.

인터페이스는 일종의 추상클래스이다. 하지만 추상클래스(미완성 설계도)보다 추상화 정도가 높다.

  1. 실제 구현된 것이 전혀 없는 기본 설계도
  2. 추상 메서드와 상수만을 멤버로 가질 수 있다.
  3. 상수는 public static final, 메서드는 public abstract 접근제어자가 필수로필요하다.(없을시 자동 생성)
interface 인터페이스이름{
	
    public static final 상수; //없더라도 public static final 자동으로 붙게됨
	public abstract 메서드이름(매개변수); /public abstract 자동으로 붙게 됨

인터페이스의 상속

  1. 다중상속이 허용됨( 실제로 구현부가 없으므로 문제 X)
  2. 구현 클래스로 상속할 때는 'implements'를 사용
  3. 인터페이스에서 정의된 추상메서드를 완성해야 한다.
class 클래스이름 implements{
	//인터페이스에서 정의된 추상메서드를 구현해야 됨
    
}

인터페이스를 이용한 다형성

인터페이스 타입의 변수로 인터페이스를 구현한 클래스의 인스턴스를 참조할 수 있다.

interface Fightable{
    void move(int x, int y);
    void attack();
}
class Fight implements Fightable{
    public void move(int x, int y){}
    public void attack(){}
}
class Main{
    public static void main(String[] args) {
        Fightable f = new Fight();
    }
}

인터페이스를 메서드의 매개변수 타입으로 지정할 수 있다.(인터페이스를 구현한 클래스의 인스턴스를 매개변수로 받는 것이다.)

void attack(Fightable f){

}

인터페이스를 메서드의 리턴타입으로 지정할 수 있다.(호출한 곳 타입 같거나 변환 가능한 것으로)

Fightable method(){	// 다형성으로 인해 가능한 것
	//인터페이스를 구현한 클래스의 인스턴스를 반환
	return new Fight();
}

참고문헌
자바의 정석

인터페이스의 장점

의존 관계를 통해 변경이 용이하게 된다. 다음 인터페이스를 이용하는 관계에서는 A가 인터페이스와 관계를 맺고 있기 때문에 손쉽게 C로 변경이 가능하다.

참고문헌

자바의 정석 기초편

profile
개발하는 코린이

0개의 댓글