본문 바로가기

Java/기본

[Java] 인터페이스 안에 필드, 메서드, 클래스 선언하기

Interface 안에 무엇을 선언할 수 있는지 확인해본다.

참고로 JDK 11 버전으로 작성한 코드이다.

 

인터페이스 안에는 아래 내용을 선언할 수 있다. 

  • 변수
  • 메서드
  • enum
  • class

 


1. 변수

인터페이스에 선언된 변수는 static 키워드, public 접근제어자에 관계없이 static final로 역할한다

 

1) 변수

    //변수 선언
    public int int1 = 0;
    int int2 = 1;

 

 

2) static 변수

    //static 변수
    public static String str1 = "test";
    static String str2 = "test";

 

 

3) final 변수(상수)

    //final 변수 선언
    final String final1 = "test";
    static final String final2 = "test";
    public static final String final3 = "test";

 

 

2. 메서드

 

1) 메서드

public 접근제어자 선언여부에 관계없이 body가 없으면 public abstract 메서드로 간주된다

//매개값 없음
void act01();

public void act02();

//매개값 있음
void act11(int i);

public void act12(int i);

 

2) static 

인터페이스 안에 선언된 static 메서드는 body, 즉 { } 부분이 있어야 한다

public 접근제어자 선언여부에 관계없이 public static 메서드로 간주된다.

    static void act03() { }

    static public void act04() { }
    
    static void act13(int i) { }

    static public void act14(int i) { }

 

 

3. enum

enum COFFEE{ AMERICANO, LATTE, CAPPUCCINO }
public enum PET{ PUPPY, KITTY, LAMB }

 

 

4. 클래스

중첩클래스는 클래스 및 인터페이스 내부에 static 으로 선언된 클래스를 의미한다.

다만, 인터페이스 내부의 클래스는 static 키워드가 없어도 static이 붙은 것과 동일한 효과가 있다.

즉 static 키워드가 없더라도 내부클래스가 아닌 중첩클래스로 보는 것이 맞다.

 

아래에서는 static 코드의 유무에 따른 컴파일러 예외를 확인하려는 코드이므로 일부러 나누어 적는다

 

1) 내부 클래스

class Inner {
	private int score;
	public Inner(int num) {
		this.score = num;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}
}

 

 

2) 중첩 클래스

static class Nested {
	private int grade;
	public Nested(int num) {
		this.grade = num;
	}

	public int getGrade() {
		return grade;
	}

	public void setGrade(int grade) {
		this.grade = grade;
	}
}

 

 

 


전체코드

public interface Test {

    //변수 선언
    public int int1 = 0;
    int int2 = 1;

    //static 변수
    public static String str1 = "test";
    static String str2 = "test";

    //final 변수 선언
    final String final1 = "test";
    static final String final2 = "test";
    public static final String final3 = "test";

    //메서드
    void act01();

    public void act02();

    static void act03() {
    }

    static public void act04() {
    }

    //매개값 있는 메서드
    void act11(int i);

    public void act12(int i);

    static void act13(int i) {
    }

    static public void act14(int i) {
    }

    //enum
    enum COFFEE{ AMERICANO, LATTE, CAPPUCCINO }
    public enum PET{ PUPPY, KITTY, LAMB }

    //내부 클래스
    class Inner {
        private int score;
        public Inner(int num) {
            this.score = num;
        }

        public int getScore() {
            return score;
        }

        public void setScore(int score) {
            this.score = score;
        }
    }

    //중첩 클래스
    static class Nested {
        private int grade;
        public Nested(int num) {
            this.grade = num;
        }

        public int getGrade() {
            return grade;
        }

        public void setGrade(int grade) {
            this.grade = grade;
        }
    }
}