Java

[JAVA] 인터페이스(interface)

2023. 2. 3. 17:55
목차
  1. 인터페이스
  2. < 인터페이스를 쓰는 이유 >
  3. < 예제 >

인터페이스

  • 모든 메서드가 추상 메서드로 선언됨 ( public abstract )
  • 모든 변수는 상수로 선언됨 ( public static final )
  • 추상 클래스와 마찬가지로 직접 인스턴스 생성 불가
  • 추상클래스와 달리 일반 메서드, 생성자를 가질 수 없음
  • 필드도 static final(생략 가능)을 붙인 상수화한 필드만 사용할 수 있으며 반드시 초기화해야 함 

< 인터페이스를 쓰는 이유 >

  • 프로그램이 제공하는 기능을 명시적으로 선언
  • 일종의 클라이언트 코드와의 약속, 클래스나 프로그램이 제공하는 명세(specification) 이다.
  • 클라이언트 프로그램은 인터페이스에 선언된 메서드만 보고 이를 구현한 클래스를사용할 수 있음

< 예제 >

1. interface Calc

  • 상수 PI, ERROR은 static final이 생략되어있음.
public interface Calc {
//상수 (static final이 생략되어있음)
	double PI = 3.14;
	int ERROR = -99999999;	
//추상 메서드	
	int add(int num1,int num2);
	int substract(int num1,int num2);
	int times(int num1,int num2);
	int divide(int num1,int num2);
}

2. class Calculator implements Calc

  • add(), substract()만 구현되어 있음
public abstract class Calculator implements Calc {
	@Override
	public int add(int num1, int num2) {
		return num1 + num2;
	}
	@Override
	public int substract(int num1, int num2) {
		return num1 - num2;
	}

}

3. class CompleteCalc extends Calculator

  • times(), divide()까지 구현되어 있는 클래스
  • 추가로 showInfo() 메서드 구현
public class CompleteCalc extends Calculator{
	@Override
	public int times(int num1, int num2) {
		return num1*num2;
	}
	@Override
	public int divide(int num1, int num2) {
		if(num2==0) {
			return ERROR;
		}
		return num1/num2;
	}
	public void showInfo() {
		System.out.println("모두 구현했습니다.");
	}
}

4. test code

  • calc 객체는 Calc형 이기 때문에 CompleteCalc클래스의 메서드 showInfo()는 사용할 수 없다.
  • showInfo()를 사용하려면 CompleteCalc형 객체로 생성해야 한다.
public class Test {

	public static void main(String[] args) {

		int num1 = 10;
		int num2 = 2;
		Calc calc = new CompleteCalc();
		System.out.println(calc.add(num1, num2));
		System.out.println(calc.substract(num1, num2));
		System.out.println(calc.times(num1, num2));
		System.out.println(calc.divide(num1, num2));
//		calc.showInfo(); //오류
		
		CompleteCalc compCalc = new CompleteCalc();
		compCalc.showInfo();
		
	}

}

 

반응형

'Java' 카테고리의 다른 글

[JAVA] 생성자 / 오버로딩(overloading)  (0) 2023.05.17
[Java] StringTokenizer  (0) 2023.05.04
[Java] Optional<T> 클래스  (0) 2023.05.03
[Java] String 클래스, 관련 메소드  (0) 2023.04.20
[JAVA] Object 클래스_toString() 메서드  (0) 2023.02.05
  1. 인터페이스
  2. < 인터페이스를 쓰는 이유 >
  3. < 예제 >
'Java' 카테고리의 다른 글
  • [Java] StringTokenizer
  • [Java] Optional<T> 클래스
  • [Java] String 클래스, 관련 메소드
  • [JAVA] Object 클래스_toString() 메서드
HSRyuuu
HSRyuuu
Web Backend Developer happyhsryu
HSRyuuu
HS_dev_log
HSRyuuu
전체
오늘
어제
  • 전체 글 보기 (233)
    • Java (25)
    • Spring (26)
    • JPA & QueryDSL (13)
    • Database (17)
    • 자료구조 & 알고리즘 (30)
    • DevOps (10)
    • [ Computer Science ] (47)
      • Web & Network (14)
      • 프로그래밍 이론 (11)
      • 운영체제 (3)
      • 데이터베이스 이론 (5)
      • Linux 리눅스 (7)
    • [ Frontend ] (17)
      • Vue.js & Nuxt.js (9)
      • JSP_Thymeleaf (7)
    • [ 기타 ] (48)
      • 오픈소스 라이브러리 (5)
      • 코딩테스트 (13)
      • Trouble Shooting (7)
      • Tech Interview (6)
      • Book Review (9)
      • 끄적끄적... (6)
      • 개인 프로젝트 (2)

블로그 메뉴

  • 홈
  • 태그
  • github

공지사항

  • GitHub
  • 공부한 내용을 정리하고 기록하는 블로그 입니다.

인기 글

태그

  • Linux
  • TechInterview
  • Redis
  • Java
  • 제로베이스
  • HTTP
  • 백준
  • web
  • 트랜잭션
  • vue3
  • Database
  • Redisson
  • 개발자
  • 백엔드기술면접
  • Nuxt3
  • 기술면접
  • 클린코드
  • 백엔드
  • 백엔드공부
  • SpringBoot
  • SQL
  • Spring
  • MySQL
  • 리눅스
  • springsecurity
  • JPA
  • 백엔드스쿨
  • mybatis
  • 자료구조
  • cleancode

최근 댓글

최근 글

hELLO · Designed By 정상우.
HSRyuuu
[JAVA] 인터페이스(interface)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.