728x90
abstract method
[public abstract] 리턴타입 메소드명(매개변수, ...);
- 추상 메소드는 리턴 타입, 메소드명, 매개변수만 기술되고 중괄호를 붙이지 않는 메소드이다.
- public abstract를 생략하더라도 컴파일 과정에서 자동으로 붙는다.
- 내부의 모든 메서드는 추상 메소드로 정의한다.
- 구현 클래스에서 추상 메소드 재정의 시 public보다 더 낮은 접근 제한으로 재정의할 수 없다.
default method
[public] default 리턴타입 메소드명(매개변수, ...) {...}
- default 메소드를 추가하면 구현 클래스에서 필수로 메소드를 재정의 하지 않아도 된다.
- 추상 메소드는 실행부(중괄호 {})가 없지만, 디폴트 메소드는 실행부가 있다.
- 실행부에서는 상수 필드를 읽거나, 추상 메소드를 호출하는 코드를 작성할 수 있다.
- 재정의시 public 접근 제한자를 붙이고, default 키워드를 생략한다.
- 인터페이스 구현 후, 수정 과정에서 인터페이스 모든 구현체에게 수정 없이 광역으로 함수를 만들어주고 싶을 때 사용한다.
static method
[public | private] static 리턴타입 메소드명(매개변수, ...) {...}
- 정적 메소드는 구현 객체가 없어도 인터페이스만으로 호출 가능하다.
- 정적 메소드의 실행부를 작성할 때 상수 필드를 제외한 구현 객체가 필요한 인스턴스 메소드인 추상 메소드, 디폴트 메소드, private 메소드 등을 호출할 수 없다.
private method
구분 | 설명 |
private method | 구현 객체가 필요한 메소드 |
private static method | 구현 객체가 필요 없는 메소드 |
- 로직을 공통화하고 재사용하기 위해 자바9 버전에서 추가된 메소드이다.
- 인터페이스 내부에서만 돌아가는 코드로 구현한 클래스에서 사용하거나 재정의할 수 없다.
- private 메소드는 default 메소드 안에서만 호출이 가능하며, private static 메소드는 staitc 메소드 안에서도 호출이 가능하다.
- private 메소드는 디폴트와 정적 메소드들의 중복 코드를 줄여준다.
예제 코드
더보기
package ch08.sec07;
public interface Service {
// 디폴트 메소드
default void defaultMethod1() {
System.out.println("Service.defaultMethod1");
defaultCommon();
}
default void defaultMethod2() {
System.out.println("Service.defaultMethod2");
defaultCommon();
}
// private 메소드
private void defaultCommon() {
System.out.println("defaultMethod 중복 A");
System.out.println("defaultMethod 중복 B");
}
// 정적 메소드
static void staticMethod01() {
System.out.println("Service.staticMethod01");
staticCommon();
}
static void staticMethod02() {
System.out.println("Service.staticMethod02");
staticCommon();
}
// private 메소드
private static void staticCommon() {
System.out.println("staticMethod 중복 C");
System.out.println("staticMethod 중복 D");
}
}
package ch08.sec07;
public class ServiceExample {
public static void main(String[] args) {
// 인터페이스 변수 선언과 구현 객체 대입
Service service = new ServiceImpl();
// 디폴트 메소드
service.defaultMethod1();
System.out.println();
service.defaultMethod2();
System.out.println();
// 정적 메소드
Service.staticMethod01();
System.out.println();
Service.staticMethod02();
}
}
package ch08.sec07;
public class ServiceImpl implements Service {
}
728x90
'IT > Java' 카테고리의 다른 글
[Java] 중첩 클래스(Nested Class) (0) | 2024.03.12 |
---|---|
[Java] 타입 변환 (0) | 2024.03.12 |
[Java] Interface 상수 필드 (0) | 2024.03.12 |
[Java] Interface (0) | 2024.03.11 |
[Java] abstract class & method (0) | 2024.03.08 |