본문 바로가기
프로그래밍/java

java 추상클래스와 인터페이스 정리

by 뜨끔쓰 2019. 5. 7.
728x90
728x90

안녕하세요.


이번시간에는 java의 추상클래스와 인터페이스에 대하여 공부해보려고합니다.


일단 추상클래스와 인터페이스를 같이 묶어서 정리하는 이유는 두개의 개념이 비슷한부분이 있기 때문에 이렇게 한꺼번에 정리하게 되었습니다.


추상클래스부터 보시죠




추상클래스(abstract class)란?


일단 단어뜻에서 느껴지듯이 추상이란 무엇일까요?


사전뜻부터 한번 확인해볼까요


추상: 여러가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용.


사전적의미에서도 보이듯이 java의 추상클래스는 클래스내에 기본적인 구상만하도록 작성하고 구체적인 내용은 자식 클래스에서 작성한다고 보시면됩니다.


따라서 추상클래스에서는 선언부만 작성하며, 자식클래스에서 구현부를 모두 작성하여합니다.



사용법


abstract class Exabstract {
    int exNum;
    abstract int exMethod();
}


보시면 exNum의 값을 정해주지도 않았으며, exMethod의 내용마저 작성하지 않았죠? 일반적인 클래스에서는 이렇게 선언만하고 구현부를 작성하지 않으면 에러가 나지만 abstract키워드를 클래스에 대입하여 추상클래스로 만들면 에러가 발생하지 않습니다.


추상클래스를 상속받는 자식클래스는 추상클래스 내의 메소드를 반드시 오버라이딩하여야 합니다.


이런식으로 추상클래스를 작성할 수 있습니다.


그렇다면 추상클래스가 필요한 이유가 무엇일까요?


예를들어 프로젝트를 진행할때에 업무를 분업하여 하게될텐데 클래스를 설계하는 사람이 여러명일 경우 각자 방식에 따라 메소드 이름을 작성하겠죠? 그렇게하면 소스코드가 복잡해지며 작성자외의 사람들이 이해하기 어려운 부분이 생기게되기 마련이에요. 그렇지만 추상클래스를 사용하여 작성한다면 메소드명이 통일되기때문에 협업을 하는데에 있어서 상당한 이점을 가질 수 있습니다.





인터페이스(interface)란?

이번엔 java의 인터페이스에 대해 알아보려고 하는데요.

인터페이스는 추상클래스와 비슷한점이 매우 많습니다.


일단 추상클래스처럼 추상 메소드를 작성하고 인터페이스 내에서 구현은 하지 않습니다. 

또한 객체 생성이 불가능하며 상속받은 자식만이 객체를 생성할 수 있습니다.


차이점은 어떤게 있을까요?

인터페이스는 변수는 가질수 없으며, 상수만 가질 수 있습니다. 또한 생성자도 가지고 있지 않아요.



사용법


public interface Exinterface {
       public static final int exNum = 1;

       public abstract exMethod();
}


추상클래스와 사용법은 별반 다를바가 없지만 변수는 선언불가능하고 상수만 선언가능한 모습입니다.

이제 인터페이스를 상속받는 자식클래스에서 사용할때에는 추상클래스와는 다르게 implements라는 키워드를 사용하여 인터페이스를 상속받습니다.

interface 안의 모든 메소드는 public, abstract를 붙이지 않아도 기본으로 public과 abstarct로 취급됩니다.


그렇다면 인터페이스와 추상클래스의 차이점은 무엇일까요?


 

 추상클래스

인터페이스 

공통점

추상 메소드를 사용한다.

객체 생성이 불가능함 ( 상속받은 자식에서만 객체를 생성하여 사용가능하다.) 

차이

추상 메소드의 부분적인 작성이 가능

변수 선언가능

다중삭속 불가

abstarct, extends 키워드 사용

추상메소드의 선언만 가능

상수만 선언가능

다중상속 가능

interface, implments 키워드 사용



이렇게 서로 비슷하면서도 다른점이 있기 때문에 추상클래스와 인터페이스를 사용하실때는 꼭 유의하셔서 코드를 작성하셔야 합니다.

728x90
반응형

댓글