2018년 9월 6일 목요일

java클래스의 다형성 - 2 인터페이스의 활용

이전시간에는 상속받은 클래스가 부모의 클래스타입으로 객체를 생성하여 제한해두는 클래스 다형성의 기능에대해서 알아보았다.

이번시간에는 인터페이스를 사용하여 다형성을 좀 더 효율적으로 이용하는 방법에 대해 살펴 보겠다.

우선 다형성은 기능을 제한한다고 했다. 다르게말하면, 상속받은 객체에 존재하는 기능에 대해 함부로 접근할 수 없다는 말이다. 그렇다면 인터페이스로 이용한다는 말은 무었일까?

바로 인터페이스는 클래스가 필요한 기능들을 하나씩 만들어두었다가 클래스를 생성시 구현할때 기능을 덧붙이는 역할을 하는데, 이때 해당 기능을 부여한 인터페이스는 자신이 만들어준 기능에만 접근할 수 있다. 즉 (인터페이스)자신이 구현하지 않은 다른 인터페이스 기능들에 대해서는 접근할 수 없다는 말이다.

예를들어, 우리는 스마트폰이라는 제품을 만들때 기능들을 생각해보자
수많은 기능이있지만 다음과같은 기능만 있다고 가정해보자.
1. 음악듣기
2. 게임하기
3. 전화하기
이 3가지 기능을 모아서 스마트폰을 생산하기위해서는 각각을 인터페이스로 구현하여 스마트폰이라는 클래스에 구현하면 된다.

다음예제를 통해 이해해보자
예제 - 자바의 다형성(인터페이스를 통한 스마트폰 클래스 구현)
  1. package org.java.project1.subproject3;
  2.  
  3. interface Mp3{
  4.     public void _mp3();
  5. }
  6. interface Game{
  7.     public void _game();
  8. }
  9. interface Call{
  10.     public void _call();
  11. }
  12. class SmartPhone implements Mp3, Game, Call{
  13.     String name;
  14.     public SmartPhone(String name) {
  15.         this.name = name;
  16.     }
  17.     public void _call(){
  18.         System.out.println(this.name + "은 전화 기능이 있습니다");
  19.     }
  20.     public void _game(){
  21.         System.out.println(this.name + "는(은) 게임 기능이 있습니다");
  22.     }
  23.     public void _mp3() {
  24.         System.out.println(this.name + "은 mp3 기능이 있습니다");
  25.     }
  26.     public static void execute(SmartPhone s) {
  27.         s._call();
  28.         s._game();
  29.         s._mp3();
  30.     }
  31. }
  32. public class Calculator{
  33.     public static void main(String[] args) {
  34.         SmartPhone obj_smart = new SmartPhone("스마트폰");
  35.         Mp3 obj_mp3 = new SmartPhone("mp3상품");
  36.         Game obj_game = new SmartPhone("닌텐도");
  37.         Call obj_call = new SmartPhone("공중전화기");
  38.        
  39.         SmartPhone.execute(obj_smart);
  40.         obj_mp3._mp3();
  41.         obj_game._game();
  42.         obj_call._call();
  43.     }
  44. }

▶ 실행결과
스마트폰은 전화 기능이 있습니다
스마트폰는(은) 게임 기능이 있습니다
스마트폰은 mp3 기능이 있습니다
mp3상품은 mp3 기능이 있습니다
닌텐도는(은) 게임 기능이 있습니다
공중전화기은 전화 기능이 있습니다

이제 이해가 되지않는가? 각 인터페이스는 자신이 구현한 기능들로만 접근이 가능하며 다른 기능들에는 접근하면 에러가 발생한다.

이제 우리는 필요한 접근만 함으로써 다른기능들에게 영향을 주지 않으며, 원하는 값만 불러 올 수 있다는 효율적인 클래스의 다형성을 알아보았다.



댓글 없음:

댓글 쓰기

[Java] N-I/O(Non-Blocking) 파일 읽기 쓰기 - GatheringByteChannel, ScatteringByteChannel, ByteBuffer 사용.

우리는 지금까지 다음과 같이 살펴보았다. 1.  InputStream / OutputStream : 입, 출력 스트림을 바이트로 처리하여 읽기, 쓰기. 2.  FileInputStream / FileOutputStream : 입, 출력 스트림을 ...