1. 1. 상수
- 모든 변수는 상수로 변환 됨 public static final
<java />
double PI = 3.14;
int ERROR = -999999999;
2.
3. 2. 추상 메서드
- 모든 선언된 메서드는 추상 메서드 (자동으로 public abstract가 붙는다)
4. 3. 디폴트 메서드 (자바 8이후)
- 구현을 가지는 메서드, 인터페이스를 구현하는 클래스들에서 공통으로 사용할 수 있는 기본 메서드
- default 키워드 사용
<code />
default void description() {
System.out.println("정수 계산기를 구현합니다.");
myMethod();
}
- 구현(implementation) 하는 클래스에서 재정의 할 수 있음
<code />
@Override
public void description() {
System.out.println("CompleteCalc에서 재정의한 default 메서드");
//super.description();
}
- 인터페이스를 구현한 클래스의 인스턴스가 생성 되어야 사용 가능함
5.
6. 4. 정적 메서드 (자바 8이후)
- 인스턴스 생성과 상관 없이, 인터페이스 타입으로 사용할 수 있는 메서드
<code />
static int total(int[] arr) {
int total = 0;
for(int i: arr) {
total += i;
}
mystaticMethod();
return total;
}
7.
8. 5. private 메서드 (자바 9이후)
- 인터페이스를 구현한 클래스에서 사용하거나 재정의 할 수 없음
- 인터페이스 내부에서만 사용하기 위해 구현하는 메서드
- default 메서드나 static 메서드에서 사용함
<code />
private void myMethod() {
System.out.println("private method");
}
private static void mystaticMethod() {
System.out.println("private static method");
}
9. 6. 실습해보자!
Calc.java
<java />
package ch14;
public interface Calc {
double PI=3.14;
int ERROR=-999999999;
int add(int num1,int num2);
int substract(int num1,int num2);
int times(int num1,int num2);
int divide(int num1,int num2);
default void description() { //디폴트 메서드
System.out.println("정수의 사칙연산을 제공합니다.");
myMethod(); //아래 선언한 default 메소드 불러오기 가능
}
static int total(int[] arr) { //정적 메서드
int total=0;
for (int num:arr) {
total+=num;
}
myStaticMethod(); //아래 선언한 static 메소드 불러오기 가능
return total;
}
private void myMethod() {
System.out.println("My method");
}
private static void myStaticMethod() {
System.out.println("myStaticMethod");
}
}
CompleteCalc.java
<java />
package ch14;
public class CompleteCalc extends Calculator { //Calculator를 상속받고, Calc 인터페이스의 타입이다.
@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("모두 구현했습니다.");
}
@Override
public void description() {
// super.description(); //인터페이스에서 default로 선언되었기 때문에, super로 사용 가능
// 하지만 우리는 재정의 해보자
System.out.println("CompleteCalc overriding");
}
}
Calculator.java
<java />
package ch14;
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;
}
}
CalculatorTest.java
<java />
package ch14;
public class CalculatorTest {
public static void main(String[] args) {
int num1=10;
int num2=2;
// Calc calc = new CompleteCalc(); //Calc 인터페이스 타입을 가진 CompleteCalc의 인스턴스
// //타입이 Calc이기 때문에 clac 객체는 Calc 안의 변수만 사용 가능
CompleteCalc 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.description(); //인터페이스를 구현한 클래스의 인스턴스로 사용가능(defalut 메소드)
int[] arr = {1,2,3,4,5};
System.out.println(Calc.total(arr)); //객체 생성 없이, 인터페이스 이름으로 바로 호출(static 메소드)
}
}

'JAVA' 카테고리의 다른 글
4-1.Object 클래스 (0) | 2022.01.26 |
---|---|
3-15.객체 지향 핵심 - 여러 인터페이스 구현하기, 인터페이스의 상속 (0) | 2022.01.24 |
3-13.객체 지향 핵심 - 인터페이스를 활용한 다형성 구현 (0) | 2022.01.23 |
3-12.객체 지향 핵심 - 인터페이스는 왜 쓰는가? (0) | 2022.01.23 |
3-11.객체 지향 핵심 - 인터페이스(interface) (0) | 2022.01.23 |