1. 인터페이스란 ?
상수형 필드와 추상 메소드만을 작성할 수 있는 추상 클래스의 변형체
- 추상 클래스 처럼 객체 생성 X
- 부모 타입 참조 변수로 사용 O
→ 다형성 업캐스팅 + 동적 바인딩
2. 인터페이스의 효과
1) 클래스 간의 접점을 만들 수 있다.
2) 극한의 추상화를 통해서 유연한 코딩이 가능
3. 인터 페이스의 기본 작성법
필드 → 무조건 public static final(공유 가능 상수)
메서드 → 무조건 public abstract
(누구든지 상속 받아서 오버라이딩 가능)
#예제 <calculator 구현해보기>
[Calculator]
public interface Calculator {
public static final double PI = 3.14;
// public static final을 생략해도
// 인터페이스에 작성된 필드는
// 자동으로 public static final로 인식된다!!
int MAX_NUM = 100_000_000;
int MIN_NUM = -100_000_000;
// 메서드는 무조건 public abstract
/**
* 두 수의 합을 반환
* 단, 결과는 최대, 최소값을 넘을 수 없음
* @param a
* @param b
* @return a + b
*/
public abstract int plus(int a, int b);
/**
* 두 수의 차를 반환
* 단, 결과는 최대, 최소값을 넘을 수 없음
* @param a
* @param b
* @return a - b
*/
public abstract int minus(int a, int b);
/**
* 두 수의 곱을 반환
* 단, 결과는 최대, 최소값을 넘을 수 없음
* @param a
* @param b
* @return a * b
*/
public abstract int multi(int a, int b);
/**
* 두 수를 나눈 몫을 반환
* 단, 결과는 최대, 최소값을 넘을 수 없음
* @param a
* @param b
* @return a / b
*/
public abstract int div(int a, int b);
/**
* 두 수를 나눈 나머지를 반환
* 단, 결과는 최대, 최소값을 넘을 수 없음
* @param a
* @param b
* @return a % b
*/
public abstract int mod(int a, int b);
/**
* a를 x만큼 거듭 제곱한 결과 반환
* 단, 결과는 최대, 최소값을 넘을 수 없음
* @param a
* @param x
* @return a^x
*/
int pow(int a, int x);
/**
* 원의 넓이를 반환
*
* @param r
* @return 원의 넓이
*/
double areaOfCircle(double r);
/**
* 전달 받은 점수를 2진수 String으로 변환하여 반환
*
* @param num
* @return 2진수
*/
String toBinary(int num);
/**
* 전달 받은 점수를 2진수 String으로 변환하여 반환
*
* @param num
* @return 16진수
*/
String toHexadecimal(int num);
}
[상속 calculator]
package pkg3.dto;
// 인터페이스 상속 키워드 : implements (구현하다)
public class JHJCalculator implements Calculator{
@Override
public int plus(int a, int b) {
int result = a + b;
if (result > MAX_NUM) return MAX_NUM;
if (result < MIN_NUM) return MIN_NUM;
return result;
}
@Override
public int minus(int a, int b) {
int result = a - b;
if (result > MAX_NUM) return MAX_NUM;
if (result < MIN_NUM) return MIN_NUM;
return result;
}
@Override
public int multi(int a, int b) {
int result = a * b;
if (result > MAX_NUM) return MAX_NUM;
if (result < MIN_NUM) return MIN_NUM;
return result;
}
@Override
public int div(int a, int b) {
int result = a / b;
if (result > MAX_NUM) return MAX_NUM;
if (result < MIN_NUM) return MIN_NUM;
return result;
}
@Override
public int mod(int a, int b) {
int result = a % b;
if (result > MAX_NUM) return MAX_NUM;
if (result < MIN_NUM) return MIN_NUM;
return result;
}
@Override
public int pow(int a, int x) {
int result = (int) Math.pow(a, x);
if (result > MAX_NUM) return MAX_NUM;
if (result < MIN_NUM) return MIN_NUM;
return result;
}
@Override
public double areaOfCircle(double r) {
double result = PI * r * r;
if (result > MAX_NUM) return MAX_NUM;
if (result < MIN_NUM) return MIN_NUM;
return result;
}
@Override
public String toBinary(int num) {
if (num > MAX_NUM) Integer.toBinaryString(MAX_NUM);
if (num < MIN_NUM) Integer.toBinaryString(MIN_NUM);
return Integer.toBinaryString(num);
}
@Override
public String toHexadecimal(int num) {
if (num > MAX_NUM) Integer.toHexString(MAX_NUM);
if (num < MIN_NUM) Integer.toHexString(MIN_NUM);
return Integer.toHexString(num);
}
}
[Run]
package pkg3.run;
import pkg3.dto.Calculator;
import pkg3.dto.JHJCalculator;
public class CalculatorRun {
public static void main(String[] args) {
Calculator c = new JHJCalculator();
System.out.println( c.plus(90000000, 30000000) );
System.out.println( c.minus(1, 30) );
System.out.println( c.multi(7000, 123) );
System.out.println( c.div(55555, 444) );
System.out.println( c.mod(1234, 56) );
System.out.println( c.pow(2, 16) );
System.out.println( c.areaOfCircle(5.7) );
System.out.println( c.toBinary(100) );
System.out.println( c.toHexadecimal(100) );
}
}
#결과

'BackEnd > Java' 카테고리의 다른 글
| [Java]컬렉션(collection) Wrapper (0) | 2024.08.12 |
|---|---|
| [Java]컬렉션 (0) | 2024.08.12 |
| [Java]다형성 추상클래스 (0) | 2024.07.31 |
| [Java]객체 배열(Object_Array) (0) | 2024.07.31 |
| [Java]다형성 객체 타입에 따른 업/다운 캐스팅 (0) | 2024.07.31 |