다형성
- 여러 모습을 갖는 것을 말합니다.
- 객체지향에서는 한 객체가 여러 타입을 갖는 것을 의미합니다.
- 이 의미로는 한 객체가 여러 타입의 기능을 제공할 수 있습니다.
- 타입 상속으로 다형성을 구현합니다.
추상화
- 데이터나 프로세스 등을 의미가 비슷한 개념이나 의미 있는 표현으로 정의하는 과정
- 추상 타입을 이용한 프로그래밍
Notifier notifer = getNotifier(...);
notifier.notify(someNoti);
( 어떤 notifer 에 따라 다른 notify가 적용된다 )
- 추상 타입은 구현을 감춤 ( 기능의 구현이 아닌 의도를 더 잘 드러냄 )
추상화, 다형성 예제
KakaoSender 와 SmsSender 의 공통점을 모아둔 abstract(추상) 클래스 인 ContentSender 클래스
package content;
public abstract class ContentSender {
String title;
String nm;
public ContentSender(String title, String nm) {
super();
this.title = title;
this.nm = nm;
}
//추상메서드 --> 상속을 통해서 반드시 재정이 되어야지만 비로소 인스턴스를 생성할 수 있다.
public abstract void sendMsg(String recipient);
}
ContentSender을 상속(extends) 받은 KaKaoSender 클래스
package content;
public class KakaoSender extends ContentSender {
String content;
public KakaoSender(String title, String nm, String content) {
super(title, nm);
this.content = content;
}
@Override
public void sendMsg(String recipient) {
System.out.println("전송매체 = " + "kakao");
System.out.println("제목=" + this.title);
System.out.println("이름=" + this.nm);
System.out.println("내용=" + this.content);
System.out.println("받는 사람=" + recipient);
}
}
ContentSender을 상속(extends) 받은 SmsSender 클래스
package content;
public class SmsSender extends ContentSender{
String content;
public SmsSender(String title, String nm, String content) {
super(title, nm);
this.content = content;
}
@Override
public void sendMsg(String recipient) {
System.out.println("전송매체 = " + "SMS");
System.out.println("제목=" + this.title);
System.out.println("이름=" + this.nm);
System.out.println("내용=" + this.content);
System.out.println("받는 사람=" + recipient);
}
}
코드를 테스트하는 ContentTest 클래스
package content;
public class ContentTest {
public static void main(String[] args) {
ContentSender cs1 = new SmsSender("약속 공지","노경준","4월 20일 저녁 7시까지 공원으로 오세요"); // ContentSender 객체에 LetterSender 객체를 넣음 (다형성)
cs1.sendMsg("임창규");
System.out.println();
SmsSender ls = new SmsSender("문자 받았습니다.","임창규","알겠습니다.");
ls.sendMsg("노경준");
System.out.println();
ContentSender cs2 = new KakaoSender("안녕","송시현","ㅎㅇ"); // ContentSender 객체에 KakaoSender 객체를 넣음 (다형성)
cs2.sendMsg("송유현");
}
}
코드 실행 결과
어떤 Sender 에 따라서 전송매체가 달라지는 예제 였습니다.
Reference
'객체 지향 프로그래밍 입문' 카테고리의 다른 글
[객체 지향 프로그래밍 입문] 캡슐화 (0) | 2022.04.16 |
---|---|
[객체 지향 프로그래밍 입문] 객체 (0) | 2022.04.13 |
댓글