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

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
10. 예외 처리.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
5장. 객체지향과 클래스.
JAVA 클래스와 멤버 2014년 4월 2일 19:00 손은경 강원대학교 데이터베이스 연구실 강원대학교 데이터베이스 연구실.
클래스 구성 요소 1개의 클래스는 최대 8개의 구성 요소를 가질 수 있다
Chapter 05. 클래스Ⅱ.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
제 5 장 상속과 다형성.
명품 JAVA Essential.
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 9. 예외처리.
Lesson 6. 형변환.
제 3장. C보다 나은 C++ II.
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
Java의 정석 제 9 장 java.lang 패키지 Java 정석 남궁성 강의
어서와 Java는 처음이지! 제7장 상속.
6장. 클래스.
레퍼런스 타입에 대하여 열거 타입의 선언과 이용
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
3장 자바의 기본문법(2).
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
자바네트워크 제2주 실습 네트워크기초, 스레드.
10장. 예외처리.
자바 5.0 프로그래밍.
C#.
6장 클래스 6.1 클래스의 일반 구조 6.2 클래스 선언 6.3 객체의 생성 6.4 멤버 변수 6.5 멤버변수 접근 한정자
13. 연산자 오버로딩.
Java 9장. 인터페이스와 예외처리 public class SumTest {
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
Chapter 11 객체지향 프로그래밍의 기초 01 클래스 02 생성자 03 인스턴스 변수와 클래스 변수 예제 모음 요약
명품 C++ 9장 가상 함수와 추상 클래스.
Lesson 2. 기본 데이터형.
1주차 : 자바기본 소제목 : 자바 프로그래밍 기본.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Power Java 제11장 상속.
JA A V W. 06.
10장 상속 Section 1 상속의 개요 Section 2 상속과 한정자 Section 3 상속과 생성자
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
C# 07장. 객체 지향 개념.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
3. 모듈 (5장. 모듈).
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
Java의 정석 제 8 장 예외처리 (Exception handling) Java 정석 남궁성 강의
자바 객체 지향 프로그래밍 Ps lab 김윤경.
7 생성자 함수.
6 객체.
3장 자바의 기본문법(2).
Presentation transcript:

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

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

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

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

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

인터페이스와 추상 클래스 예제 실행결과 // 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;     }

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

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

인터페이스와 추상 클래스 예제 실행결과 //추상 클래스인 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());         } }

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

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

인터페이스와 추상 클래스 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();

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

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

인터페이스와 추상 클래스 예제 실행결과 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();

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

인터페이스와 추상 클래스 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");