728x90
1. [추상 클래스]
- 개념: abstract 키워드로 선언된 클래스
- *추상 메서드를 최소 한 개 이상 가지고 abstract로 선언된 클래스
- 최소 한 개의 추상 메서드를 포함하는 경우 반드시 추상 클래스로 선언하여야 한다.
- *추상 메서드가 없어도 abstract로 선언한 클래스
- 그러나 추상 메서드가 하나도 없는 경우라도 추상 클래스로 선언할 수 있다.
- *추상 메서드를 최소 한 개 이상 가지고 abstract로 선언된 클래스
- *추상 클래스의 구현
- 서브 클래스에서 슈퍼 클래스의 모든 추상 메서드를 오버라이딩하여 실행가능한 코드로 구현한다.
- 추상 클래스의 목적
- 객체(인스턴스)를 생성하기 위함이 아니며, 상속을 위한 부모 클래스로 활용하기 위한 것이다.
- 여러 클래스들의 공통된 부분을 추상화(추상 메서드) 하여 상속받는 클래스에게 구현을 강제화하기 위한 것이다. (메서드의 동작을 구현하는 자식 클래스로 책임을 위임)
- 즉, 추상 클래스의 추상 메서드를 자식 클래스가 구체화하여 그 기능을 확장하는 데 목적이 있다.
*추상 메서드를 최소 한 개 이상 가지고 abstract로 선언된 클래스
abstract class Shape { // 추상 클래스 Shape() {...} void edit() {...} abstract public void draw(); // 추상 메서드 }
*추상 메서드가 없어도 abstract로 선언한 클래스abstract class Shape { // 추상 클래스 Shape() {...} void edit() {...} }
*추상 클래스의 구현class Circle extends Shape { public void draw() { System.out.println("Circle"); } // 추상 메서드 (오버라이딩) void show() { System.out.println("동그라미 모양"); } }
2. [인터페이스]
- 개념: 추상 메서드와 상수만을 포함하며, interface 키워드를 사용하여 선언한다.
- 인터페이스의 구현
- 인터페이스를 상속받고, 추상 메서드를 모두 구현한 클래스를 작성한다.
- implements 키워드를 사용하여 구현한다.
- 인터페이스의 목적
- 상속받을 서브 클래스에게 구현할 메서드들의 원형을 모두 알려주어, 클래스가 자신의 목적에 맞게 메서드를 구현하도록 하는 것이다.
- 구현 객체의 같은 동작을 보장하기 위한 목적이 있다.
- 즉, 서로 관련이 없는 클래스에서 공통적으로 사용하는 방식이 필요하지만 기능을 각각 구현할 필요가 있는 경우에 사용한다.
- 인터페이스의 특징
- 인터페이스는 상수 필드와 추상 메서드만으로 구성된다.
- 모든 메서드는 추상 메서드로서, abstract public 속성이며 생략 가능하다.
- 상수는 public static final 속성이며, 생략하여 선언할 수 있다.
- 인터페이스를 상속받아 새로운 인터페이스를 만들 수 있다.
- interface MobilePhone extends Phone { }
*인터페이스
interface Phone { // 인터페이스 int BUTTONS = 20; // 상수 필드 (public static final int BUTTONS = 20;과 동일) void sendCall(); // 추상 메서드 (abstract public void sendCall();과 동일) abstract public void receiveCall(); // 추상 메서드 }
*인터페이스의 구현
class FeaturePhone implements Phone { // Phone의 모든 추상 메서드를 구현한다. public void sendCall() {...} public void receiveCall() {...} // 추가적으로 다른 메서드를 작성할 수 있다. public int getButtons() {...} }
3. [추상 클래스와 인터페이스의 차이]
- 추상 클래스와 인터페이스의 공통점
- 인스턴스(객체)는 생성할 수 없다.
- 선언만 있고 구현 내용이 없다.
- 자식 클래스가 메서드의 구체적인 동작을 구현하도록 책임을 위임한다.
- 추상 클래스와 인터페이스의 차이점
- 서로 다른 목적을 가지고 있다.
- 추상 클래스는 추상 메서드를 자식 클래스가 구체화하여 그 기능을 확장하는 데 목적이 있다. (상속을 위한 부모 클래스)
- 인터페이스는 서로 관련이 없는 클래스에서 공통적으로 사용하는 방식이 필요하지만 기능을 각각 구현할 필요가 있는 경우에 사용한다. (구현 객체의 같은 동작을 보장)
- 추상 클래스는 클래스이지만 인터페이스는 클래스가 아니다.
- 추상 클래스는 단일 상속이지만 인터페이스는 다중 상속이 가능하다.
- 추상 클래스는 “is a kind of” 인터페이스는 “can do this”
- Ex) 추상 클래스: Appliances(Abstract Class) - TV, Refrigerator
- Ex) 인터페이스: Flyable(Interface) - Plane, Bird
- 서로 다른 목적을 가지고 있다.
728x90
'백앤드 > JAVA' 카테고리의 다른 글
[JAVA] final, finally, finalize() (0) | 2024.10.18 |
---|---|
[JAVA] Wrapper Class는 기본 자료형을 객체로 변환한다 (0) | 2024.10.18 |
[JAVA] ==는 주소 값, equals는 값 비교 (0) | 2024.10.18 |
[JAVA] 객체지향 프로그래밍 (OOP,Object Oriented Programming) (0) | 2024.10.18 |
[JAVA] String, StringBuilder, StringBuffer 차이 (0) | 2024.10.18 |