[Java] 11. 추상클래스와 인터페이스

PYOUNANI·2022년 11월 4일
0

Java

목록 보기
12/14
post-thumbnail

11. 추상클래스와 인터페이스

11-1. 추상 클래스와 추상 메서드


11-1-1. 추상 메서드

추상메서드는 메서드를 선언만 하고 구체적으로 어떻게 동작할지에 대한 구현 부분은 생략한 메서드이다.

11-1-2. 추상 클래스

추상 클래스란 추상 메서드를 하나 이상 포함하는 클래스를 가리킨다.
추상 메서드에서 구체적으로 어떻게 동작할지를 정의를 해놓지 않았기에 객체를 생성하지 못하지만 참조 변수 선언은 가능하다.

추상 클래스를 사용하는 이유로는 하위 클래스에게 동일한 동작을 강제하기 위해서 사용한다.

11-1-3. 추상 클래스 구현

추상클래스나 추상메서드를 활용해보고 싶을 땐 abstract를 사용해볼 수 있다.

  • 추상 메서드
[접근제한] abstract <변환형> <메서드명>();
  • 추상 클래스
[접근제한] abstract class <클래스명>{};

추상메서드 draw를 가진 Shape 추상 클래스를 만들어준다.

abstract class Shape{
	public abstract void draw();
}

추상 클래스로부터 상속 받은 하위 클래스에서 추상 메서드를 오버라이딩을 함으로서 사용해야 한다.

하위 클래스인 Circle 클래스에서 draw를 재정의해준다.

class Circle extends Shape{
	@Override
    public void draw(){
    	System.out.println("Circle");
    }
}

정리하자면 하위 클래스에서 같은 동작을 하는 메서드를 필요로 한다면 상위 클래스에서 일반 메서드로, 각각 하위 클래스마다 다른 동작을 하는 메서드가 필요로 한다면 추상 메서드로 이용해주면 된다.

11. 추상클래스와 인터페이스

11-1. 인터페이스

인터페이스는 간단하게 추상 메서드들의 묶음이라고 볼 수 있다.

공통적인 동작을 하는 클래스들은 상속이라는 개념을 이용해서 간단하게 구현해 볼 수 있었다.

공통점이 없는 메서드들의 사이에서도 공통적인 동작들을 강제화하기 위해서는 인터페이스를 사용해볼 수 있다.


11-1-1. 인터페이스 구현

인터페이스 키워드를 통해 선언해준다.
보통은 상수, 추상 메서드를 가지고 있게 된다.(멤버변수는 가질 수 없다)

[접근지정자] interface <인터페이스명> {
	상수 선언       // 무조건 public static final
    추상메서드 선언  // 무조건 public abstract
    default 메서드  // 무조건 public
}

추상 메서드는 불완전한 형태이기에 이 추상 메서드들의 묶음인 인터페이스를 통해 객체를 생성하는 것은 불가능하다. 단 참조 변수를 선언하는 것은 가능하다.

11-1-2. 인터페이스 사용

인터페이스를 사용하기 위해선는 implements 를 이용하면 된다.

interface Animal{
	void sound();
}

class Dog implemnets Animal{
	@Override
    public void sound(){
    	System.out.println("woof woof");
    }
}

class Cat implemnets Animal{
	@Override
    public void sound(){
    	System.out.println("meow meow");
    }
}
public class AnimalTest{
	public static void main(String[] args){
    	Animal[] animal = new Animal[2];
        animal[0] = new Dog();
        animal[1] = new Cat();
        
        for(Animal a : animal)
        	a.sound();
    }
}

0개의 댓글