추상클래스와 인터페이스의 등장

GW·2023년 7월 29일

추상클래스란?

  • 다형성을 일부 보장하기 위해서 등장
  • 서로 비슷한 클래스의 공통 부분을 묶을 때 사용
  • 단독으로 객체를 사용할 수 없다.
  • 부모의 역활로 사용한다.
  • 구현된 메서드를 가질 수 있다.

다형성을 보장한다는 의미는 무엇인가?

  • 부모가 명령을 내리면 자식이 반드시 동작을 해야한다.
public class Animal {
    public void eat(){
        System.out.println("동물처럼 먹다.");
    }
}
public class Animal {
    public void eat(){
        System.out.println("동물처럼 먹다.");
    }
}
public class Cat extends Animal {
    public void eat(){
        System.out.println("고양이처럼 먹는다/");
    }
    public void night(){
        System.out.println("고양이는 자는걸 좋아함");
    }
}

Animal ani = new Cat();
Animal ani = new Dog();
부모를 호출하지 않는 이상 부모클래스인 eat메서드 안에서 굳이 출력문을 적어줄 필요가 없다.
그래서 사용하는게 추상 메서드이다

추상클래스
public abstract class Animal {
    public abstract void eat(); //추상메서드(불완전한 메서드):메서드 구현부가 없다 
    							// 추상클래스는 단독으로 사용할 수 없고 자식의 도움을 받아야함
                                //그래서 다형성이 보장된다.
}

인터페이스의 등장

만약 서로 다른 동작을 가지는 클래스를 상속관계로 만들어서 동작을 시켜야한다고 가정해보자

-> 서로 다른 동작의 클래스도 공통 기능을 만들어서 상속구조로 사용 가능?

public abstract class RemoCon {
    //chUp(), chDown(), volUp, volDown()

    public abstract void chUp();
    public abstract void chDown();
    public abstract void volUp();
    public abstract void volDown();
    public void intternet(){
        System.out.println("인터넷이 구현된다.");
    }
}
Remocon이라는 부모와
Tv, Radio라는 자식 클래스가 있다.
Tv()에는 Remocon(부모)의 구현메서드 (internet();)을 상속받아도 아무런 문제가 없는데
Radio()internet()이라는 메서드가 필요가 없는데 강제로 상속받아야한다.
이러한 문제를 해결하기 위해 인터페이스를 사용한다.
100퍼센트 다형성을 보장받지 못한다.

인터페이스란?

  • 다형성을 100% 보장하기 위해서 등장
  • 서로 다른 클래스의 공통부분을 묶을때 사용
  • 단독으로 객체를 생성 할 수 없다.
  • 부모의 역활로 사용한다.
  • 추상메서드와 final static 상수만 올 수 있다.
  • 구현된 메서드를 가질 수 없다.

상수는 대문자로 작성

다중상속을 지원하는 인터페이스

추상클래스와 인터페이스의 공통점/차이점

추상클래스

추상클래스 : 추상메서드 + 구현메서드 ( public void aa(){System.out.print();})

인터페이스

인터페이스 : 추상메서드+final static변수

공통점

  • 다형성을 보장하기 위해서 등장된 개념
  • 추상 메서드를 가질 수 있다.
  • 단독으로 객체를 생성 할 수 없다.
  • 부모의 역활로 사용한다.

차이점

  • 서로 비슷한 클래스의 공통부분을 묶을때 사용: 추상클래스
    • 추상메서드와 구현메서드를 가질 수 있다.
  • 서로 다른 클래스의 공통부분을 묶을 때 사용: 인터페이스
    • 추상메서드와 final static변수(상수)를 가질 수 있다.

1개의 댓글

comment-user-thumbnail
2023년 7월 29일

좋은 글 감사합니다. 자주 올게요 :)

답글 달기