이번시간에는 인터페이스를 사용하여 다형성을 좀 더 효율적으로 이용하는 방법에 대해 살펴 보겠다.
우선 다형성은 기능을 제한한다고 했다. 다르게말하면, 상속받은 객체에 존재하는 기능에 대해 함부로 접근할 수 없다는 말이다. 그렇다면 인터페이스로 이용한다는 말은 무었일까?
바로 인터페이스는 클래스가 필요한 기능들을 하나씩 만들어두었다가 클래스를 생성시 구현할때 기능을 덧붙이는 역할을 하는데, 이때 해당 기능을 부여한 인터페이스는 자신이 만들어준 기능에만 접근할 수 있다. 즉 (인터페이스)자신이 구현하지 않은 다른 인터페이스 기능들에 대해서는 접근할 수 없다는 말이다.
예를들어, 우리는 스마트폰이라는 제품을 만들때 기능들을 생각해보자
수많은 기능이있지만 다음과같은 기능만 있다고 가정해보자.
1. 음악듣기
2. 게임하기
3. 전화하기
이 3가지 기능을 모아서 스마트폰을 생산하기위해서는 각각을 인터페이스로 구현하여 스마트폰이라는 클래스에 구현하면 된다.
다음예제를 통해 이해해보자
예제 - 자바의 다형성(인터페이스를 통한 스마트폰 클래스 구현)
- package org.java.project1.subproject3;
- interface Mp3{
- public void _mp3();
- }
- interface Game{
- public void _game();
- }
- interface Call{
- public void _call();
- }
- class SmartPhone implements Mp3, Game, Call{
- String name;
- public SmartPhone(String name) {
- this.name = name;
- }
- public void _call(){
- System.out.println(this.name + "은 전화 기능이 있습니다");
- }
- public void _game(){
- System.out.println(this.name + "는(은) 게임 기능이 있습니다");
- }
- public void _mp3() {
- System.out.println(this.name + "은 mp3 기능이 있습니다");
- }
- public static void execute(SmartPhone s) {
- s._call();
- s._game();
- s._mp3();
- }
- }
- public class Calculator{
- public static void main(String[] args) {
- SmartPhone obj_smart = new SmartPhone("스마트폰");
- Mp3 obj_mp3 = new SmartPhone("mp3상품");
- Game obj_game = new SmartPhone("닌텐도");
- Call obj_call = new SmartPhone("공중전화기");
- SmartPhone.execute(obj_smart);
- obj_mp3._mp3();
- obj_game._game();
- obj_call._call();
- }
- }
▶ 실행결과
스마트폰은 전화 기능이 있습니다
스마트폰는(은) 게임 기능이 있습니다
스마트폰은 mp3 기능이 있습니다
mp3상품은 mp3 기능이 있습니다
닌텐도는(은) 게임 기능이 있습니다
공중전화기은 전화 기능이 있습니다
이제 이해가 되지않는가? 각 인터페이스는 자신이 구현한 기능들로만 접근이 가능하며 다른 기능들에는 접근하면 에러가 발생한다.
이제 우리는 필요한 접근만 함으로써 다른기능들에게 영향을 주지 않으며, 원하는 값만 불러 올 수 있다는 효율적인 클래스의 다형성을 알아보았다.
댓글 없음:
댓글 쓰기