객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr
예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television implements RemoteControl { public void turnon() { // 실제로 TV의전원을켜기위한코드가들어간다. public void turnoff() { // 실제로 TV의전원을끄기위한코드가들어간다. 2
예제 1. 홈네트워킹 Television t = new Television(); t.turnon(); t.turnoff(); 3
예제 2. 자율주행자동차 추상메소드를가지는인터페이스와이인터페이스를구현하는클래스를작 성하여테스트해보자. 4
예제 2. 자율주행자동차 public interface OperateCar { void start(); void stop(); void setspeed(int speed); void turn(int degree); 5
예제 2. 자율주행자동차 public class AutoCar implements OperateCar { public void start() { System.out.println(" 자동차가출발합니다."); public void stop() { System.out.println(" 자동차가정지합니다."); public void setspeed(int speed) { System.out.println(" 자동차가속도를 " + speed + "km/h 로바꿉니다."); public void turn(int degree) { System.out.println(" 자동차가방향을 " + degree + " 도만큼바꿉니다."); 6
예제 2. 자율주행자동차 public class AutoCarTest { public static void main(string[] args) { OperateCar obj = new AutoCar(); obj.start(); obj.setspeed(30); obj.turn(15); obj.stop(); 7
예제 3. 객체비교하기 Comparable인터페이스를실습하여본다. 이인터페이스는우리가정의하는것이아니고표준자바라이브러리에다음과같이정의되어있다. 이인터페이스는객체와객체의크기를비교할때사용된다. 8
예제 3. 객체비교하기 public class Rectangle implements Comparable { public int width = 0; public int height = 0; @Override public String tostring() { return "Rectangle [width=" + width + ", height=" + height + "]"; public Rectangle(int w, int h) { width = w; height = h; System.out.println(this); public int getarea() { return width * height; 9
예제 3. 객체비교하기 @Override public int compareto(object other) { Rectangle otherrect = (Rectangle) other; if (this.getarea() < otherrect.getarea()) return -1; else if (this.getarea() > otherrect.getarea()) return 1; else return 0; 10
예제 3. 객체비교하기 public class RectangleTest { public static void main(string[] args) { Rectangle r1 = new Rectangle(100, 30); Rectangle r2 = new Rectangle(200, 10); int result = r1.compareto(r2); if (result == 1) System.out.println(r1 + " 가더큽니다."); else if (result == 0) System.out.println(" 같습니다 "); else System.out.println(r2 + " 가더큽니다."); 11
예제 4. 이벤트처리 예를들어서버튼을눌렀을때발생하는이벤트를처리하려면어떤공통적 인규격이있어야한다. ActionListener 인터페이스가버튼이벤트를처리할때규격을정의한다. 12
예제 4. 이벤트처리 ActionListener 는 Timer 이벤트를처리할때도사용된다. 자바에서기본제 공되는 Timer 클래스는주어진시간이되면이벤트를발생시키면서 actionperformed() 메소드를호출한다. 이점을이용하여서 1 초에한번씩 "beep" 를출력하는프로그램을작성하여보자. public interface ActionListener { void actionperformed(actionevent event); beep beep beep... 13
예제 4. 이벤트처리 class MyClass implements ActionListener { public void actionperformed(actionevent event) { System.out.println("beep"); public class CallbackTest { public static void main(string[] args) { ActionListener listener = new MyClass(); Timer t = new Timer(1000, listener); t.start(); for (int i = 0; i < 1000; i++) { try { Thread.sleep(1000); catch (InterruptedException e) { 14
예제 5. 인터페이스상속하기 인터페이스가인터페이스를상속받는것도가능하다. public interface AdvancedRemoteControl extends RemoteControl { public void volumeup(); // 가전제품의볼륨을높인다. public void volumedown();// 가전제품의볼륨을낮춘다. 15
예제 6. 자바에서의다중상속 인터페이스를이용하여가능하다. interface Drivable { void drive(); interface Flyable { void fly(); 16
예제 6. 자바에서의다중상속 public class FlyingCar1 implements Drivable, Flyable { public void drive() { System.out.println("I m driving"); public void fly() { System.out.println("I m flying"); public static void main(string args[]) { FlyingCar1 obj = new FlyingCar1(); obj.drive(); obj.fly(); I m driving I m flying 17
예제 7. 상수정의 인터페이스에는상수를정의할수있다. public interface MyConstants { int NORTH = 1; int EAST = 2; int SOUTH = 3; int WEST = 4; 18
예제 7. 상수정의 interface Days { public static final int SUNDAY = 1, MONDAY = 2, TUESDAY = 3, WEDNESDAY = 4, THURSDAY = 5, FRIDAY = 6, SATURDAY = 7; public class DayTest implements Days { public static void main(string[] args) { System.out.println(" 일요일 : + SUNDAY); 상수를공유하려면인터페이스를구현하면된다. 19
예제 8. 디폴트메소드 interface MyInterface { public void mymethod1(); default void mymethod2() { System.out.println("myMethod2()"); public class DefaultMethodTest implements MyInterface { public void mymethod1() { System.out.println("myMethod1()"); public static void main(string[] args) { DefaultMethodTest obj = new DefaultMethodTest(); obj.mymethod1(); obj.mymethod2(); mymethod1() mymethod2() 20
예제 9. 무명클래스 interface RemoteControl { void turnon(); void turnoff(); public class AnonymousClassTest { public static void main(string args[]) { RemoteControl ac = new RemoteControl() { ; public void turnon() { ac.turnon(); ac.turnoff(); System.out.println("TV turnon()"); public void turnoff() { System.out.println("TV turnoff()"); TV turnon() TV turnoff() // 무명클래스정의 21
예제 10. 타이머이벤트처리 ( 람다식 ) 앞에서 Timer 클래스를사용하여서 1 초에한번씩 beep 를출력하는프로 그램을작성한바있다. 람다식을이용하면얼마나간결해지는지를확인하 자. (p. 14 참고 ) beep beep beep... 22
예제 10. 타이머이벤트처리 ( 람다식 ) import javax.swing.timer; public class CallbackTest { public static void main(string[] args) { Timer t = new Timer(1000, event -> System.out.println("beep")); t.start(); for (int i = 0; i < 1000; i++) { try { Thread.sleep(1000); catch (InterruptedException e) { 23
예제 11. 함수인터페이스와람다식 @FunctionalInterface interface MyInterface { void sayhello(); public class LambdaTest1 { public static void main(string[] args) { MyInterface hello = () -> System.out.println("Hello Lambda!"); hello.sayhello(); Hello Lambda! 24
예제 12. 패키지생성하기 예를들어서어떤회사에서게임을개발하려면 library 팀과 game 팀의소스 를합쳐야한다고가정해보자. 25
예제 12. 패키지생성하기 프로젝트 Package2를생성한다. library 패키지를생성한다. library 패키지에 Rectangle 클래스, Circle 클래스를추가한다. game 패키지를생성한다. game 패키지에 Rectangle 클래스와 Sprite 클래스를추가한다. 26
예제 12. 패키지생성하기 27