Free Lines Arrow
본문 바로가기
Language/Java

[Java] Interface, Abstract

by skahn1215 2021. 8. 23.
728x90
반응형

Abstract Class(추상클래스)

  • 추상클래스는 하나이상의 추상메서드를 가지는 클래스이다.
  • 다형성을 가지는 메소드의 집합을 정의할 수 있다.
  • 추상메소드는 상속받은 모든 클래스가 다 구현해야된다.
  • 추상메소드를 알아야한다

 

추상메소드를 사용하는 이유

  • 자바에서 추상 메소드의 목적은 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가
    반드시 추상 메소드를 구현해야 될때 사용한다.
  • 만약 일반 메소드로 구현한다면 사용자에 따라 해당 메소드를 구현할 수도 있고, 안 할 수도 있다.
  • 하지만 추상 메소드가 포함된 추상 클래스를 상속받은 모든 자식 클래스는
    추상 메소드를 구현해야만 인스턴스를 생성할 수 있으므로, 반드시 구현하게 된다.

 

 

추상메소드란?

  • 선언부만 존재한다.
    abstract 반환타입 메소드이름();
    
    abstract void print();
  • 반드시 오버라이딩해야만 사용할수 있는 메소드를 의미한다.
  • 자바에서 추상 메소드 목적은 추상 메소드가 포함된 클래스를 상속받는
    자식 클래스가 반드시 추상 메소드를 구현하도록 하는 방식이다.

 

 

추상메소드의 장점

  • 중복되는 부분이나 공통적인 부분을 미리 만들어 놓을수 있다.
  • 사용하는 쪽은 자신에게 필요한 부분만 재정의 할 수 있다.

 

 

추상클래스 구현

  • 추상 클래스 Instrument 에 추상메소드 play 를 정의 했다.
  • 상속받는 모든 클래스는 play를 필수 적으로 구현 해야 된다.
abstract class Instrument { 
    abstract void play(); 
}

class Drum extends Instrument 
{ 
    void play() { System.out.println("쿵쿵딱"); } 
}

class Bass extends instrument 
{ 
    void play() { System.out.println("둥둥"); } 
}

 
public class Polymorphism02 {

    public static void main(String[] args) {

        // Instrument a = new Instrument(); // 추상 클래스는 인스턴스를 생성할 수 없음.

        Drum drum = new Drum();
        Bass bass = new Bass();

        drum.play();
        bass.play();
    }
}

 

 

Interface

  • 자바에서는 클래스를 통한 다중상속을 지원하지 않는다.
  • 인터페이스로 다중 상속으로 지원하고 있다.
  • 인터페이스란 다른 클래스를 작성할때 기본이 되는 추상클래스이다.
  • 인터페이스는 추상클래스와는 다르게 추상메소드와 상수만 가질수 있다.

 

 

 

인터페이스 선언

  • 인터페이스의 모든 필드는 public static final 이어야 한다.
  • 모든 메서드는 public abstract 이어야한다.
접근제어자 interface 인터페이스이름 {

    public static final 타입 상수이름 = 값;
    ...

    public abstract 메소드이름(매개변수목록);

    ...
}

 

 

 

인터페이스의 구현

  • 인터페이스는 추상 클래스와 마찬가지로 자신이 직접 인스턴스를 생성할 수 없다.
class 클래스이름 implements 인터페이스이름 { ... }

 

interface class Instrument { 
    public abstract void play(); 
}

class Drum implements Instrument 
{ 
    public void play() { System.out.println("쿵쿵딱"); } 
}

class Bass implements instrument 
{ 
    public void play() { System.out.println("둥둥"); } 
}

 
public class Polymorphism03 {

    public static void main(String[] args) {

        // Instrument a = new Instrument(); // 추상 클래스는 인스턴스를 생성할 수 없음.

        Drum drum = new Drum();
        Bass bass = new Bass();

        drum.play();
        bass.play();
    }
}

 

 

다중상속으로 구현하기

  • 클래스는 다중상속이 안되므로 인터페이스를 상속받아 인터페이스로 만들었다.
  • 그리고 다중 상속으로 MyInstruments 를 구현했다.
interface class Instrument { 
    public abstract void play(); 
}

interface Drum extends Instrument 
{ 
    public abstract void play(); 
}

interface Bass extends instrument 
{ 
    public abstract void play();
}

class MyInstruments Drum,Bass {
    public void play() {
         System.out.println("쿵쿵딱 둥둥");
    }
}
 
public class Polymorphism03 {
    public static void main(String[] args) {
        MyInstruments myInstruments = new MyInstruments();
        myInstruments.play();
    }
}

 

 

 

 

인터페이스의 장점

  • 인터페이스를 사용하면 다중 상속이 가능할 뿐만 아니라 다음과 같은 장점을 가질 수 있다.
  • 1. 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능하다.
  • 2. 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있다.
  • 3. 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능하다.

 

 

Abstract, Interface 차이점

  Abstract Interface
다중상속 불가 가능
목적 상속받아 기능을 확장 하는 목적 상속받는 모든 클래스에 반드시 동일한 메서드를 갖게 하기 위함 이다.
클래스들 간의 관계를 맺어 준다.
접근제어자 public
protected
private 
static 또는 final 이 아닌 필드가능
public static final 변수
public abstract 함수

 

 

 

 

 

 

 

 

참고: http://tcpschool.com/java/java_polymorphism_abstract

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

728x90
반응형

'Language > Java' 카테고리의 다른 글

[Java] Stream API  (0) 2021.08.23
[Java] static  (0) 2021.08.23
[Java] Exception(예외)  (0) 2021.08.23
[Java] Checked Exception, Unchecked Exception  (0) 2021.08.23
[Java] String, StringBuffer, StringBuilder  (0) 2021.08.23

댓글