OBJECT ORIENTED PROGRAMMING Object Oriented Programming 이강의록은 Power Java 저자의강의록을사용했거나재편집된것입니다. 상속, 인터페이스, 그리고다형성 상속메소드재정의 추상클래스인터페이스 상속 (inheritance) 접근지정자 다형성 상속과생성자 Object class 내부클래스무명클래스 Final class 3
상속이란? 상속의장점 상속의개념은현실세계에도존재한다. 상속의장점 상속을통하여기존클래스의필드와메소드를재사용기존클래스의일부변경도가능상속을이용하게되면복잡한 GUI 프로그램을순식간에작성 상속은이미작성된검증된소프트웨어를재사용신뢰성있는소프트웨어를손쉽게개발, 유지보수 코드의중복을줄일수있다. 5 6 상속 (inheritance) 수퍼클래스는서브클래스를포함 class Car { int speed; } class SportsCar extends Car { int turbo; } 상속한다는의미 7 8
상속의예 상속의계층구조 9 10 상속은중복을줄인다. 상속의구체적인예 상속 11 12
상속의예 상속의사용 서브클래스는수퍼클래스의필드와메소드를마치자기것처럼사용할수있다. 13 14 메소드재정의 (overriding) 메소드재정의의예 메소드재정의 (method overriding): 서브클래스가필요에따라상속된메소드를다시정의하는것 Animal 15 16
메소드를재정의하려면 중복정의 (overloading) 와재정의 (overriding) 메소드의이름, 반환형, 매개변수의개수와데이터타입이일치하여야한다. public class Animal { public void makesound() { } }; 오버라이드가아님 public class Dog extends Animal { public int makesound() { } }; 17 18 super 키워드 접근지정자 상속에서수퍼클래스의필드 / 메소드참조할때 수퍼클래스에서 subclass bl 로공용 (public), 보호 (protected), t 패키지는상속되지만전용멤버 (private) 는상속되지않는다. Sub class 에서서재정의되는메소드는접근을제한하는접근지정자를사용할수없다. 즉 protected에서 public으로할수있지만 private로지정할수없다. 수퍼클래스객체를가리킨다. 19 20
접근지정자의예 접근지정자의예 Manager Employee Manager 21 Employee 22 상속과생성자 묵시적인호출 23 24
Object 클래스 Object 의메소드 25 26 equals() 메소드 equals() 메소드 Object 의 equals() 를재정의 재정의된 equals() 호출 27 28
finalize() 메소드 hashcode() 메소드 Object class l 는 finalize() 라는콜백메소드정의. 객체가소멸되기직전에 call Sub class 에서재정의하여서자원을반납하는등의처리과정실행 hashcode() hc 에의해반환되는코드는객체의메모리주소 29 30 tostring() 종단클래스 (final) 와종단메소드 Object 클래스의 tostring() 메소드는객체의문자열표현을반환 public class Car { private String model; public Car(String model) { this.model = model; } Object 의 tostring() public String tostring() { 를재정의 return 모델 : + model; } } 키워드 final 을붙이면상속이나재정의할수없다. 재정의할수없도록한다. 31 32
추상클래스 (abstract class) 인터페이스와다형성 추상클래스 (abstract t class): l ) 몸체가구현되지않은메소드를가지고있는클래스 추상클래스는추상적인개념을표현하는데적당하다. 34 추상클래스의예 추상클래스의예 35 36
인터페이스 (interface) 인터페이스의필요성 인터페이스 (interface): 추상메소드들로만이루어진다. 인터페이스는객체와객체사이의상호작용을위한인터페이스이다. 37 38 인터페이스의예 홈네트워킹예제 홈네트워킹예제 인터페이스를구현 39 40
홈네트워킹예제 인터페이스와타입 인터페이스는하나의타입으로간주된다. Television 객체를생성하여메소드들을호출 인터페이스로참조변수를만들수있다. 41 42 다중상속 다중상속 다중상속이란여러개의수퍼클래스로부터상속하는것 자바에서는다중상속을지원하지않는다. 다중상속에는어려운문제가발생한다. 인터페이스를이용하면다중상속의효과를낼수있다. Super class interface 43 44
상수공유 다형성 (polymorphism) 이란? 동일한부모클래스에서상속된 subclass bl 의객체들을하나의타입으로취급할수있게해줌.( 서로다른타입을받아서하나의코드로처리하게함 ) 코드구조향상, 가독성증가, 확장가능한프로그램작성 상수를공유하려면인터페이스를구현하면된다. 45 46 상속과객체참조 왜그럴까? 서브클래스객체는수퍼클래스객체를포함하고있기때문이다. Shape 타입변수로 Rectangle 객체를참조하니틀린거같지만올바른문장!! Shape s = new Rectangle();// OK! s는 Rectangle 성질을다포함하지못한다. 그럼그정보는? Rectangle r = new Shape(); 는? 47 48
동적바인딩 자바의바인딩 ( 메소드호출을실제메소드의몸체와연결하는것 ) 이실행단계에서이루어짐. 실행단계에서객체의타입을보고적절한메소드를호출함. 예제 Shape의 draw() 가호출되는것이아니라 Rectangle의 draw() 가호출된다. s 의타입은 Shape 이지만 s 가실제로가리키고있는객체의타입이 Rectangle이기때문이다. 49 50 예제 예제 어떤 draw() 가호출되는가? 51 52
다형성의장점 객체의실제타입을알아내는방법 만약새로운도형클래스를작성하여추가한다고해보자. instanceof f(a instanceof B: 객체 A 가타입 B 이면 true) 연산자를사용한다. drawall() 메소드는수정할필요가없다. 53 54 메소드의매개변수 예제 Subclass 타입보다는 Shape 타입으로정의된매개변수선언 메소드의매개변수는수퍼클래스타입으로선언하는것이좋다. 메소드의매개변수로수퍼클래스참조변수를이용한다. -> 다형성을이용하는전형적인방법 55 56
형변환 내부클래스 Shape s = new Rectangle(); R t 내부클래스 (inner class): l ) 클래스안에다른클래스를정의 s 를통하여 Rectangle 클래스의필드와메소드를사용하고자할때는어떻게하여야하는가? 형변환을통해서 ((Rectangle) s).setwidth(100); 57 58 내부클래스의사용목적 예제 특정멤버변수를 private 로유지하면서자유롭게사용할수있다. 특정한곳에서만사용되는클래스들을모을수있다. 보다읽기쉽고유지보수가쉬운코드가된다. 59 60
무명클래스 (anonymous class) 일반클래스와무명클래스 무명클래스 (anonymous l class) : 클래스몸체는정의되지만이름이없는클래스 클래스정의하면객체생성 한번만사용가능 수퍼클래스에서상속받거나인터페이스를구현하여작성 필드와다른메소드정의가능. 메소드안에정의되는지역변수중에서는 final 로선언된변수만사용가능. 이름이있는클래스의경우 class TV implements RemoteControl {. } RemoteControl obj = new TV(); 무명클래스의경우 RemoteControl obj = new RemoteControl(){. }; 부모클래스이름이나인터페이스이름 61 62 무명클래스의예 Q & A 63 64