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;
}
}
}
'Java > 기본' 카테고리의 다른 글
[Java] 네트워킹 - UDP (0) | 2021.07.31 |
---|---|
[Java] 네트워킹 - TCP (0) | 2021.07.31 |
[Java] 네트워킹 - InetAddress (update.2021-11-11) (0) | 2021.07.30 |
[Java] IO스트림 사용하기 - 객체 직렬화(Serialize) (0) | 2021.07.25 |
[Java] IO스트림 사용하기 - 스트림 연결하기(Stream chaining) (0) | 2021.07.25 |