2014년 2월 7일 금요일

20140207 인터페이스(Interface) 와 다형성

 : 인터페이스(Interface)



1.추상 클래스(Abstract Class)
  추상 클래스는 생성시 추상을 선택하거나 일반 클래스를 만든 후 추상을 추가하는 두가지 방법으로 가능하다.
추상 클래스는 종류별 변수와 추상 메소드, 일반 메소드 모두를 가질 수 있다.

Ex) public abstract class Excuse{}의 식이다 // 추상 클래스
  ->접근자 반환타입 메소드명(매개변수)
- 이클립스는 abstract가 없이 추상 메소드를 사용하면 에러를 발생 시킨다.

Ex) public abstract void move(); // 추상 메소드 - 내용은 없고 선언 된 메소드를 의미한다.

추상 클래스에서 주의해야 하는 점은(가장 중요)다음이다.
 추상 클래스를 상속받은 서브 클래스는 반드시 추상 클래스의 메소드를 재정의(Overriding-내용의 변경)하여 사용해야 한다.

추상 클래스의 의의 : 추상 클래스는 추상 클래스를 상속받는 모든 사용자에게 동일한 메소드 명을 사용할 것을
                     강제로 한다.(이부분이 가장 중요한거 같다.)


2. 인터페이스(Interface)
  추상 클래스가 모든 종류의 변수와 추상/일반 메소드를 갖는데에 비해 인터페이스는 오직 '상수'와 '추상 메소드'만을
가질 수 있다.

Ex) final static MAX = 5; // 등의 상수
    void shiftUp();  // 등의 추상 메소드
위의 예에서 추상 메소드가 이상하다. 보통은 반환타입인 void앞에 public 이라던지 private, protected가 붙지만
인터페이스 내에서 추상 메소드는 'public', 'abstract'가 기본으로 선언된다(보이지 않음)
물론 써넣어도 무방하다.

3. 인터페이스를 이용해 객체를 만들때
  Monitor mon1 = new Monitor(); // 보통의 방법
Monitor mon2 = new Computer(); // 인터페이스를 이용한 객체생성
mon1은 모니터의 내용으로 모니터 객체를 생성한 것이고
mon2는 모니터의 내용을 가진 컴퓨터 객체를 생성한 것이다.
인터페이스를 이용하면 위의 표현방법이 가능해진다.

4. 인터페이스의 특징
  상속의 경우 자바에서 허용되는 횟수는 1회이다.
즉 상속은 하나의 슈퍼클래스에서만 받을 수 있다.(C++의 경우 다중 상속이 가능하단다)
하지만 인터페이스는 여러번 구현이 가능하고 인터페이스명, 인터페이스명 으로 사용이 가능하다.

또한 인터페이스 끼리 상속도 가능하다!


5. 혼동을 방지하기 위한 상속과 인터페이스의 순서
  상속과 인터페이스를 모두 사용할 경우 순서는
상속(extends) -> 인터페이스(implements) 로 사용하자.




 - 상속, 추상 클래스, 인터페이스 정리
1. 상속의 경우 클래스 명 뒤에 extends 슈퍼클래스명 을 사용한다.
  Ex) public class SubClass extends SuperClass

2. 추상 클래스는 abstract 를 클래스 선언부와 메소드 앞에 반드시 넣어줘야 한다.
  Ex) public abstract AbClass

3. 인터페이스는 클래스 선언부에 implements를 넣어 사용한다. 추상 클래스와 마찬가지로 반드시 재정의(Overriding)
  Ex) public interface Interf1{
         final int MAX = 10;
         void change();
      }

  Ex) public Subclass extends SuperClass implements Interf1, Interf2{

          public void change(){ System.out.print("인터페이스 오버라이딩 사용");}




 : 다형성(polymorphism)

1. 정확한 개념이 서질 않는다.
  인터페이스 챕터에서 다뤘던 점과 다른것을 구분 못하겠다.ㅠㅠ

과일 - 사과, 바나나, 배
과일 f = new 과일();
과일 f1 = new 사과();
뭐 이런식으로 쓸 수 있다는 거 같다...

2. instanceof
  수 백, 수 천줄의 코딩중에 갑자기 f5.method(); 이러면 f5가 뭔지 모르니까
if(f5 instanceof 바나나){ "바나나" }else {"노 바나나"}
뭐 이런식으로 쓰이는 거 같다.

3. 바인딩(binding)과 동적 바인딩(dynamic binding)
  이건 진짜 모르겠다.
바인딩 - 어떤 객체의 어떤 메소드를 사용하는지 결정하는 것? ㅋㅋ
C는 바인딩이 컴파일 단계에서 끝나지만
자바는 실행단계에서 실행시 동적으로 결정된다고 하는데.... 뭐지? -0-;
모루겠다!

4. 내부 클래스(inner class)
  클래스 내에서 동일한 내용을 수십번 반복할때 유용하게 사용할 수 있는 클래스
클래스 내에서 새로운 클래스를 정의한다. 타입은 private로 선언해야 한다.
 - public 으로 할 경우 뻘짓;

5. 무명 클래스
  이름은 클래스이나 사실 메소드에 가깝다고 생각된다고 생각했다고 생각한다고 쓰고있다.ㅡ,.ㅡ;
무명 클래스는 한번 쓰고 버린다.
new ClassOrInterface(){ 클래스 몸체 };  //반드시 ;을 찍어줘야 한다.





  지금까지의 문제는 문제를 너무 문제로 생각하고 어렵게 생각했는데.
앞으론 그냥 쉽게쉽게 풀어 나가는 방법을 택해야겠다.
주석 잘달고!

댓글 없음:

댓글 쓰기