IT/Java

[JAVA 스터디][8주차] 인터페이스와 메서드

jaewon_sss 2021. 1. 9. 12:45
반응형

학습할 것

인터페이스 정의하는 방법

인터페이스 구현하는 방법

인터페이스 레퍼런스를 통해 구현체를 사용하는 방법

인터페이스 상속

인터페이스의 기본 메소드 (Default Method), 자바 8

인터페이스의 static 메소드, 자바 8

인터페이스의 private 메소드, 자바 9

인터페이스란?

정의 : 다른 클래스를 작성할시 기본 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할을 담당하는 추상클래스

. 추상메소드와 상수만 포함 가능 합니다.

JAVA에서 다중상속을 받을 수가 없습니다. 하지만, 인터페이스를 통해 다중 상속을 받을 수 있습니다.

인터페이스 정의하는 방법?

클래스 작성방법과 유사합니다. class대신 접근 제어자 interface를 사용합니다.

[public] interface 인터페이스명 {...}

1) 모든 변수는 public static final을 선언해야 합닌다.

2) 모든 메서드는 public abstract를 선언해야 합니다.

3) JAVA 8부터 default 메서드와 static 메서드 또한 멤버로 추가되었습니다.

Tip) 위의 제어자를 생략할 경우 컴파일시 자바컴파일러가 자동으로 추가해주므로, 에러는 발생하지 않습니다.

인터페이스 생성방법은 아래와 예제와 같습니다.

public interface ExampleInter { public static final int value_x = 10; public static final int value_y = 20; int value_z = 35; public abstract int add(int x, int y); int multi(int x, int y); }

인터페이스 구현하는 방법?

직접 인스턴스를 생성할수 없으며, 인터페이스를 포함하고 있는 추상 메서드를 구현할 클래스를 만들어야 합니다.

인터페이스에 포함된 추상 메서드를 모두 구현하지 않는다면, abstrat를 사용하여 추상클래스로 구현해야 합니다.

자바에서는 상속과 구현을 동시에 할수 있으며, 인터페이스를 다중 상속받을 수 있습니다.

public interface Animal { public final static int legs = 4; public abstract void cry(); }
public class Dog implements Animal { @Override public void cry() { System.out.println("멍멍"); } public void legCount() { System.out.println("나의 다리는 "+legs+"개 입니다."); } }
public class Cat implements Animal{ @Override public void cry() { System.out.println("야옹"); } public void legCount() { System.out.println("나의 다리는 "+legs+"개 입니다."); } }

인터페이스 레퍼런스를 통해 구현체를 사용하는 방법?

위의 코드와 같이 보시면 됩니다.~ !

인터페이스를 상속받아 구현한 클래스가 있습니다. dog 클래스와 cat 클래스 각각 구현한 내용이 다르므로 출력되는

값도 다르게 표출 됩니다.

public class example01 { public static void main(String[] args) { Cat cat = new Cat(); Dog dog = new Dog(); dog.cry(); //출력 : 멍멍 dog.legCount(); // 출력 : 나의 다리는 4개 입니다. cat.cry(); //출력 : 야옹 cat.legCount(); // 출력 : 나의 다리는 4개 입니다. System.out.println("인터페이스에서 선언한 dog legs "+dog.legs + "개"); //출력 : 인터페이스에서 선언한 dog legs 4개 System.out.println("인터페이스에서 선언한 cat legs "+cat.legs + "개"); //출력 : 인터페이스에서 선언한 dog legs 4개 } }

인터페이스 상속?

JAVA는 다중상속이 불가하지만, 인터페이스는 다중상속이 가능합니다.

방법1)

2개의 인터페이스를 하나의 클래스에서 상속받아 구현할수 있습니다.

public interface Animal{ public abstract void cry(); }
public interface Wings { public abstract void fly(); }
public class Dog implements Animal,Wings { @Override public void cry() { System.out.println("멍멍~"); } @Override public void fly() { System.out.println("X"); } }

방법2)

인터페이스에서 나머지 하나의 인터페이스를 상속받아 클래스에서 2개의 인터페이스를 구현할 수 있습니다.

public interface Animal extends Wings{ public abstract void cry(); }
public interface Wings { public abstract void fly(); }
public class Cat implements Animal{ @Override public void cry() { System.out.println("야옹"); } @Override public void fly() { System.out.println("X"); } }

방법3)

인터페이스는 다중 상속을 받을수 있습니다.

public interface Animal extends Wings,Tail{ public abstract void cry(); }
public interface Tail { public abstract void haveTail(); }
public interface Wings { public abstract void fly(); }
public class Cat implements Animal{ @Override public void cry() { System.out.println("야옹"); } @Override public void fly() { System.out.println("X"); } @Override public void haveTail() { System.out.println("살랑"); } }

인터페이스의 기본 메소드 (Default Method), 자바 8?

JAVA8 부터 인터페이스에 Default Method가 추가되었습니다.

인터페이스는 Method 정의만 할수 있고 구현은 할수 없었지만, Default Method 개념이 추가되면서 구현내용도

포함할 수 있게 되었습니다.

Default 메서드 기본구현을 가지는 메서드 앞에 default 예약어를 붙이며, 몸통 {}이 있어야 합니다.

접근제어자가 public이며 생략 가능합니다.

1) Interfae Defulat Method

인터페이스 내부에 Method 구현

public interface DefaultInterface { public default void beHavior() { System.out.println("Default Method 실행"); } }

2) 재정의(Override) 가능

public interface SuperInterface extends DefaultInterface{ @Override default void beHavior() { System.out.println("ㅇ"); } }

3) 레퍼런스로 함수 호출

위의 코드가 선언되어있다고 가정하여 보시면 됩니다.

public class DefulatObject implements DefaultInterface{}
public class SuperObject implements SuperInterface{}
public class Example{ public static void main(String[] args) { SuperObject sObject = new SuperObject(); DefulatObject dObject = new DefulatObject(); dObject.beHavior(); //출력 : ㅇ sObject.beHavior(); //출력 : Default Method 실행 } }

인터페이스의 static 메소드, 자바 8?

Defualt Method와 마찬가지로 JAVA8에서 Static Method도 추가 되었습니다.

interface에서 Method구현이 가능하며, 반드시 클래스명으로 메소드를 호출해야 합니다.

재정의(Override)은 불가능 합니다.

1) static Method 구현

public interface StaticInterface { public static void beHavior() { System.out.println("Static Method 실행"); } }

2) 클래스명으로 Method 호출

public StaticObject implements StaticInterface {}
public class Example{ public static void main(String[] args) { StaticObject.beHavior(); //출력 : Static Method 실행 } }

인터페이스의 private 메소드, 자바 9?

Java9부터는 private Method가 추가 되었습니다.

private Method를 default Method에서 호출하여 사용할 수 있습니다.

private Method에 static 키워드를 사용할 경우, static Method에서 호출이 가능합니다.

public interface Animal{ public default void cry() { animalCrying(); } public static void jump() { animalJumping(); } private void animalCrying(){ System.out.println("동물이 소리를 내어 웁니다."); } private static void animalJumping(){ System.out.println("동물이 점프합니다."); } }
public class Dog implements Animal{}
public class Example{ public static void main(String[] args) { Dog dog = new Dog(); dog.cry(); // 출력 : 동물이 소리를 내어 웁니다. Dog.jump(); // 출력 : 동물이 점프합니다. } }

 

반응형