Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발이글스

[JAVA] 인터페이스와 추상클래스의 차이가 대체 뭘까? 본문

Programming/Java

[JAVA] 인터페이스와 추상클래스의 차이가 대체 뭘까?

지윤이글스 2022. 9. 25. 00:11

인터페이스추상클래스는 엄연히  다.른.것. 입니다!! 근데 왜 자꾸 헷갈리는거지..

이 글로 완벽히 정리&이해 해보도록 하겠습니다. 스따뜨!!!!!!!!

 

추상클래스 Abstract Class

추상클래스는 예약어 abstract 를 붙여 클래스를 선언하게 됩니다 -> abstract class Car { 

추상클래스는 추상메소드를 0개이상 포함하고 있습니다. 메소드도 마찬가지로 -> public abstract String name();

어라? 근데 메소드인데 왜 구현하는곳이 없어? 동작하는거 써야되는데? 

바로 추상메소드의 특징입니다. 선언부 있고~ 구현부 없고~ 

-->작성되어있지 않은 구현부는 자식클래스에서 오버라이딩해서 사용하게됩니다. 

그런데, 추상클래스라고해서 꼭! 추상메소드를 포함해야하나요? 아.니.요. 없어도되요. 예시로 보여드릴게요

abstract class Animal{   //추상클래스 선언
	String name;
    public void setName(String name){
    	this.name = name;
        }
    }

추상클래스니까 abstract로 클래스 선언해주고 안에는 일반클래스처럼 필드,메소드를 선언해 주었습니다. 

but!! 추상클래스는 객체를 생성할 수 없어요 

상속을통해 자식클래스를 만들고, 자식클래스에서 추상메소드를 오버라이딩하여 객체를 생성할 수 있어요.

 

추상클래스 구현목적 

: 추상메소드가 포함된 추상클래스를 상속받는 자식클래스가 반드시 오버라이딩 하여 구현하기 위함이다. 

: 추상클래스는 추상메소드를 통해 자식클래스가 구현할 메소드를 명료하게 알려주는 인터페이스 역할을 한다. 

: 자식클래스는 추상메소드를 목적에 맞게 구현하는 다형성을 실현한다. 

 

상속 = 확장 +  다형성 

: 객체지향의 상속은 상위클래스의 특성을 재사용하는것입니다. 

: 객체지향의 상속은 상위클래스의 특성을 확장하는것입니다.

: 객체지향의 상속은 is kind of 관계를 만족해야 합니다. 

 

인터페이스  Interface

추상클래스는 이렇게 상위클래스는 하위클래스에게 특성을 상속해준다는것 적용하고있다는 특징을 가지고있습니다. 

하지만 인터페이스는 구현클래스 is able to 인터페이스 라고 해석할 수 있겠습니다. 

즉,  "무엇을 할 수 있는"이라는 표현입니다.

인터페이스는 클래스가 무엇을 할 수 있다라고 하는 기능을 구현하도록 "강제" 하는 특징을 가지고 있습니다. 

So, 인터페이스는 implements 키워드를 사용하는것을 알 수 있습니다. 

 

인터페이스의 외형은 보통 이렇다. 

public interface WashingMachine{
	public void start();
    public void pause();
    public void stop();
    public int changeSpeed(int speed);
  }

메소드에 구현부는 없고 선언부 만 있다. 자이제 인터페이스를 사용해보자!

public class LG implements WashingMachine
@Override
public void start(){
	System.out.println("빨래를 시작했습니다.")
 }
public void pause(){
	System.out.println("빨래를 일시중지했습니다.")
 }
 public void stop(){
	System.out.println("빨래를 중지했습니다.")
 }
 }

이렇게 인터페이스에서 껍데기처럼 선언해놓은 메소드를 자식클래스에서 오버라이딩해 메소드를 사용할 수 있습니다. 

 

대규모 프로젝트에서는 수많은 개발자들이 함께 개발을 하게 됩니다. 

예를들어 번역프로그램을 개발한다고하자. 어떤개발자는 영어, 어떤개발자는 중국어, 어떤개발자는 일본어를 개발한다고 했을 때,

서로 다르게 메소드를 구현하고, 서로 다르게 네이밍을 할것이다. 이렇게 되면 나중에 유지보수가 힘들어진다. 이를 방지하게 위해  implements 할 인터페이스를 만든다. 자바는 다중상속을 지원하지 않지만, 인터페이스를 사용해 다중상속을 할 수가 있다.  

인터페이스  추상클래스 
implements  extends
다중상속이 가능! 다중상속 불가능ㅠ
추상메소드만 사용가능 추상메소드 & 일반메소드 모두 사용가능!
메서드선언만 가능  메서드의 부분적인 구현가능
생성자,필드  가질 수 없다 생성자, 필드 모두 가능!
상속받은 클래스는 반드시 인터페이스에 있는 메서드 모두 구현해야함 상속받는 클래스는 추상메서드만 구현해도됨
구현객체의 같은 동작을 보장하기 위함 추상클래스를 상속받아 기능을 이용, 확장하기 위함

 

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

[JAVA] 문자열로 형변환  (0) 2023.01.18
[JAVA] 생성자 오버로딩  (0) 2022.09.14
[JAVA] 업캐스팅 & 다운캐스팅  (0) 2022.09.13
[JAVA] super & super()  (0) 2022.09.13
[JAVA] if문, switch문  (0) 2022.09.06