無常 : 만물이 끊임없이 변해 한 순간도 동일한 상태로 머물러 있지 않음
이처럼 개발환경도, 소프트웨어도, 고객의 요청도 계속 변한다. 이에 프로그램 설계의 유연성을 위해 등장한 것이 인터페이스이다.
Interface : 접점, 규약, 약속
- 클래스의 상속(extends): 하위 분류 A는 상위 분류B의 한 종류이다(→A is a kind of B)
- 인터페이스의 상속(implements): 구현 클래스A는 인터페이스B 할 수 있어야 한다(→A is able to B)
- 인터페이스에 선언하는 매서드는 자동으로 public abstract가 붙는다.
- 인터페이스에 선언하는 필드는 자동으로 public final static가 붙는다.
의존성 주입(Dependency Injection) : 클래스 내부에서 결정하지 않고, 외부에서 상속받은 다양한 객체를 전달할 수 있으므로 프로그램 설계의 유연성을 가져올 수 있다.
public interface APersonalNumberStorage {
void addPersonalInfo(String name, String perNum);
String searchName(String perNum);
}
public class PersonalNumInfo {
private String name, number;
public PersonalNumInfo(String name, String number) {
this.name = name;
this.number = number;
}
String getName() {
return name;
}
String getNumber() {
return number;
}
}
public class PersonalNumberStorageImpl implements APersonalNumberStorage {
PersonalNumInfo[] perArr;
int numOfPerInfo;
PersonalNumberStorageImpl(int sz) {
perArr = new PersonalNumInfo[sz];
numOfPerInfo = 0;
}
@Override
public void addPersonalInfo(String name, String perNum) {
perArr[numOfPerInfo] = new PersonalNumInfo(name, perNum);
numOfPerInfo++;
}
@Override
public String searchName(String perNum) {
for(int i=0;i<numOfPerInfo;i++) {
if(perNum.compareTo(perArr[i].getNumber())==0)
return perArr[i].getName();
}
return null;
}
}
public class PersonaMain {
public static void main(String[] args) {
PersonalNumberStorageImpl storage = new PersonalNumberStorageImpl(100);
// 부모객체에 storage를 담을 수도 있음
APersonalNumberStorage sto = storage;
storage.addPersonalInfo("루피", "1234-5678");
storage.addPersonalInfo("나미", "8765-4321");
System.out.println(storage.searchName("1234-5678"));
System.out.println(storage.searchName("8765-4321"));
}
}
'Programming > Java * Spring' 카테고리의 다른 글
[Java] 12. Math Class - BigDecimal, BigInteger, MathContext (0) | 2019.04.01 |
---|---|
[Java] 11. 예외처리(Exception) 상속구조, finally, throws (0) | 2019.03.29 |
[Java] 09. 추상클래스(abstract) (0) | 2019.03.27 |
[Java] 08. 매서드 오버라이딩(Method Overriding), 오버로딩과의 차이 (0) | 2019.03.26 |
[Java] 07. Is Kind Of 관계, Has A 관계 (0) | 2019.03.26 |