[JAVA] 추상클래스와 인터페이스

이대건·2024년 3월 22일

Java

목록 보기
14/17

추상클래스와 인터페이스를 알아보자

추상클래스와 인터페이스에서 공통점과 차이점을 찾기 시작하면 햇갈리기만 하다
각 기술의 특징과 목적을 파악하여 알맞게 활용하자

  • 애초에 사용하는 키워드가 다르다
    interface : implements
    abstract class : extends

인터페이스

결론: 자바의 인터페이스는 기능의 호환성을 높이기 위한 것이다.

  • 인터페이스라는 단어의 의미는 접속부다.
  • 예를 들어 사람과 컴퓨터의 대표적인 인터페이스로 마우스가 있다.
  • 커서와 휠 동작을 하기 위해 대표적으로 마우스를 사용하는 것이지 꼭 일반적인 형태의 마우스여야 하는 것은 아니다.
  • 터치패드, 버티컬마우스, 화면 터치등 이 모든 것들이 이미 커서와 휠 동작을 위한 인터페이스로 개발이 된것

즉 자바에서 인터페이스는 기능을 구현하는데 필요한 커서와 휠과 같은 기본적인 명세다

List<Integer> linkLs = new LinkedList<>();
List<Integer> arrLs = new ArrayList<>();
  • 두 컬렉션은 내부적인 구현 방법이 다르고 사용 환경이 다르지만 기능은 List다.

추상클래스

결론: 자바의 추상클래스는 상속관계에서 부모클래스에 필요없는 구현을 줄이기 위함이다.

  • 추상클래스는 결국 클래스다
  • 클래스란 객체의 상태와 행동을 설명하는 틀이다.
  • 추상이란 기능에 대한 명세만 있을 뿐 구현이 없는 것을 의미한다.(이해하기 쉽게 비약)
  • 추상 클래스 = 클래스 + 추상 매소드
abstract class Vehicle{
	boolean key;
    int energy;
    
	public boolean start(){
        this.key = true;
        return true;
    }
    
	public abstract void addFuel(int energy);
}

class Car extends Vehicle{
	@Override
    public void addFuel(int energy){
    	this.energy = 10*energy;
    }
}
class Bike extends Vehicle{
	@Override
    public void addFuel(int energy){
    	this.energy = 15*energy;
	}
    @Override
    public boolean start(){
    	this.key = false;
        return false;
	}
}
  • 위 소스코드에서 public void addFuel(int energy)는 반드시 오버라이드 해야한다.
  • boolean start()는 기존 상속관계처럼 오버라이드 한다면 동적바인딩으로 호출될 것
    Vehicle v = new car();
    v.start();
    // v.key는 true

	Vehicle v = new Bike();
    // 동적바인딩으로 Bike에 오버라이드된 start를 호출
    v.start();
    // v.key는 false
profile
일낸머스크

0개의 댓글