ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 인터페이스(interface)
    Java 2023. 9. 4. 15:46

    인터페이스

    • 구현된 것이 아무것도 없는 밑 그린만 있는 기본 설계도

    특징

    • 멤버변수, 일반 구현 메서드를 가질 수 없다
    • 오직 추상 메서드와 상수만 멤버로 가질 수 있음
    • 인터페이스는 표준, 약속(강제성 O), 규약을 의미
    • 추상클래스보다 추상화가 더 높다 - 기능적인 측면으로 많이 활용

     

    인터페이스 활용

    인터페이스 생성

    • interface 키워드를 통해 사용
    • 상수만을 가질수 있다 (멤버변수 사용불가)
    • 인스턴스 메서드를 가질 수 없다
    • 인터페이스 안에서 선언하는 기능은 public abstract이기 때문에 생략 가능
    public interface RemoteController {
    	public static final int SERIAL_NUMBER = 100; // 상수
    	
    	public abstract void turnOn(); // 추상 메서드
    	
    	void turnOff(); 
    	
    } // end of interface
    
    public interface SoundEffect {
    
    	// 인터페이스 안에 추상 메서드는 
    	// 가능한 작게 설계 하는것이 좋다. 
    	public abstract void notification();
    }

     부모 클래스 생성

    • 추상클래스와 인터페이스 둘 다 활용해서 자식클래스를 사용가능
    public abstract class HomeAppliances {
    	
    	int width;
    	int height; 
    	String color; 
    	
    	public abstract void turnOn();
    	
    	public abstract void turnOff();
    }

    자식 클래스 생성

    • 인터페이스 2개를 구현하며 부모클래스를 상속받는 클래스
    public class Refrigerator 
    	extends HomeAppliances 
    	implements RemoteController, SoundEffect {
    
    	
    	@Override
    	public void turnOn() {
    		System.out.println("냉장고에 전원을 켭니다.");
    	}
    
    	@Override
    	public void turnOff() {
    		System.out.println("냉장고에 전원을 끕니다.");
    	}
    
    	@Override
    	public void notification() {
    		System.out.println("띠리리~~링~**");
    	}
    	
    }
    • RemoteController 인터페이스를 구현하며 부모클래스를 상속받는 클래스
    public class Television 
    	extends HomeAppliances implements RemoteController {
    
    	@Override
    	public void turnOn() {
    		System.out.println("티비 전원을 켭니다.");
    	}
    
    	@Override
    	public void turnOff() {
    		System.out.println("티비 전원을 끕니다.");
    	}
    }
    • 인터페이스 2개를 모두 구현하며 부모클래스는 상속받지 않는 클래스
    public class ToyRobot 
    	implements RemoteController, SoundEffect {
    	
    	int width; 
    	int height; 
    	String color; 
    	String name; 
    	
    	@Override
    	public void turnOn() {
    		System.out.println("장난감 로봇을 켭니다.");
    	}
    	
    	@Override
    	public void turnOff() {
    		System.out.println("장난감 로봇을 끕니다.");
    	}
    
    	@Override
    	public void notification() {
    		System.out.println("뚜두두르루~~~");
    	}
    	
    }

    메인 클래스

    • 코드를 좀 더 유연하고 확장성 있게 설계할 때 표준,규약,규칙을 지켜서 설계하고 싶다면 인터페이스 활용
    public class MainTest1 {
    
    	public static void main(String[] args) {
    
    		HomeAppliances appliances1 = new Television();
    		HomeAppliances appliances2 = new Refrigerator();
    		// HomeAppliances appliances3 = new ToyRobot();
    		
    		RemoteController controller1 = new Television();
    		RemoteController controller2 = new Refrigerator();
    		RemoteController controller3 = new ToyRobot();
    		
    		RemoteController[] remoteControllers 
    							= new RemoteController[3];
    		
    		remoteControllers[0] = new Television();
    		remoteControllers[1] = new Refrigerator();
    		remoteControllers[2] = new ToyRobot();
    		
    		for (int i = 0; i < remoteControllers.length; i++) {
    			//RemoteController remoteController = remoteControllers[i];
    			remoteControllers[i].turnOn();;
    		}
    		
    		System.out.println("----------------------------------");
    		for (int i = 0; i < remoteControllers.length; i++) {
    			//RemoteController remoteController = remoteControllers[i];
    			remoteControllers[i].turnOff();
    		}
    	}
    
    }

    'Java' 카테고리의 다른 글

    [JPA] 스프링 부트 JPA 기본 설정  (0) 2023.12.15
    [QueryDSL] QueryDSL 스프링부트 3.0 이상 버전 환경 설정  (1) 2023.12.15
    [Java] 템플릿 메서드  (0) 2023.09.04
    [Java] 추상 클래스  (0) 2023.09.04
    [Java] 다형성  (0) 2023.08.30
Designed by Tistory.