자바의정석_CHAPTER7 객체지향 프로그램2_(2)

j_ie_j·2023년 1월 25일
0

JAVA의정석_기초

목록 보기
8/9

👉 추상클래스(abstract class)

추상 클래스는 미완성의 설계도에 비유할 수 있다.

추상클래스
미완성 설계도. 인스턴스 생성불가.
미완성 매서드(추상 매서드)를 포함하고 있는 클래스

=> 새로운 클래스를 작성한느데 있어서 바탕이 되는 조상 클래스로서 중요한 의미를 갖는다.

abstract class 클래스이름{
	...
}

👉 추상 메서드(abstract method)

선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상메서드.
=>즉, 설계만 해 놓고 실제 수행될 내용은 작성하지 않았기 때문에 미완성 메서드인 것

/*주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명한다. */
abstract 리턴타입 메서드이름();

추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 추상메서드를 모두 구현해주어야 한다. 만일 조상으로부터 상속받은 추상메서드 중 하나라도 구현하지 않는다면, 자손클래스 역시 추상 클래스로 지정해 주어야 한다.

abstract class Player{//추상클래스
	 abstract void play(int pos); //추상메서드
     abstract void stop(); //추상메서드
}

class AudioPlayer extens Player{
	void play(int pos){/*내용생략*/} // 추상메서드를 구현
    void stop(){/*내용 생략*/} // 추상메서드를 구현
}

abstract class AbstractPlayer extends Player{
	void play(int pos){/*내용생략*/}
}

👉 인터페이스(interface)

인터페이스는 추상클래스처럼 추상 메서드를 갖지만 추상 클래스보다 추상화 정보가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.

interface 인터페이스이름{
	public static final 타입 상수이름 =;
    public abstract 메서드이름(매개변수목록);
}
  • 모든 멤버변수 public, static, final 이어야 하며, 이를 생략할 수 있다.
  • 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.
    -> 단, static메서드와 디폴트 메서드는 예외

👉 인터페이스의 상속

인터페이스는 인터페이스로부터만 상속받을 수 있으며, 클래스와는 달리 다중 상속, 즉 여러개의 인터페이스로 부터 상속을 받는 것이 가능하다.

interface Movable{
	/**지정된 위치 (x,y)로 이동하는 기능의 메서드*/
    void move(int x, int y);
}

interface Attackable{
	/**지정된 대상(u)을 공격하는 기능의 메서드 */
    void attack(Unit u);
}

interface Fightable extends Movable, Attackable{ }

👉 인터페이스의 구현

인터페이스도 자신에 정의도니 추상메서드의 몸통을 만들어주는 클래스를 작성해야한다.
인터페이스는 구현한다는 의미의 키워드 'implements'를 사용한다.

class 클래스이름 implements 인터페이스 이름{
	//인터페이스에 정의된 추상메서드를 모두 구현해야 한다.
}

class Fighter implements Fightable{
	public void move(int x, int y){/*내용생략*/}
    public void attack(Unit u){/*내용생략*/}
}

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

Fightable f = (Fightable)new Fighter();
//또는
Fightable f = new Fighter();

리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다.

👉 인터페이스의 장점

  • 개발시간을 단축시킬 수 있다.
  • 표준화가 가능하다.
  • 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
  • 독립적인 프로그래밍이 가능하다.

👉 내부 클래스(inner class)

내부 클래스는 클래스 내에 선언된 클래스이다. 클래스에 다른 클래스를 선언하는 이유는 두 클래스가 서로 긴밀한 관계에 있기 때문이다.

내부클래스의 장점

  • 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
  • 코드의 복잡성을 줄일 수 있다. (캡슐화)

👉 내부 클래스의 종류와 특징

👉 내부클래스의 선언

class Outer{
	class InstanceInner{}
    static class StaticInner{}
    
    void myMethod(){
    	class localInner{}
    }
}

👉 익명클래스(anonymous class)

익명클레스는 다른 클레스들과 달리 이름이 없다.
클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한번만 사용될 수 있고 오직 하나의 객체만을 생성할 수 있는 일회용 클래스이다.

new 조상클래스이름(){
	//멤버 선언
}
//또는
new 구현인터페이스이름(){
	//멤버 선언
}
profile
@studing_dobby

0개의 댓글