본문 바로가기
IT_Developers/JAVA

JAVA - abstract class, interface / 추상클래스, 인터페이스의 차이점은?

by 고코더 2020. 3. 7.

abstract class VS interface 비슷하지만 다른


안녕하세요.
고코더 입니다.


인터페이스와 추상 클래스는 비슷하지만 완전히 다른 방식으로 작동 합니다. 둘 다 상속 받는다고 하지만 인터페이스는 사실상 구현이라고 표현하는게 더 옳습니다. 
추상클래스는 상태나 기능을 공유합니다.  인터페이스는 상태와 기능을 제공하는 역할을 합니다. 추상클래스에서 메소드를 구현하는 것이 가능하고 인터페이스는 형태만 제공하고 구현받은 클래스에서 메소드를 구현 합니다. 
조금 헷갈리는 부분이 많으니 다시 한번 정리해보겠습니다.



 1. 인터페이스(interface)란?


자바에서 인터페이스 만드는는 방법은 클래스 작성법과 거의 유사합니다. 다만 접근제어자를 interface 이어야 합니다. 빈껍데기를 형태만 제공합니다. 그래서 implemnets라는 키워드로 구현을 받게 됩니다. 예를 들면 고코더넷이라는 본사에서 계열사들에게 온라인 결제 아이디로 금액을 한군데로 모을려고 합니다. 그럼 인터페이스를 구현해서 이런식으로 구현 합니다.


1
public static final int pg_id = 1004// 모든 결제 아이디는 이걸로 통일
cs


이렇게 하면 고코더넷 회사가 소유한 수백개의 시스템 결제가 하나로 관리가 가능합니다.그리고 만약 pg 시스템을 변경하거나 id 가 변경된다면 인터페이스만 수정 하면 됩니다. 그래서 현업에서도 절대 변경 되면 안되는 값을 인터페이스로 만들로 상속받아 개발 하도록 합니다.

- implements(구현) 받는다
- 다형성
- 다중 상속
- 클래스 작성할때 기본 틀을 제공
- 모든 필드는 public static final
- 모든 메소드는 public abstract 



 2. 추상클래스(abstract)란?


추상 클래스는 클래스 앞에 abstract라는 키워드를 사용합니다. 상속받는클래스에서는 extends를 사용합니다. 상속받은 클래스는 받드시 구현해야 합니다. 만약 상속 받은 클래스를 구현하지 않으면 해당 클래스도 추상 클래스 뿐이 되지 않습니다. 

1
2
3
4
5
6
7
public abstract class Animal {
    public String book_name;
     
    public void gerne(){
        System.out.println("에세이");
    } 
}
cs

- extends 받는다
- 상속 부모와 자식 관계
- 클래스이다.
- 변수와 상수를 가진다.

고코더넷에서 도서관리시스템을 개발합니다. 종이책 관리시스템을 만들고 이 시스템을 기초로 전자책 관리시스템을 만들려고 합니다. 책에는 공통점이 있습니다. 책 제목, 장르, 가격등 필수적인 조건들이 있습니다. 그래서 어플리케이션 아키텍쳐를 설계합니다. 전자책 계열사에게 해당 책에 대한 추상클래스를 상속받아 사용하도록 합니다. 그러면 우리 회사의 시스템에서는 언제나 책 제목, 장르, 가격등이 필수로 구현되고 같은 이름으로 주어지기 때문에 시스템 통합성과 시간이 단축 됩니다.



 3. 차이점


차이점을 다시 정리합니다. 


인터페이스
추상클래스
공통점
객체를 생성 할 수 없다. 상속받는 클래스는 반드시 구현 해야 한다
차이점
멤버 필드를 가질 수 없음
멤버 변수 가질 수 있음
다중 구현
단일 상속
어떤 구현도 불가
부분적인 구현이 가능
상수만 가질 수 있다.
변수와 상수를 가질 수 있다.
클래스가 아니다
클래스이다.


마무리


현업에서는 안헷갈리는데 이론만 물어보면 헷갈리는..



댓글