■ [Java-9] 추상클래스, 추상메소드, 인터페이스
안녕하세요.
오늘은 JAVA의 추상클래스, 추상메소드, 인터페이스에 대해서 알아보겠습니다.
지난 포스팅에서 살짝 언급하였죠?
오늘은 바로 그 추상화에 대해서 정리하겠습니다.
■ 추상클래스란?
■ 추상메소드란?
■ 인터페이스란?
■ 추상클래스란?
클래스는 크게 2종류로 나뉠 수 있는데요.
객체를 직접 생성할 수 있는 '실체 클래스' 그리고 이들의 공통적인 특성을 선언한 '추상 클래스'
이렇게 나뉠 수 있습니다. 물론 실체 클래스와 추상 클래스는 상속의 관계를 가지고 있어요.
(추상 클래스가 부모인 것은 당연하겠죠?)
실체 클래스는 추상 클래스의 모든 특성을 물려받고, 이 외의 추가적인 특성을 가질 수 있습니다.
추상 클래스는 이러한 특성을 선언하였기에, new연산자를 통한 인스턴스를 생성시킬 수 없어요.
예를 들어 보겠습니다.
Tire.class / Door.class / Handle.class 등의 실체 클래스가 있다고 가정할 때, 이들의
공통되는 필드와 메소드를 따로 선언하여 Car.class를 만드는데 이를 추상 클래스라고 합니다.
추상 클래스를 사용하는 목적은 크게 2가지에요
- 실체 클래스의 공통 필드와 메소드 이름을 통일 -> 관리 효율
- 실체 클래스 작성 시 시간 절약 및 실수 방지 -> 관리 효율
결국 관리 효율이에요
사용 방법은 아래와 같습니다.
Car.java |
class abstract class Car { //필드 //생성자 //메소드 } |
Tire.java |
class class Tire extends Car { //필드 //생성자 //메소드 } |
mainEx.java |
class class mainEx { public static void main(String[] args) { Tire tire = new Tire(); tire.method(); tire.method(); } } |
■ 추상메소드란?
추상 클래스에 대해 알아보았으니 다음으로 추상 메소드에 대해 알아보죠
추상메소드도 추상화라는 의미는 같습니다.
추상클래스에서만 선언할 수 있는 메소드의 선언부만 존재하는 메소드입니다.
하위 클래스가 반드시 포함하여 설계해야만 합니다.
그렇기에 하위 클래스(자식 클래스, 실체 클래스)는 반드시 오버라이딩 하여 메소드를 작성해야 합니다 !
사용법은 아래와 같습니다.
[public || protected] abstract {return type} 메소드명 (매개변수, ...) |
Car.java |
class abstract class Car { public String kind;
public abstract void Name(); } |
BMW.java |
class class BMW extends Car { public BMW() { this.kind = "수입차"; } @Override public void Name() { System.out.println("BMW입니다"); } } |
KIA.java |
class class KIA extends Car { public KIA() { this.kind = "국산차"; } @Override public void Name() { System.out.println("KIA입니다"); } } |
어떤 느낌인지 아시겠나요?
해당 추상 메소드를 작성하지 않으면... 컴파일 에러가 발생합니다.
그렇기에 반드시 오버라이딩하여 작성해야 합니다.
■ 인터페이스란?
오늘의 마지막 주제인 인터페이스입니다.
인터페이스는 말 그대로 인터페이스입니다. 쉽게 생각하면 쉽게 이해할 수 있어요.
객체와 코드 사이에서 인터페이스 역할을 해줍니다. 그렇기에 객체의 내부를 알 필요 없이
인터페이스의 메소드만 알고 있으면 됩니다. 쉽게 말해 추상 메소드만을 가진 클래스입니다.
인터페이스에서 선언된 메소드는 반드시 구현되야하죠.
사용법은 아래와 같습니다.
public interface 인터페이스명 {...} |
먼저 디폴트 메소드에 대해서 정리하겠습니다.
default 리턴타입 메소드명 (매개변수, ...) {...} |
다음으로는 정적 메소드에 대해서 정리하겠습니다.
static 리턴타입 메소드명 (매개변수, ...) {...} |
public class 구현클래스명 implements 인터페이스명 { //인터페이스에 선언된 추상 메소드의 실체 메소드 선언 } |
이후 main 클래스에서 호출을 통해 이전과 같은 방법으로 사용하시면 됩니다.
인터페이스에 대해 잘 이해를 하시면 코드 정리 및 구현에 도움이 많이 됩니다.
감사합니다.
'Java' 카테고리의 다른 글
[Java-11] 스트림 (Stream) (0) | 2017.03.02 |
---|---|
[Java-10] 예외 처리(Exception) (0) | 2017.02.18 |
[Java-8] 상속 (0) | 2017.02.05 |
[Java-7] 클래스 (0) | 2017.01.30 |
[Java-6] 객체와 클래스 (1) | 2017.01.28 |