티스토리 뷰
1. 인터페이스(Interface)란?
💡 추상 메소드(public abstract)와 상수 필드(public static final)만 가질 수 있는 클래스의 변형체.
implements라는 키워드를 사용하며 자식 클래스 입장에서 '상속 받았다'고 말하지 않고 '구현한다'라는 표현을 쓴다.
- 매개체 역할
- 인터페이스의 표현식
interface TestInter {
// 모든 필드는 public static final만 가능하다.
public static final PI1 = 3.1415;
// public : 어디서든 접근 가능하며
// static : 프로그램 전반에 걸쳐 시작부터 끝까지 사용 가능
// final : 값은 변하지 않는다.
// public static final을 생략해도 자동으로 작성된다.(생략 가능)
PI2 = 3.14;
// 기본적으로 메소드는 public abstract여야 한다.
public abstract void method1();
// 어디서든 접근가능하지만 오버라이딩해서 사용해야한다.
// public abstract를 생략해도 자동으로 작성된다.(생략 가능)
void method2();
}
- 원래 게시판, 공지사항, 회원관리를 각자 만들고 합치면 오류 발생 확률 높다.
- 따라서 합칠 때를 먼저 정의 내리고 그 정의(인터페이스)를 물려받아서 사용
→ 통일성, 유지보수
package com.ohgiraffers.section03.interfaceimplements;
public class Application {
public static void main(String[] args) {
/* 수업목표. 인터페이스(interface)에 대해 이해할 수 있다. */
/* 필기.
* 인터페이스란?
* 자바의 클래스와 유사한 형태지만 상수필드(public static final)와
* 추상메소드(public abstract)만 가질 수 있는 클래스의 변형체이다.
* */
/* 설명. 인터페이스도 객체를 생성할 수 없다. */
// InterProduct ip1 = new InterProduct();
// Product p = new Product();
InterProduct p = new Product(); // 다형성 적용 가능
p.nonStaticMethod();
}
}
package com.ohgiraffers.section03.interfaceimplements;
import java.io.Serializable;
public class Product implements InterProduct, Serializable { // Serializable : 입출력 관련, 일종의 marker interface
@Override
public void nonStaticMethod() {
System.out.println("InterProduct의 nonStaticMethod 오버라이딩 메소드 호출됨...");
}
}
package com.ohgiraffers.section03.interfaceimplements;
public interface InterProduct extends ParentInterProduct, AnotherParentInterProduct{ // 인터페이스끼리 다중 상속 가능
// public static final int MAX_NUM = 100;
int MAX_NUM =100; // 상품 최대 100개만 저장 가능하고 이 값을 활용해라.
// private static final int MIN_NUM = 10; // 다르게 변형해서 쓸 수 없다.
/* 설명. 인터페이스는 생성자를 가질 수 없다. */
// public InterProduct() {}
/* 설명. 기본적으로 추상메소드만 가능하다. */
// private void nonStaticMethod(); // public abstract만 가능
// public abstract void nonStaticMethod(); // 앞부분 생략 가능
void nonStaticMethod();
// 자바 8버전 이후에 새 문법 생김(온전한 메소드도 쓰고 싶어!!) 암기보단 그냥 있구나~ 정도!
/* 설명. static 메소드는 바디부까지 작성을 허용했다.(JDK 1.8부터 추가된 기능) */
public static void staticMethod() {}
/* 설명. non-static 메소드라도 default 키워드를 추가하면 바디부까지 작성을 허용했다.(JDK 1.8부터) */
public default void defaultMethod() {}
/* 설명. private도 abstract가 아닌 온전한 메소드로 사용은 가능하다.(default도 없이) */
private void privateMethod() {
/* 설명. 다른 public default 메소드에서 활용할 수만 있는 기능 */
}
}
package com.ohgiraffers.section03.interfaceimplements;
public interface ParentInterProduct {
}
package com.ohgiraffers.section03.interfaceimplements;
public interface AnotherParentInterProduct {
}
2. 인터페이스를 사용하는 이유
💡 인터페이스는 공유를 목적으로 하는 상수(public static final 필드)를 기반으로 모든 기능을 공통화(public abstract 메소드)해서 강제성을 부여할 목적으로 만들어졌다.(공통된 인터페이스)
또한 자바의 단일 상속이라는 단점을 어느 정도 극복하기 위해 사용되기도 하며 모든 클래스는 하나의 부모 클래스 외에도 여러 개의 인터페이스를 구현할 수 있다.
3. 추상 클래스와 인터페이스의 공통점과 차이점
3-1. 추상 클래스와 인터페이스의 차이점
구분 | 추상 클래스 | 인터페이스 |
상속 가능 범위 | 단일 상속 | 다중 상속 |
키워드 | extends 사용 | implements 사용 |
추상 메소드 갯수 | abstract 메소드 0개 이상 | 모든 메소드는 abstract |
abstract 키워드 명시 | 명시적 사용 | 묵시적으로 abstract |
3-2. 추상 클래스와 인터페이스의 공통점
구분 | 추상 클래스 | 인터페이스 |
자체 인스턴스 생성 | 생성 불가 | 생성 불가 |
다형성 적용 시 상위 타입 활용 가능 유무 |
가능 | 가능 |
'한화시스템 > 백엔드' 카테고리의 다른 글
[BE] JAVA_API_String (1) | 2024.07.19 |
---|---|
[BE] JAVA_API_Object (0) | 2024.07.19 |
[BE] JAVA_추상 클래스 (0) | 2024.07.17 |
[BE] JAVA_다형성 (0) | 2024.07.17 |
[BE] JAVA_상속_오버라이딩 (0) | 2024.07.17 |