Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- Java #JDBC #Mybatis #동적SQL
- JavaScript #자바스크립트 #선택자 #HTML태그접근 #JS
- 어노테이션
- 데이터매핑
- Java
- 정리
- WEB
- 서블릿기초 #servlet #java #webprogramming
- springframework
- 복습
- JavaScript #예제 #복습 #Web #웹 #개발자가되고파ㅜㅜ
- Java #Web #공부 #복습 #Servlet #서블릿 #포워드 #sendRedirect #dispatcher
- 동적sql
- Spring
- List데이터조회
- JavaScript #자바스크립트 #복습 #배열 #Array
- JavaScript #선언적함수 #익명함수 #화살표함수 #함수선언방법 #복습
- mybatis
- Java #자바 #초보개발자 #다형성 #동적바인딩 #instanceof #학습 #요약정리 #복습
- JavaScript #인라인 #인터널 #익스터널 #데이터입출력
- fremework
- Java #자바 #인터페이스 #implements #다형성 #interface #복습 #정리 #나만의공부
- 데이터조회예제
- 특징및기본구조
- 데이터베이스 #DataBase #Oracle #DB #DataBase개요
- 프레임워크
- 예제
- 페이징처리예제
- mybatis자료형 #참고자료
- 스프링
Archives
- Today
- Total
개발군싹
[Java] 인터페이스(Interface) 본문

인터페이스(Interface)란?
인터페이스란 상수형(final) 필드와 추상메소드(abstract)만으로 구성되어있다.
추상클래스와 비슷하지만 인터페이스는 위 두가지만 인터페이스 구현분에 작성할 수 있다.
인터페이스를 상속받은 자식 클래스는 인터페이스에 정의된 모든 추상메소드를 구현해야한다.
[접근제한자] interface 인터페이스명 {
//인터페이스 내부에는 static final로 선언한 필드만 가질 수 있다.
public static final 자료형 변수명 = 초기값;
//추상메소드만 선언가능하다
//public abstract가 생략하여 작성할 수 있다.
//인터페이스를 implements 시 오버로딩하는 클래스는 해당 메소드에 public을 표기해야 한다.
[public abstract] 반환자료형 메소드명 ([자료형 매개변수]);
}
상속 방법 -> implements 인터페이스명1, 인터페이스명 2, ...
public class 클래스명 [extends 클래스명 ] implements 인터페이스명1, 인터페이스명2, 인터페이스명3 ... { 클래스 구현 }
특징
- 모든 인터페이스의 메소드는 public 이고 abstract이다. 이는 생략 가능하다.
- 변수는 public static final로 static 영역 final변수로만 선언 가능하며 인터페이스에 선언된 필드의 값을 변경 시도하면 컴파일 에러가 발생한다.
- 인터페이스는 추상클래스와 같이 객체 생성은 불가능하나 참조변수로 사용가능하다. (다형성 적용가능)
- 공통적인 기능구현을 해야하는 경우 인터페이스를 구현하여 상속한다. 이는 개발자가 클래스마다 인터페이스에 정의된 공통 기능을 구현해야하는데 있어서 구현하지 않을 시 컴파일 에러가 발생하기 때문에 서비스 제공 시 기능의 부재를 막아 줄 수 있다.
- 인터페이스를 통해 클래스간 연결이 더욱 유연해질 수 있다.
- 상속과 다르게 implements를 이용한 인터페이스 상속은 다중 상속이 가능하다.
인터페이스를 이용한 간단한 예제
프린터 기능을 가진 메소드를 구현하고 각 제조사별 프린터를 연결 시킬 수 있는 가벼운 예제를 작성해보자.
1. 프린트의 기본기능인 print(), scan(), copy()를 인터페이스 메소드로 작성하였다. 접근제한자와 예약어가 생략되어 있고 인터페이스 내부에 작성된 메소드이기 때문에 'public abstract'가 생략되어 있다.
public interface PrinterDriver {
void print(); //프린트기능
void scan(); //스캔기능
void copy(); //복사기능
}
이제 각 제조사별 프린터 클래스를 작성하고, 'PrintDriver' 인터페이스를 상속받아 이를 토대로 제조사별 다른 메소드 기능들을 오버라이딩하여 사용할 수 있다.
SamsungPrinter 클래스 구현
import com.inter.common.PrinterDriver;
public class SamsungPrinter implements PrinterDriver{
public SamsungPrinter() {
}
public void samPrint() {
System.out.println("삼성프린트 인쇄중...");
}
public void samScan() {
System.out.println("삼성프린트 스캔중...");
}
public void samCopy() {
System.out.println("삼성프린트 복사중...");
}
@Override
public void print() {
samPrint();
}
@Override
public void scan() {
samScan();
}
@Override
public void copy() {
samCopy();
}
}
LgPrinter 클래스 구현
import com.inter.common.PrinterDriver;
public class LgPrinter implements PrinterDriver{
public LgPrinter() {
}
public void printLg() {
System.out.println("인쇄중...LGLG");
}
public void scanLg() {
System.out.println("스캔중...LGLG");
}
public void copyLg() {
System.out.println("복사중...LGLG");
}
@Override
public void scan() {
scanLg();
}
@Override
public void copy() {
copyLg();
}
@Override
public void print() {
printLg();
}
}
Main
public class PrintMain {
public static void main(String[] args) {
PrinterController pc = new PrinterController(new SamsungPrinter());
Scanner sc = new Scanner(System.in);
System.out.println("====== 프린트이용 ======");
System.out.println("1. 인쇄하기");
System.out.println("2. 스캔하기");
System.out.println("3. 복사하기");
System.out.print("입력 > ");
int cho = sc.nextInt();
switch(cho) {
case 1: pc.print(); break;
case 2: pc.scan(); break;
case 3: pc.copy(); break;
}
}
}
PrinterController
public class PrinterController {
// private SamsungPrinter printer = new SamsungPrinter();
// private LgPrinter printer = new LgPrinter();
private PrinterDriver printer; //인터페이스는 참조변수로 선언 가능, 객체 생성 X
public PrinterController() {
}
//매개변수를 인터페이스 자료형으로 선언하여 PrinterDriver를 implements하고 있는 클래스 모두를 받을 수 있다.
//다형성을 이용하여 PrinterDriver를 상속 받은 클래스는 모두 Printer 기능을 이용할 수 있게 만든다.
public PrinterController(PrinterDriver driver) {
this.printer = driver;
}
public void print() {
printer.print();
}
public void scan() {
printer.scan();
}
public void copy() {
printer.copy();
}
}
출력결과

'Java' 카테고리의 다른 글
| [Java] 다형성(Polymorphism) (0) | 2023.09.21 |
|---|---|
| [Java] 상속(Inherit) (0) | 2023.09.17 |
| [Java] 객체 배열(Object Array) (0) | 2023.09.17 |
| [Java]객체(2) - 생성자(Contructor)와 this (0) | 2023.09.15 |
| [Java] 객체란(1)? (0) | 2023.09.15 |