java

[JAVA] 추상클래스, 추상메소드와 인터페이스의 개념과 차이점

2021. 10. 21. 22:43
목차
  1. 추상메소드
  2. 인터페이스
  3. 목적의 차이
  4. 구성의 차이
728x90
반응형

추상메소드

추상 메소드는 abstract를 사용하여 껍데기만 작성한 메소드다.

추상메소드가 있는 class를 추상클래스라고 한다. 

추상클래스는 미완성 설계도에 비유하며, 인스턴스화 할 수 없다.

 

예를 들어 TV를 만드는데 대부분의 TV는 90%가 같은 기능이라고 하자. 그렇다면 설계도의 90%는 같으므로,

미리 90%가 만들어진 설계도를 작성해놓는 것이 좋을 것이다. 이때 쓰는 것이 바로 추상 클래스이다.

 

추상메소드의 디테일한 내용은 추상클래스를 상속받아 오버라이딩하여 구현해야 한다.

abstract class Shape { // 추상 클래스 선언
public Shape() { } // 생성자
public void paint() { draw(); } // 일반적인 메소드도 구현할 수 있다.
abstract public void draw(); // 추상 메소드 선언
}
class Line extends Shape{
@Override // 오버라이딩하여 구현
public void draw() {
System.out.println("line");
}
}

이때 추상클래스를 오버라이딩하지 않고 그냥 상속받으면 상속받은 클래스도 추상클래스다.

추상클래스를 통해 설계와 구현을 분리할 수 있다.

 

인터페이스

인터페이스는 규격화를 위해서 만든다.

미리 틀을 짜 놓았다고 생각하면 된다.

interface PhoneInterface{
public static final int Timeout = 1000;
public abstract void sendCall();
void receiveCall(); // public abstract 생략 가능
public static void printLogo() {
System.out.println("**Phone**");
}
}
interface Mp3{
public abstract void play();
}
class SamsungPhone implements PhoneInterface, Mp3 {
@Override
public void sendCall() {
System.out.println("전화 거는중...");
}
@Override
public void receiveCall() {
System.out.println("전화가 왔습니다");
}
@Override
public void play() {
System.out.println("노래...");
}
//메소드 추가 작성
public void flash() {System.out.println("flash가 켜졌습니다");}
}

implements를 사용하여 구현하고, interface에서 정의한 메소드들을 override한다. interface는 여러개를 다중구현할 수 있다.

 

 

 

추상클래스와 인터페이스는 둘 다 다형성을 위해서 존재하고, override해야한다는 점에서 비슷해 자주 헷갈린다.

그 둘의 차이점은 다음과 같다.

목적의 차이

추상클래스

  • 서브클래스에서 필요한 대부분의 기능을 구현한다.
  • 서브클래스에서만 필요한 부분은 추상메소드로 선언하여 서브클래스에서 구현하도록 한다.

인터페이스

  • 객체의 기능을 표준화한 문서같은 것이다.
  • 목적에 따라 상속받은 인터페이스들의 모든 추상메소드를 만들게 한다.

구성의 차이

추상클래스

  • 추상 메소드
  • 일반메소드
  • 상수, 변수 필드

인터페이스

  • 변수 필드(멤버변수)는 포함하지 않음
  • 상수는 포함
  • 추상메소드
  • 일반메소드
  • default메소드
  • static메소드
  • protected접근지정 선언 불가
  • 다중상속 지원

* 상수 : 인터페이스에서 값을 정해줄테니 함부로 바꾸지 말고 제공해주는 값만 참조해라 (절대적)

* 추상메소드 : 가이드만 줄테니 추상메소드를 overriding해서 재구현해라. (강제적)

* default 메소드 : 인터페이스에서 기본적으로 제공해주지만, 맘에 안들면 각자 구현해서 써라. (선택적)

* 정적메소드 : 인터페이스에서 제공해주는 것으로 무조건 사용 (절대적)

https://limkydev.tistory.com/197 참고

 

 

728x90
반응형

'java' 카테고리의 다른 글

[spring] @RequestBody, @ResponseBody 란, 스프링 데이터 주고받기  (0) 2021.11.30
[java] 컬렉션과 제네릭에 대해 알아보기  (0) 2021.11.03
[java] 상속 개념 정리, extends  (0) 2021.10.20
eclipse오류 해결  (0) 2021.09.17
springboot 웹프로젝트 생성 오류 해결  (0) 2021.09.03
  1. 추상메소드
  2. 인터페이스
  3. 목적의 차이
  4. 구성의 차이
'java' 카테고리의 다른 글
  • [spring] @RequestBody, @ResponseBody 란, 스프링 데이터 주고받기
  • [java] 컬렉션과 제네릭에 대해 알아보기
  • [java] 상속 개념 정리, extends
  • eclipse오류 해결
우주유령
우주유령
우주유령
우주
우주유령
전체
오늘
어제
반응형
  • 분류 전체보기 (143)
    • javascript (29)
    • java (26)
    • Network,CI,CD (16)
    • React (7)
    • SQL (2)
    • Spring (20)
    • JSP (1)
    • Tools (20)
    • Vue (3)
    • publishing (2)
    • jpa (8)
    • 책 (1)
    • Test (6)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

최근 글

hELLO · Designed By 정상우.
우주유령
[JAVA] 추상클래스, 추상메소드와 인터페이스의 개념과 차이점
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.