Burninghering's Blog
article thumbnail

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 메소드) } }

 

결과

 

profile

Burninghering's Blog

@개발자 김혜린

안녕하세요! 반갑습니다.