본문 바로가기
TechNical/JAVA

interface는 뭐하는 놈일까?

by 강멍멍이 2011. 4. 14.
반응형
어쩌다가 interface까지 왔다..
자바에서는 다중상속을 금지 한다.
두놈한테서 상속을 받는데 그 중에 한 놈이 똑같은 메소드 이름을 오버라이딩 해서 쓸 경우
어떤놈을 상속받아서 구현해야 하는지 골치 아프기 때문에 아예 막아 버렸다고 한다.

하지만 인터페이스는 다중 상속이 가능하다.
.... 왜냐 인터페이스에서는 선언만 해 두지 로직을 구현하지 않기 때문이다.

인터페이스 선언 구문

interface MyInter {
final static byte TEST_VAL = 1;
void testMeth(String birth, String phone);
void test2();
}
 

구현할때
class TestInter implements MyInter {
String name;
String addr;
String birth;
String phone;
byte val;

TestInter(String name, String addr) {
this.name = name;
this.addr = addr;
}

public void testMeth(String birth, String phone){
this.birth = birth;
this.addr = phone;
}

public void test2(){
if( TEST_VAL == 1 ) {
System.out.println("test!!");
            }
}
}

써먹을때
public class Test {
 public static void main(String[] args) {
  TestInter ti = new TestInter("Kei","Andromeda");
  
  ti.testMeth("1912", "0191234567");
  ti.test2();
  
  printTest(ti);  
 }
 
 static void printTest(TestInter ti2){
  System.out.printf("%s %s %s %s", ti2.name, ti2.addr, ti2.birth, ti2.phone);
 }
}


인터페이스에 선언된 것들은 abstract로 선언되어 지기 때문에 implement 할 경우 무조건 기술해 줘야 한다.
인터페이스 만들때 메소드 앞에다가 굳이 abstract 라고 쓰지 않아도 컴파일 단계에서 친절하게도 자동으로 붙여 준단다.
그리고 데이터 필드는 선언 할 수 없지만 상수값을 지정할 수는 있다.
final static 을 붙여서 말이지..

.. 근데 여전히 이해가 잘 되지 않는다.
로직도 없는 놈을 상속해서 어따 쓸려구...ㅡ.ㅡ
그냥 일일이 선언하기 귀찮으니까 인터페이스로 공통된 기능을 뽑아서 만든 것인가??

도데체.. 왜 인터페이스를 쓰는 것인가...??!! 바보같은 물음인가....
시원하게 왜 쓰는지 알고 싶다.... 아 덴장 -_-;; 멀고도 험난한 길이군 ~
반응형

댓글