yoni
[27][OOP] 추상 메소드, 추상 클래스(Abstract Class), 인터페이스(Interface) 본문
java of educational by contents
[27][OOP] 추상 메소드, 추상 클래스(Abstract Class), 인터페이스(Interface)
yoni-1117 2018. 12. 9. 14:30이거 수업 안들음 나중에복습할것
[01] 추상 메소드, 추상 클래스(Abstract Class), @Override 에노테이션
1) 추상 메소드
- 기능이 다양하게 구현되거나 시간의 흐름에따라 변경이될 가능성이 있는 메소드
- 기능을 구현하지 않고 메소드 Stub만 구현한 메소드. '{, }' 생략
예) public abstract void fall();
- 메소드가 기능이 결정이 되었으나 구현을 하지 않은 경우로 추후
어떤 형태로든 구현할 예정인 메소드
- 실제 구현은 나중에 함으로 기능을 설계하는 것에 중심을 둠.
어떤 형태로든 구현할 예정인 메소드
- 실제 구현은 나중에 함으로 기능을 설계하는 것에 중심을 둠.
2) 추상 클래스
- 일반 메소드와 추상 메소드가 같이 혼합되어 있는 class 입니다.
- 일반 메소드와 추상 메소드가 같이 혼합되어 있는 class 입니다.
- 추상 클래스안의 추상메소드는 하위(자식, extends) 클래스에서 구현을해야 합니다.
구현을 하지 않으면 자식 클래스도 추상클래스가되어 객체를 만들 수 없습니다.
- Annotation(주석): @Override - 추상 메소드를 구현하거나
부모 클래스의 일반 메소드를 다시 구현했다는 표시.
부모 클래스의 일반 메소드를 다시 구현했다는 표시.
예)
public abstract class MySQL { <-- 추상 클래스 선언
public abstract void execute(); <-- 추상 메소드 선언
.....
.....
3) 다형성(Polymorphism)
- 일반적으로 객체 생성과 할당되는 타입은 동일해야하나 좌변의 타입과
우변의 타입이 다릅니다.
Java java = new Java();
Object oop = new Java();
OOP oop = new Java();
OOP oop = new JSP();
- 추상 클래스는 상속에 기반한 기술로 부모 클래스는 자식 클래스를
할당 받을 수 있습니다.
- 추상 클래스를 구현한 자식 클래스는 필요에 따라 자유롭게
부모 클래스(Airline)에 할당이 가능합니다.
예) Airline air = new Singapore();
3) 다형성(Polymorphism)
- 일반적으로 객체 생성과 할당되는 타입은 동일해야하나 좌변의 타입과
우변의 타입이 다릅니다.
Java java = new Java();
Object oop = new Java();
OOP oop = new Java();
OOP oop = new JSP();
- 추상 클래스는 상속에 기반한 기술로 부모 클래스는 자식 클래스를
할당 받을 수 있습니다.
- 추상 클래스를 구현한 자식 클래스는 필요에 따라 자유롭게
부모 클래스(Airline)에 할당이 가능합니다.
예) Airline air = new Singapore();
Airline air = new Asiana();
4) 다형성의 분석예
4) 다형성의 분석예
- Payment pay = new Pay2015();
- 부모 클래스(Payment)는 자식 클래스(Pay2015)를 할당 받을 수 있습니다.
- 부모 클래스(Payment)는 자식 클래스(Pay2015)를 할당 받을 수 있습니다.
- pay 객체의 타입은 Payment가 됩니다.
- 메모리상에 실제 가지고있는 데이터는 new를 이용하여 생성한 Pay2015 class 입니다.
- 자식 클래스의 메소드를 호출하려면, 자식 타입으로 형변환하거나,
부모 클래스의 추상 메소드를 구현한 경우만 가능합니다.
- 자식 클래스의 메소드를 호출하려면, 자식 타입으로 형변환하거나,
부모 클래스의 추상 메소드를 구현한 경우만 가능합니다.
1. 추상 클래스 실습
[실행 화면]
현금 결재
신용 카드 결재 2.5%
휴대폰 결재 300 원
-------------------------
현금 결재
신용 카드 결재 1.7%
휴대폰 결재 200 원
-------------------------
현금 결재
신용 카드 결재 1.3%
휴대폰 결재 100 원
-------------------------
현금 결재
신용 카드 결재 종량제로 결제 방법 변화
휴대폰 결재 50원
===============
현금 결재
신용 카드 결재 2.5%
휴대폰 결재 300 원
-------------------------
현금 결재
신용 카드 결재 1.7%
휴대폰 결재 200 원
-------------------------
현금 결재
신용 카드 결재 1.3%
휴대폰 결재 100 원
-------------------------
현금 결재
신용 카드 결재 종량제로 결제 방법 변화
휴대폰 결재 50원
-------------------------
▷ oop4.Payment.java
-----------------------------------------------------------------------------------
.....
package oop4;
public abstract class Payment {
public void cach() {
System.out.println("현금 결재");
}
public abstract void card(); // 추상 메소드
public abstract void mobile(); // 추상 메소드
}
-----------------------------------------------------------------------------------
▷ oop4.Pay2015.java
▷ oop4.Pay2015.java
-----------------------------------------------------------------------------------
package oop4;
public class Pay2015 extends Payment {
.....
.....
}
-----------------------------------------------------------------------------------
▷ oop5.Pay2016.java
▷ oop5.Pay2016.java
-----------------------------------------------------------------------------------
package oop5;
public class Pay2016 extends Payment {
.....
}
-----------------------------------------------------------------------------------
▷ oop4.Pay2017.java
-----------------------------------------------------------------------------------
package oop4;
public class Pay2017 extends Payment {
@Override
public void card() {
System.out.println("신용 카드 결재 1.3%");
}
@Override
public void mobile() {
System.out.println("휴대폰 결재 100 원");
}
}
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
▷ oop4.AbsTest.java▷ oop4.Pay2018.java
-----------------------------------------------------------------------------------
package oop4;
public class Pay2018 extends Payment {
@Override
public void card() {
System.out.println("신용 카드 결재 종량제로 결제 방법 변화");
}
@Override
public void mobile() {
System.out.println("휴대폰 결재 50원");
}
}
-----------------------------------------------------------------------------------
package oop4;
public class AbsTest {
public static void main(String[] args) {
// Payment payment = new Payment();
.....
}
}
-----------------------------------------------------------------------------------
[03] Interface의 이해와 필요성
- Interface 기반의 구현은 인터페이스를 구현한 다양한 클래스의 객체를 할당받을 수 있어
변경 및 옵션에 따른 관리가 수월합니다.
- 추상 클래스와 같은 목적을 가지고 있으나 메소드가 전부 추상입니다.
- 개발자가 구현해야하는 기능을 설계자가 명시할 때 사용합니다.
- 다양한 기능으로 구현이 될때 사용합니다.
- 인터페이스는 Abstract class(추상 클래스)와 같이 객체 생성이 불가능하며,
Interface를 구현한 클래스의 객체만 할당 받을 수 있으며,
이 원리는 추상 클래스와 동일합니다.
Interface를 구현한 클래스의 객체만 할당 받을 수 있으며,
이 원리는 추상 클래스와 동일합니다.
- 인터페이스 구현은 implements(구현)를 사용.
예)
class Android implements Smartphone{
[실행 화면]
The mobile is Android.
The mobile is Smartphone.
Google 맵 지원
사원증 기능 지원
-------------------------
The mobile is IPhone.
Apple 맵 지원
교통 카드 지원
-------------------------
The phone is Phone.
The phone is not Smartphone.
Android 전화
Android 문자
IPhone 전화
IPhone 문자
1. Interface
▷ oop4.Smartphone.java
▷ oop4.Smartphone.java
-----------------------------------------------------------------------------------
package oop4;
public interface Smartphone {
// public abstract void map(); // 추상 메소드
// public abstract void nfc(); // 추상 메소드
public void map(); // 추상 메소드, abstract 생략 가능
public void nfc(); // 추상 메소드, abstract 생략 가능
// public void print() { // 멤버 메소드 선언 불가능
//
// }
}
-----------------------------------------------------------------------------------
2. Interface 구현 class
2. Interface 구현 class
▷ oop4.Android.java
-----------------------------------------------------------------------------------
package oop4;
public class Android implements Smartphone {
.....
}
-----------------------------------------------------------------------------------
3. Interface 구현 class
3. Interface 구현 class
▷ oop4.IPhone.java
-----------------------------------------------------------------------------------
package oop4;
public class IPhone implements Smartphone {
@Override
public void map() {
System.out.println("Apple 맵 지원");
}
@Override
public void nfc() {
System.out.println("교통 카드 지원");
}
}
-----------------------------------------------------------------------------------
4. Concrete class
- 구현된 기능이 앞으로 변경되지 않을 것이라고 가정한 클래스
-----------------------------------------------------------------------------------
5. 사용
4. Concrete class
- 구현된 기능이 앞으로 변경되지 않을 것이라고 가정한 클래스
▷ oop4.Phone.java
-----------------------------------------------------------------------------------
package oop4;
public class Phone {
public void call() {
System.out.println("전화");
}
public void sms() {
System.out.println("문자");
}
}
5. 사용
▷ oop4.InterTest.java
-----------------------------------------------------------------------------------
package oop4;
public class InterTest {
public static void main(String[] args) {
// Smartphone smartphone = new Smartphone();
.....
}
}
-----------------------------------------------------------------------------------
'java of educational by contents' 카테고리의 다른 글
[29][Network] Network(네트워크), Socket, ServerSocket (0) | 2018.12.09 |
---|---|
[28][OOP] 접근 한정자(Access Modifier, 제한자), Final 변수 (0) | 2018.12.09 |
[26][OOP] Static method, Wrapper class(Integer...), Scanner class (0) | 2018.12.08 |
[25][IO] method 기반 refactoring, 데이터 파일을 읽어 성적, 연봉, 단풍 여행 처리 시스템 제작 ★ (0) | 2018.12.08 |
[24][IO] trim() 메소드, 급여 처리 시스템 제작, StringTokenizer class의 사용 ★ (0) | 2018.12.08 |
Comments