출간일 2016년 11월 28일
판매가 2000원
형태 ebook
이 책의 모든 내용은 http://ehpub.co.kr에 공개하고 있습니다.
학습에 도움이 되시면 ebook을 구입하여 소장하시면 감사하겠습니다.
언제나 휴일 출판사의 수익금의 대부분은 아프리카에 기부하고 있습니다.
5. 3 추상화
java에서는 abstract 키워드를 사용하여 추상 클래스와 추상 메서드를 만들 수 있습니다.
추상 클래스는 개체를 생성할 수 없고 기반 클래스의 역할만 수행하는 클래스입니다. 추상 클래스를 만들 때는 class 정의문 앞에 abstract 키워드를 명시합니다.
추상 메서드는 메서드 내부 정의가 없는 메서드입니다. 이는 파생 형식에서 재정의해야 합니다. 추상 메서드를 만들 때도 메서드 앞에 abstract 키워드를 명시합니다. 그리고 추상 메서드를 하나라도 있으면 반드시 추상 클래스로 지정해야 합니다.
package ex_abstract; public abstract class Musician { public abstract void play(); } |
package ex_abstract; public class Pianist extends Musician{ @Override public void play(){ System.out.println("딩동댕"); } } |
package ex_abstract; public class Program { public static void main(String[] args){ Pianist pianist = new Pianist(); pianist.play(); } } |
랄라라 |
[소스 5.6] 추상화 예
그리고 다른 추상 클래스를 기반으로 파생 클래스 또한 추상 클래스로 정의할 수도 있습니다. 이 때 파생 클래스(이 또한 추상 클래스)에서는 기반 클래스의 추상 메서드를 꼭 정의할 필요는 없습니다. 추상 클래스의 상대적인 개념인 개체 인스턴스를 생성하는 것을 허용하는 클래스를 구상 클래스라고 부릅니다. 그리고 구상 클래스는 기반 클래스에서 약속한 모든 추상 메서드를 구현해야 합니다.
다음의 예는 BaseAClass 추상 클래스를 기반으로 파생 클래스 DerivedAClass(이 또한 추상 클래스)를 정의하고 이를 기반으로 파생한 DrivedClass(구상 클래스)를 정의한 예제입니다.
//최상위 추상 클래스 public abstract class BaseAClass { public abstract String GetString(); } |
//파생 클래스(추상 클래스) public abstract class DerivedAClass extends BaseAClass { public abstract int GetNum(); } |
//파생 클래스(구상 클래스) public class DerivedClass extends DerivedAClass { @Override public String GetString() { return "test"; } @Override public int GetNum() { return 0; } } |
//계층화 추상 클래스 진입 클래스 public class Program { public static void main(String[] args) { DerivedClass dc = new DerivedClass(); System.out.println(dc.GetString()); System.out.print(dc.GetNum()); } } |
test 0 |
[소스 5.7] 계층화 추상 클래스 예
프로그래밍에서 추상 클래스를 사용하는 목적은 다양할 수 있습니다. 특히 여러 종류의 파생 클래스의 공통적인 부분을 기반 클래스에 정의하여 같은 방법으로 사용한다는 상속과 다형성의 기본적인 목적이 제일 중요합니다. 특히 파생 클래스에서 제공할 메서드의 시그니쳐는 같지만 구체적인 구현이 다를 수 있을 때 추상 클래스에서 “이러한 기능을 제공하는 메서드를 정의할게요.”라고 약속하고 파생 클래스(구상 클래스)에서 이러한 약속을 구체적으로 구현하여 상속과 다형성의 장점을 보다 높일 수 있습니다.
'언어 자료구조 알고리즘 > 디딤돌 Java 언어 Part1' 카테고리의 다른 글
[Java] 6.1 열거형 (0) | 2016.11.15 |
---|---|
[Java] 6. 배열 및 기본 문법들 (0) | 2016.11.15 |
[Java] 5. 6 모든 클래스의 super 클래스인 Object (0) | 2016.11.14 |
[Java] 5.5 안전한 하향 캐스팅을 위한 예약어 instanceof (0) | 2016.11.14 |
[Java] 5.4 인터페이스 (0) | 2016.11.14 |
[Java] 5.2 다형성 (0) | 2016.04.04 |
[Java] 5. OOP 상속과 다형성, 5.1 상속 (0) | 2016.04.04 |
[Java] 4. 5 정적 멤버와 static 키워드와 상수화에 사용하는 final 키워드 (0) | 2016.04.04 |
[Java] 4.4 개체의 생성과 소멸 (0) | 2016.04.04 |
[Java] 4.3 중복 정의(Overloading) (0) | 2016.04.04 |