[Java] 인터페이스 interface
Love IT! [Java] 인터페이스 interface 본문 CS/Java [Java] 인터페이스 interface 1in 2024. 5. 26. 14:25
swlin23.tistory.com
위의 게시물 처럼 메서드를 선언만 해둘 수도 있지만, 인터페이스 내에서 특별한 방법으로 메서드를 사용할 수 있다.
Default Method
만약, 인터페이스를 구현하는 여러 클래스 사이에서 특정 함수의 구현이 같다면
→ 그 함수를 default 메서드로 만들 수 있다.
interface Ex {
default void func(int num) {
return num;
}
}
이처럼 default 메서드 내에서는 인터페이스도 메서드 구현을 할 수가 있다.
마찬가지로 접근제어자는 무조건 public으로 자동 변환된다. (public만 가능)
그리고 이 인터페이스를 구현하는 클래스에서 이 함수를 override 할 수 있다.
그리고, 구현 클래스에서 이 함수를 직접 적지 않아도 오류가 발생하지 않는다.
Static Method
인터페이스 내의 추상 메서드와 디폴트 메서드는 객체(인스턴스)를 만들고나서만 메서드 이용이 가능했다.
static method는 따로 객체 없이 인터페이스만을 사용하여 해당 메서드를 사용할 수 있도록 만든다.
즉, 객체 클래스 구현 없이 바로 사용이 가능하다.
인터페이스 이름을 이용하여 해당 메서드에 접근할 수 있다.
interface Ex {
static void func1(int num) {
return num;
}
public static void func1(int num) {
return num;
}
// 다른 메서드와 달리 private 접근 제어자 가능
private static void func1(int num) {
return num;
}
}
Private Method
인터페이스 내에서 일반 추상 메서드, 디폴트 메서드, private를 붙이지 않은 정적 메서드, 필드는 모두 public이다.
public을 생략하더라도 컴파일 과정에서 자동으로 public이 된다.
private 메서드를 인터페이스 내에서 사용할 수 있다.
(추상 메서드, 디폴트 메서드는 private 키워드와 함께 사용할 수 없음)
private 메서드는 다음과 같이 두 가지로 나눌 수 있다.
- private method
- private static method
일반 private 메서드는 인터페이스를 구현한 객체가 필요하고, default method를 통해서만 해당 함수를 호출할 수 있다.
(private 키워드를 붙이면 해당 메서드는 해당 인터페이스 내부에서만 접근할 수 있기 때문에 default method를 통해 간접적으로 접근해야 한다.)
private static method는 인터페이스를 구현한 객체가 따로 필요하지 않고, default method 뿐만 아니라 static method에서 호출 가능하다.
static method 내에서는 static method만 호출 가능하다.
그렇다면 private method를 왜 사용할까?
default 메서드 또는 static 메서드 간의 코드 중복을 막기 위해 사용된다.
어떤 특정 코드가 여러 번 쓰인다면, 이를 private 메서드로 묶어서 사용할 수 있기 때문이다.
Private Method 예시
interface Ex {
// private static 메서드
private static void Common1() {
System.out.println("Common");
}
static void staticMethod1() {
System.out.println("hello1");
Common1();
}
static void staticMethod2() {
System.out.println("hello2");
Common1();
}
}
interface Ex {
// private 메서드
private void Common2() {
System.out.println("Common");
}
default void defaultMethod1() {
System.out.println("hello1");
Common2();
}
default void defaultMethod2() {
System.out.println("hello2");
Common2();
}
}
이 처럼 반복되는 구간을 묶어 사용하기에 적합하다.
'CS > Java' 카테고리의 다른 글
[Java] 라이브러리와 모듈 구현 과정 with 이클립스 (0) | 2024.05.28 |
---|---|
[Java] Nested Class 내부(중첩) 클래스, Nested Interface 내부(중첩) 인터페이스 (0) | 2024.05.26 |
[Java] interface 인터페이스 (0) | 2024.05.26 |
[Java] 상속 Inheritence - 4 (다운 캐스팅과 instanceof, abstract class 추상 클래스, sealed class) (0) | 2024.04.17 |
[Java] 상속 Inheritance - 3 (Type Conversion 형변환, Polymorphism 다형성) (0) | 2024.04.15 |