제 6주 인터페이스 (Interfaces) 제 6주 목표 인터페이스 개념 이해 다형성 개념 이해 자바프로그래밍 강원대학교.

Slides:



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

강원대학교 자바프로그래밍 4. 클래스 설계 2 자바프로그래밍 1. 객체 자신에게 메소드 호출하기 vs 다른 객체에게 메소드 호출하기 강원대학교자바프로그래밍 2.
강원대학교 자바프로그래밍 제 4 주 클래스 설계 2 자바프로그래밍 1. 객체 자신에게 메소드 호출하기 vs 다른 객체에게 메소드 호출하기 강원대학교자바프로그래밍 2.
3 클래스 구현 자바프로그래밍 강원대학교.
5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
10. 예외 처리.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
7장 배열 ②.
5장. 객체지향과 클래스.
클래스 구성 요소 1개의 클래스는 최대 8개의 구성 요소를 가질 수 있다
Ch.07-5 xml-rpc 사용하기 김상엽.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
10장 객체-지향 프로그래밍 II.
제 5 장 상속과 다형성.
명품 JAVA Essential.
10장 객체-지향 프로그래밍 II ©창병모.
7장 배열 ②.
Power Java 제10장 배열.
자바 5.0 프로그래밍.
6장 객체-지향 설계 ②.
Chapter 4. 클래스와 객체 PS Lab. 이지연.
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 6. 형변환.
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
윤 홍 란 4 장 클래스 작성 윤 홍 란
레퍼런스 타입에 대하여 열거 타입의 선언과 이용
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
인터페이스(Interfaces) 강원대학교.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
6장 객체-지향 설계 ①.
자바 5.0 프로그래밍.
[INA470] Java Programming Youn-Hee Han
7장 인터페이스와 추상 클래스.
Java 9장. 인터페이스와 예외처리 public class SumTest {
Method & library.
6장 객체-지향 설계 ①.
Chapter 11 객체지향 프로그래밍의 기초 01 클래스 02 생성자 03 인스턴스 변수와 클래스 변수 예제 모음 요약
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
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.
9장 부프로그램 (3) 순천향대학교 컴퓨터공학부 하 상 호.
12. 상속 : 고급.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
9장 부프로그램 (3) 순천향대학교 컴퓨터공학부 하 상 호.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
MIDP 네트워크 프로그래밍 ps lab 김윤경.
발표자 : 이지연 Programming Systems Lab.
Java 5장. 객체지향 개념 public class SumTest {
.Net FrameWork for Web2.0 한석수
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
Presentation transcript:

제 6주 인터페이스 (Interfaces) 제 6주 목표 인터페이스 개념 이해 다형성 개념 이해 자바프로그래밍 강원대학교

Interface 약속 (서비스 이용자와 제공자 사이의) 서비스 사용법 자동차 사용자는 어떤 자동차이든 운전 가능 자동차 회사들이 표준 인터페이스를 지키므로 표준 인터페이스: 핸들, 브레이크, 엑셀, 기어 등 자동차: 인터페이스 트럭, 승용차, 유조차, 승합차 등: 자동차 인터페이스를 구현한 클래스들 자바프로그래밍 강원대학교

인터페이스 정의 (interface definition) public interface InterfaceName { constants method signatures } interface 앞에 public이 없으면 같은 패키지 내에서만 유효 메소드 이름 앞에 public이 없어도 public으로 간주됨 (public interface의 경우) 상수 앞에는 final, static이 있는 것으로 간주됨 메소드 본체(body, 중괄호 부분)는 없음 public interface Drivable { int MAX_SPEED = 100; void drive(double speed); void turn(double angle); void stop(); } 자바프로그래밍 강원대학교

인터페이스를 갖춘 클래스 구현 class Bike implements Drivable { void drive(double speed) { if (speed <= Drivable.MAX_SPEED) 페달을 돌린다, 열라~, speed될 때까지; } void turn(double angle) { angle 만큼 핸들을 돌린다; void stop() { 발로 질질 끈다; void jump() { ... } 그 밖의 여러 메소드들... 약속에 맞춰 메소드 구현 약속에 맞춤: 메소드 signature를 준수함 구체적인 구현은 자유 자바프로그래밍 강원대학교

인터페이스를 갖춘 클래스 구현 class Car implements Drivable { void drive(double speed) { 엔진에 연료 분사, speed될 때까지; } void turn(double angle) { angle 만큼 조향장치 구동; void stop() { 브레이크 디스크 밀착; void lockDoor() { ... } 그 밖의 여러 메소드들... 약속에 맞춰 메소드 구현 약속에 맞춤: 메소드 signature를 준수함 구체적인 구현은 자유 자바프로그래밍 강원대학교

인터페이스는 타입으로 사용된다. Drivable vehicle = new Car(); vehicle.drive(50); vehicle.stop(); vehicle = new Bike(); vehicle.turn(-30); RobotDriver: Drivable 인터페이스를 쓸 줄 아는 로봇 RobotDriver는 Car, Bike에 대해 세부적인 것을 잘 몰라도 인터페이스에 맞춰 이들을 사용할 수 있다. 자바프로그래밍 강원대학교

인터페이스는 타입으로 사용된다. Drivable vehicle = new Car(); vehicle.drive(50); vehicle.stop(); vehicle.lockDoor(); // No! vehicle = new Bike(); vehicle.turn(-30); vehicle.jump(); // No! Drivable 인터페이스에서 정의된 메소드만 호출 가능! vehicle이 Drivable 타입이므로... 자바프로그래밍 강원대학교

인터페이스는 타입으로 사용된다. Drivable vehicle = new Car(); vehicle.drive(50); vehicle.stop(); Car myCar = vehicle; // No! 모든 Car는 Drivable이지만 모든 Drivable이 Car는 아니므로 ... 자바프로그래밍 강원대학교

인터페이스는 타입으로 사용된다. Drivable vehicle = new Car(); vehicle.drive(50); vehicle.stop(); Car myCar = (Car)vehicle; // Yes! myCar.lockDoor(); // Yes! 현재 vehicle이 Car 타입 객체이므로 Car 타입으로 casting 가능! Car 타입 레퍼런스 myCar에는 Car의 메소드 lockDoor 호출 가능! 자바프로그래밍 강원대학교

인공지능의 시대, 프로그램이 운전한다. 운전자가 자동차를 운전할 줄 알듯이 운전프로그램은 Drivable 인터페이스를 사용할 줄 안다. 운전프로그램은 Bike도 Car도 운전 가능 자바프로그래밍 강원대학교

public class RobotDriver { public void go(Drivable v){ // 지도를 보면서 요리 조리 운전!! // Drivable이라면 뭐든 오케이! v.drive(50); v.turn(60); ... v.stop(); } 자바프로그래밍 강원대학교

public class RobotDriverTest { public static void main(String[] args) { RobotDriver driver = new RobotDriver(); Car car = new Car(); // 로봇에게 자동차를 주면서 운전을 시킴 driver.go(car); Bike bike = new Bike(); // 로봇에게 자전거를 주면서 운전을 시킴 driver.go(bike); } 자바프로그래밍 강원대학교

또 하나의 인터페이스 public interface Measurable { double getMeasure(); // 측정값을 반환 } 자바프로그래밍 강원대학교

Measurable을 구현하는 클래스 class Square implements Measurable { double getMeasure(){ return edgeLength * edgeLength; } private double edgeLength; 약속된 메소드 구현 사각형의 경우 그 면적을 계산 자바프로그래밍 강원대학교

여러 인터페이스를 구현할 수 있다. class Boat implements Drivable, Measurable { void drive(double speed) { 스크루 돌림, speed될 때까지; } void turn(double angle) { angle 만큼 돌 때까지 키 작동; void stop() { 스크루 거꾸로 돌림; double getMeasure(){ return weight; private double weight; Boat 인스턴스는 Drivable 객체이기도하고 Measurable 객체이기도 하다. 배의 무게를 반환 자바프로그래밍 강원대학교

RobotDriver는 배도 운전할 수 있다. public class RobotDriverTest { public static void main(String[] args) { RobotDriver driver = new RobotDriver(); Car car = new Car(); driver.go(car); Bike bike = new Bike(); driver.go(bike); Boar boat = new Boat(); driver.go(boat); } 자바프로그래밍 강원대학교

타입에 따라 메소드 호출이 제한된다. class RobotDriver { public static void main(String[] args) { Drivable vehicle = new Car(); vehicle.drive(50); vehicle.stop(); vehicle = new Bike(); vehicle.turn(-30); vehicle = new Boat(); vehicle.drive(20); vehicle.getMeasure(); // 컴파일 에러 } // vehicle은 Drivable 타입인데 Drivable들은 getMeasure()를 // 지원하지 않음 자바프로그래밍 강원대학교

Casting class RobotDriver { public static void main(String[] args) { Drivable vehicle = new Car(); vehicle.drive(50); vehicle.stop(); vehicle = new Bike(); vehicle.turn(-30); vehicle = new Boat(); vehicle.drive(20); Boat b = (Boat) vehicle; // vehicle이 실제로는 Boat 인스턴스이므로 // Boat 타입으로 캐스팅 가능 b.getMeasure(); // OK! } 자바프로그래밍 강원대학교

다형성 (Polymorphism) class RobotDriver { public static void main(String[] args) { Drivable vehicle = new Car(); vehicle.drive(50); // Car의 drive 메소드가 실행됨 vehicle.stop(); vehicle = new Bike(); vehicle.drive(50); // Bike의 drive 메소드가 실행됨 vehicle.turn(-30); vehicle = new Boat(); vehicle.drive(20); Boat b = (Boat) vehicle; // vehicle이 실제로는 Boat 인스턴스이므로 // Boat 타입으로 캐스팅 가능 b.getMeasure(); // OK! } 자바프로그래밍 강원대학교

Polymorphism Drivable인 vehicle 에게 drive를 호출하면, vehicle이 실제로 어떤 객체인지에 따라 행동이 달라짐 vehicle이 Car라면 Car의 drive 메소드가, vehicle이 Bike라면 Bike의 drive 메소드가 실행됨 Polymorphism (many shapes): vehicle이 이렇게 작동하기도 하고 저렇게 작동하기도 하는 것 (실제 객체 타입이 무엇인가에 따라) late binding: 실행 시 결정됨  early binding (컴파일 시 결정됨): overloading 자바프로그래밍 강원대학교

Measurable 객체를 다룰 줄 아는 클래스 class Relator { public static int compare(Measurable a, Measurable b){ if (a.getMeasure() < b.getMeasure()) return -1; else if (a.getMeasure() > b.getMeasure()) return 1; else return 0; } Boat b1 = new Boat(); Boat b2 = new Boat(); if(Relator.compare(b1, b2) > 0) ... Square s1 = new Square(); Square s2 = new Square(); if(Relator.compare(s1, s2) > 0) ... Square가 Measurable 인터페이스를 구현한 클래스라고 가정함 자바프로그래밍 강원대학교

인터페이스는 코드를 재사용할 수 있게 해 준다. Boat들을 서로 비교하기 위해 Relator라는 코드를 한 번 만들어 놓으면, Square들을 서로 비교하기 위해 또 다른 코드를 개발할 필요 없이 Relator를 재사용할 수 있다. Relator는 Measurable 인터페이스를 구현한 어떤 객체에게도 적용할 수 있다. (코드 재사용!) 자바프로그래밍 강원대학교

서브인터페이스 슈퍼인터페이스 FlyAndDrivable int MAX_SPEED = 100; public interface FlyAndDrivable extends Drivable { void fly(); } FlyAndDrivable int MAX_SPEED = 100; void drive(double speed); void turn(double angle); void stop(); void fly(); 자바프로그래밍 강원대학교

클래스: 하나의 슈퍼클래스만 확장 가능 자바프로그래밍 강원대학교

인터페이스: 여러 인터페이스 확장 가능 public interface GroupedInterface extends Interface1, Interface2, Interface3 { double E = 2.718282; void doSomething (int i, double x); int doSomethingElse(String s); } 자바프로그래밍 강원대학교

또 하나의 예 public interface Measurable { double getMeasure(); // 측정값을 반환 } public class BankAccount implements Measurable { public BankAccount() { 구성자 } public void deposit(double amount){ ... } public double getBalance(){ ... } public String toString(){ ... } public double getMeasure() { return balance; } private String owner; private double balance; 자바프로그래밍 강원대학교

public interface Measurable { double getMeasure(); // 측정값을 반환 } public class Coin implements Measurable { public Coin(double aValue, String aName) { ... } public double getValue() { ... } public String getName() { ... } public double getMeasure() { return value; } private double value; private String name; 자바프로그래밍 강원대학교

DataSet: Measurable Objects 중 측정값이 최대인 놈을 골라내는 클래스 public class DataSet { public void add(Measurable x) { sum = sum + x.getMeasure(); if (count == 0 || maximum.getMeasure() < x.getMeasure()) maximum = x; count++; } public Measurable getMaximum() { return maximum; } private double sum; private Measurable maximum; private int count; } 자바프로그래밍 강원대학교

UML Diagram of Dataset and Related Classes 구현 사용 자바프로그래밍 강원대학교

File DataSetTester.java 01: /** 02: This program tests the DataSet class. 03: */ 04: public class DataSetTester 05: { 06: public static void main(String[] args) 07: { 08: DataSet bankData = new DataSet(); 09: 10: bankData.add(new BankAccount(0)); 11: bankData.add(new BankAccount(10000)); 12: bankData.add(new BankAccount(2000)); 13: 14: System.out.println("Average balance = " 15: + bankData.getAverage()); 16: Measurable max = bankData.getMaximum(); 17: System.out.println("Highest balance = " 18: + max.getMeasure()); 자바프로그래밍 강원대학교

File DataSetTester.java 19: 20: DataSet coinData = new DataSet(); 21: 22: coinData.add(new Coin(0.25, "quarter")); 23: coinData.add(new Coin(0.1, "dime")); 24: coinData.add(new Coin(0.05, "nickel")); 25: 26: System.out.println("Average coin value = " 27: + coinData.getAverage()); 28: max = coinData.getMaximum(); 29: System.out.println("Highest coin value = " 30: + max.getMeasure()); 31: } 32: } 자바프로그래밍 강원대학교

File DataSetTester.java Output: Average balance = 4000.0 Highest balance = 10000.0 Average coin value = 0.13333333333333333 Highest coin value = 0.25 자바프로그래밍 강원대학교