Presentation is loading. Please wait.

Presentation is loading. Please wait.

7장 인터페이스와 추상 클래스.

Similar presentations


Presentation on theme: "7장 인터페이스와 추상 클래스."— Presentation transcript:

1 7장 인터페이스와 추상 클래스

2 인터페이스와 추상 클래스 인터페이스(Interface) 추상 클래스(abstract class) 내부 클래스

3 인터페이스와 추상 클래스 인터페이스 인터페이스는 자신 스스로가 어떤 객체를 정의하지 않음.
단지 그 객체에 필요한 상수와 메서드의 명세만을 가지고 있기 때문에 객체를 생성할 수 없고 클래스에서 인터페이스를 구현하여 사용함.

4 인터페이스와 추상 클래스 인터페이스의 선언 인터페이스는 상수와 추상 메서드만을 가질 수 있으며 변수나 일반 메서드를 포함 할 수 없음. 인터페이스 선언 형식 예제   [접근 제어자] Interface 인터페이스이름 [extends 인터페이스이름]   {     [접근 제어자] 데이터형 상수이름 = 상수값; //상수 선언     [접근 제어자] 데이터형 메서드이름(인자);   } // CounterInterface 인터페이스를 선언 public interface CounterInterface { // int형 상수 MAX_COUNT를 선언     public final int MAX_COUNT=3; // 인터페이스를 implements 하는 클래스에서 구현해야 하는 메서드의 원형을 정의     public int addCount(); } 수상(垂裳) ꃃ옷소매를 늘어뜨리고 팔짱을 낀다는 뜻으로, 아무 일도 하지 않음을 이르는 말.

5 인터페이스와 추상 클래스 인터페이스의 구현 인터페이스를 구현한 클래스는 인터페이스에 선언된 모든 추상 메서드를 구현해야 함.
만약 구현되지 않은 추상 메서드가 있다면 자바 컴파일러는 에러를 출력한다. implement 지시자를 사용함. 인터페이스 구현 형식   [접근 제어자] class 클래스이름 implements 인터페이스이름,[인터페이스이름,...]   {     멤버 변수;     메서드;     오버라이딩 된 추상 메서드;   }

6 인터페이스와 추상 클래스 예제 실행결과 // CounterInterface 인터페이스를 implements 함
public class Counter implements CounterInterface {     private int count = 0; // CounterInterface 인터페이스의 추상 메서드인 addCount() 오버라이딩함.     public int addCount() { // Counter 클래스의 멤버변수인 count의 값이 CounterInterface 인터페이스의 상수 // MAX_COUNT와 같으면 count의 값을 0으로 설정함         if(count==MAX_COUNT)             return (count=0);                 return ++count;     }

7 인터페이스와 추상 클래스 추상 클래스 추상 클래스는 인터페이스와 마찬가지로 하위 클래스에 구현 되어야 하는 기능을 선언하여 상속받는 하위 클래스가 구현하도록 하지만 인터페이스보다 느슨한 추상화를 제공함. 인터페이스는 상수와 추상메서드만을 포함하지만 추상 클래스는 구현된 메서드와 멤버변수를 포함할 수 있음

8 인터페이스와 추상 클래스 추상 클래스의 사용법과 특징
하나 이상의 추상 메서드를 가져야 하며 이 추상 메서드는 인터페이스와 마찬가지로 구현부를 가지지 않음 추상 클래스를 이용해 바로 객체를 생성할 수 없음. 추상 클래스를 상속한 클래스는 반드시 추상 메서드를 구현해야 함. 추상 클래스는 인터페이스보다 느슨한 추상화를 제공하며 일반적인 클래스의 멤버들을 가질 수 있음   [접근 제어자] abstract class 클래스이름   {     멤버 변수;     일반적인 메서드;     abstract 반환형 추상메서드이름();   }

9 인터페이스와 추상 클래스 예제 실행결과 //추상 클래스인 AbstractCounter 클래스를 선언
abstract class AbstractCounter { // 상수를 정의하기위해 final 지시자를 사용     protected final int MAX_COUNT=3; // 멤버 변수를 count를 선언한다.     protected int count = 0;     // 일반 메서드 init()을 정의한다.     public void init() {         count = 0;     }     // 추상 메서드 addCount()를 선언한다.     abstract public int addCount(); } //추상클래스인 AbstractCounter 클래스를 상속받기위해 //extends 지시자를 사용 public class Counter extends AbstractCounter { // AbstractCounter 클래스의 추상 메서드인 // addCount()를 구현     public int addCount() {         if(count==MAX_COUNT)             return (count=0);                 return ++count;     }         public static void main(String args[]) {         AbstractCounter counter = new Counter();         counter.init();         for(int count = 0; count < 5; count++ ) {             System.out.println(counter.addCount());         } }

10 인터페이스와 추상 클래스 내부 클래스 일반적인 방식으로 클래스를 생성하게 되면 다른 클래스가 멤버 변수나 메서드에 접근할 때 제약이 많음. 멤버변수나 메서드가 특정 외부 클래스에게만 public이고 다른 클래스에는 private로 접근 제어를 할 수 있는 방법이 내부 클래스를 사용하는 것임. 어떤 클래스를 자신의 내부적인 용도로만 사용하고자 할 때 편리한 개념

11 인터페이스와 추상 클래스 내부 클래스의 종류 내재된 톱 레벨 클래스 / 인터페이스
내부 클래스가 static으로 선언된 것으로 인터페이스는 static으로 선언하지 않아도 기본적으로 static이기 때문에 항상 톱 레벨이 된다. 형식   class A   {     static public class B {     }           public interface C {   }

12 인터페이스와 추상 클래스 class InnerClass {
// 내재된 톱 레벨 클래스인 TopLevelInnerClass 클래스를 선언한다.     static public class TopLevelInnerClass { // 내부 클래스의 멤버 메서드인 test()를 정의한다.         public void test() {             System.out.println("톱 레벨 내부 클래스");         }     } } public class Test {     public static void main(String args[]) { // InnerClass의 내재된 톱 레벨 클래스 객체를 new 연산자를 상용해 생성한다.         InnerClass.TopLevelInnerClass obj = new InnerClass.TopLevelInnerClass(); //내재된 톱 레벨 클래스인 TopLevelInnerClass의 메서드를 일반 클래스의 메서드를 //사용하듯이 .(돗트) 연산자를 사용해 호출한다.         obj.test();

13 인터페이스와 추상 클래스 내부 멤버 클래스 내부 멤버 클래스는 기본적으로 멤버 변수나 메서드와 같이 외부 클래스의 멤버로 동작함. 내부 멤버 클래스를 사용할 때의 특징                 1.반드시 인스턴스를 생성 해야한다. 내부 멤버 클래스의 인스턴스를 생성하지 않고 멤버 접근하려하면 NullPointerExcption이 발생한다. 2.내부 멤버 클래스는 외부 클래스의 멤버 변수와 메서드에 접근이 가능하다. 내부 멤버 클래스는 외부 클래스의 멤버 변수나 메서드와 동일하게 취급되기 때문에 접근 지시자에 관계없이 접근이 가능하다.

14 인터페이스와 추상 클래스 3.외부 클래스의 인스턴스가 먼저 생성되어야 한다. 내부 멤버 클래스는 단독적으로 외부에서 사용이 불가능함으로 외부 클래스의 인스턴스의 레퍼런스를 통해서 접근해야 한다. 4. 내부 멤버 클래스의 클래스 파일명은 다음과 같은 규칙으로 생성된다.   class A   {     public class B {     }   }   (예) 내부 클래스의 인스턴스를 외부에서 생성하고자할 때   A a = new A();   a.B b = a.new B();   외부클래스이름$내부클래스이름.class

15 인터페이스와 추상 클래스 예제 실행결과 class InnerClass { private String str= "멤버";
    public InnerClass() { // 내부 멤버 클래스인 MemberInnerClass 클래스 객체를 생성한다.         MemberInnerClass memberInner = new MemberInnerClass(); // MemberInnerClass 클래스의 메서드를 호출한다.         memberInner.test();     }     // 내부 멤버 클래스인 MemberInnerClass 클래스를 정의한다.     public class MemberInnerClass {         public void test() {             System.out.println("자신을 정의한 클래스의 "+str+"에 접근할 수 있다.");         }     } } public class Test {     public static void main(String args[]) {         InnerClass inner = new InnerClass();

16 인터페이스와 추상 클래스 지역 클래스 지역 클래스는 멤버 클래스와는 다르게 자바 코드의 블록 안에서 정의된 내부 클래스.
정의된 블록 안에서만 사용할 수 있고 지역 변수와 유사한 특성을 가짐. 멤버 클래스와 마찬가지로 자신을 정의한 클래스의 멤버에 자유롭게 접근할 수 있음.   class A   {     [접근제어자] 반환형 메서드() {         class B {         }         B b = new B()     }   }

17 인터페이스와 추상 클래스 class InnerClass { private String str= "멤버";
    public InnerClass() { class LocalInnerClass { // 지역 클래스인 LocalInnerClass 클래스를 정의한다.             public void test() {                 System.out.println("자신을 정의한 클래스의 "+str+"에 접근할 수 있다.");             }         }         // 지역 클래스인 LocalInnerClass 클래스 객체를 생성한다.         LocalInnerClass localInner = new LocalInnerClass(); // LocalInnerClass 클래스의 메서드를 호출한다         localInner.test();     } } public class Test {     public static void main(String args[]) {         InnerClass inner = new InnerClass(); } class InnerClass { private String str= "멤버"; public InnerClass() { } public void sS(String s){ class LocalInnerClass { public void test() { System.out.println("자신을 정의한 클래스의 "+str+"에 접근할 수 있다."); LocalInnerClass localInner = new LocalInnerClass(); localInner.test(); System.out.print(s); public class Test { public static void main(String args[]) { InnerClass inner = new InnerClass(); inner.sS("aaa");


Download ppt "7장 인터페이스와 추상 클래스."

Similar presentations


Ads by Google