BackEnd/Java

[Java]다형성 인터페이스

Hojung7 2024. 8. 12. 14:37

1. 인터페이스란 ?

 

상수형 필드와 추상 메소드만을 작성할 수 있는 추상 클래스의 변형체

 

- 추상 클래스 처럼 객체 생성 X

 

- 부모 타입 참조 변수로 사용 O

 

→ 다형성 업캐스팅 + 동적 바인딩

 

2. 인터페이스의 효과

 

1) 클래스 간의 접점을 만들 수 있다.

 

2) 극한의 추상화를 통해서 유연한 코딩이 가능

 

3. 인터 페이스의 기본 작성법

 

필드 → 무조건 public static final(공유 가능 상수)

 

메서드 → 무조건 public abstract

(누구든지 상속 받아서 오버라이딩 가능)


 

#예제 <calculator 구현해보기>

 

[Calculator]

public interface Calculator {
	
	public static final double PI = 3.14;
	
	// public static final을 생략해도
	// 인터페이스에 작성된 필드는
	// 자동으로 public static final로 인식된다!!
	int MAX_NUM = 100_000_000;
	
	int MIN_NUM = -100_000_000;
	
	// 메서드는 무조건 public abstract
	
	/**
	 * 두 수의 합을 반환
	 * 단, 결과는 최대, 최소값을 넘을 수 없음
	 * @param a
	 * @param b
	 * @return a + b
	 */
	public abstract int plus(int a, int b);
	
	/**
	 * 두 수의 차를 반환
	 * 단, 결과는 최대, 최소값을 넘을 수 없음
	 * @param a
	 * @param b
	 * @return a - b
	 */
	public abstract int minus(int a, int b);

	/**
	 * 두 수의 곱을 반환
	 * 단, 결과는 최대, 최소값을 넘을 수 없음
	 * @param a
	 * @param b
	 * @return a * b
	 */
	public abstract int multi(int a, int b);
	
	/**
	 * 두 수를 나눈 몫을 반환
	 * 단, 결과는 최대, 최소값을 넘을 수 없음
	 * @param a
	 * @param b
	 * @return a / b
	 */
	public abstract int div(int a, int b);


	
	/**
	 * 두 수를 나눈 나머지를 반환
	 * 단, 결과는 최대, 최소값을 넘을 수 없음
	 * @param a
	 * @param b
	 * @return a % b 
	 */
	public abstract int mod(int a, int b);
	
   	 /**
   	  * a를 x만큼 거듭 제곱한 결과 반환
   	  * 단, 결과는 최대, 최소값을 넘을 수 없음
   	  * @param a
   	  * @param x
   	  * @return a^x
   	  */
	int pow(int a, int x);
	
	/**
	 * 원의 넓이를 반환
	 * 
	 * @param r
	 * @return 원의 넓이
	 */
	double areaOfCircle(double r);
	
	/**
	 * 전달 받은 점수를 2진수 String으로 변환하여 반환
	 * 
	 * @param num
	 * @return 2진수
	 */
	String toBinary(int num);
	
	/**
	 * 전달 받은 점수를 2진수 String으로 변환하여 반환
	 * 
	 * @param num
	 * @return 16진수
	 */
	String toHexadecimal(int num);

}

 

[상속 calculator]

package pkg3.dto;

// 인터페이스 상속 키워드 : implements (구현하다)

public class JHJCalculator implements Calculator{

	@Override
	public int plus(int a, int b) {
		int result = a + b;
		
		if (result > MAX_NUM) return MAX_NUM;
		if (result < MIN_NUM) return MIN_NUM;
		
		return result;
	}

	@Override
	public int minus(int a, int b) {
		int result = a - b;
		
		if (result > MAX_NUM) return MAX_NUM;
		if (result < MIN_NUM) return MIN_NUM;
		
		return result;
	}

	@Override
	public int multi(int a, int b) {
		int result = a * b;
		
		if (result > MAX_NUM) return MAX_NUM;
		if (result < MIN_NUM) return MIN_NUM;
		
		return result;
	}

	@Override
	public int div(int a, int b) {
		int result = a / b;
		
		if (result > MAX_NUM) return MAX_NUM;
		if (result < MIN_NUM) return MIN_NUM;
		
		return result;
	}

	@Override
	public int mod(int a, int b) {
		int result = a % b;
		
		if (result > MAX_NUM) return MAX_NUM;
		if (result < MIN_NUM) return MIN_NUM;
		
		return result;
	}

	@Override
	public int pow(int a, int x) {
		int result = (int) Math.pow(a, x);
		
		if (result > MAX_NUM) return MAX_NUM;
		if (result < MIN_NUM) return MIN_NUM;
		
		return result;
	}

	@Override
	public double areaOfCircle(double r) {
		double result = PI * r * r;
		
		if (result > MAX_NUM) return MAX_NUM;
		if (result < MIN_NUM) return MIN_NUM;
		
		return result;
	}

	@Override
	public String toBinary(int num) {

		if (num > MAX_NUM) Integer.toBinaryString(MAX_NUM);
		if (num < MIN_NUM) Integer.toBinaryString(MIN_NUM);
		return Integer.toBinaryString(num);
	}

	@Override
	public String toHexadecimal(int num) {
		if (num > MAX_NUM) Integer.toHexString(MAX_NUM);
		if (num < MIN_NUM) Integer.toHexString(MIN_NUM);
		return Integer.toHexString(num);
	}



}

 

[Run]

package pkg3.run;

import pkg3.dto.Calculator;
import pkg3.dto.JHJCalculator;

public class CalculatorRun {
		public static void main(String[] args) {
		
			Calculator c = new JHJCalculator();
			
			System.out.println( c.plus(90000000, 30000000) );
			System.out.println( c.minus(1, 30) );
			System.out.println( c.multi(7000, 123) );
			System.out.println( c.div(55555, 444) );
			System.out.println( c.mod(1234, 56) );
			System.out.println( c.pow(2, 16) );
			System.out.println( c.areaOfCircle(5.7) );
			System.out.println( c.toBinary(100) );
			System.out.println( c.toHexadecimal(100) );

	}
}

 

#결과

'BackEnd > Java' 카테고리의 다른 글

[Java]컬렉션(collection) Wrapper  (0) 2024.08.12
[Java]컬렉션  (0) 2024.08.12
[Java]다형성 추상클래스  (0) 2024.07.31
[Java]객체 배열(Object_Array)  (0) 2024.07.31
[Java]다형성 객체 타입에 따른 업/다운 캐스팅  (0) 2024.07.31