```java
interface Contract {
public String method1(String param);
public int method2(int param);
}
```
인터페이스에는 메소드의 signature는 적지만 내용은 적지 않음
```java
class Concreate1 implements Contract {
}
```
- `Concreate1` 클래스는 `Contract` 인터페이스에 적혀 있는 메소드들의 형식을 구현했다, 또는 구현해야 한다는 뜻
- 이 상태로 컴파일을 하게 되면 `Concreate1`은 컴파일조차 되지 않음
-- 이유 : 규칙을 어김 (`Contract`에 적혀 있는 메소드들을 정의해야 한다는 규칙)
```java
class Concreate1 implements Contract {
public String method1(String param) {
return "foo";
}
public int method2(int param) {
return 1;
}
}
class Concreate2 implements Contract {
public String method1(String param) {
return "bar";
}
public int method2(int param) {
return 2;
}
}
```
인터페이스 : 프로그래머들 사이에서의 일종의 계약
패키지
- `Foo`라는 클래스를 가지고 있는데 어떤 이유로 다른 기능을 가지고 있지만 이름은 같은 `Foo`라는 또 다른 클래스가 존재할 수도 있음
- 같은 이름의 클래스가 존재하기 위해서는 그것을 서로 다른 패키지에 담아야 함
-- 예)