Java 인터페이스, 다형성

zzZ·2022년 5월 12일
0
post-thumbnail

Interface

다른 사람과 함께 작업을 할 때를 생각해보자
우리는 같이 작업하는 사람에게 더하기 클래스를 만들어 달라고 했을때 서로
원하는 형태의 메소드가 차이가 날 수 있다.
이를 방지하기 위해 자바에서는 인터페이스를 활용해 규격을 미리 정할 수 있다.

인터페이스의 이름은 클래스와 마찬가지로 첫 글자를 대문자로 사용한다.
~을 할 수 있는 의미의 형용사를 사용하기도 한다.

interface Caculable{
    int sum(int v1, int v2);
}
class RealCal implements Caculable{
    @Override
    public int sum(int v1, int v2) {
        return v1+v2;
    }
}
public class InterfaceApp {
    public static void main(String[] args) {
        RealCal r = new RealCal();
        System.out.println(r.sum(4,5));
    }
}

위의 코드에서 우리는 interface Caculabe를 통해 더하기 메소드의 규격만 정해주고 후에 RealCal 메소드를 통해서 실제로 구현을 한다 이때 Caculae의 인터페이스의 내용을 의미하는 키워드 implements를 활용한다.

인터페이스는 클래스를 상속하는것과 다르게 여러개를 적용할 수도 있다.
이 역시 클래스 내부에서 인터페이스들의 메소드를 모두 구현해야한다.

그리고 인터페이스에서 메소드뿐만 아니라 변수를 정의 할 수도 있다.(이때
변수는 반드시 초기화한다)

interface Calculable {
	double PI = 3.14;
	int sum(int v1, int v2);
}
interface Printable {
	void print();
}
class RealCal implements Calculable, Printable {

	public int sum(int v1, int v2) {
		return v1 + v2;
	}

	public void print() {
		System.out.println("this is RealCal!!!");
	}	
	
}

public class InterfaceApp {

	public static void main(String[] args) {
		RealCal c = new RealCal();
		System.out.println(c.sum(2, 1));
		c.print();
		System.out.println(c.PI);
	}

}

위 코드에서 RealCal 클래스는 인터페이스 Calculable, Printable을 의미하고 main함수에서 인터페이스의 변수PI를 쓴 것도 확인할 수 있음

다형성(Polymorphism)

프로그램 언어의 다형성(多形性, polymorphism; 폴리모피즘)은 그 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 프로그램 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다. 반댓말은 단형성(monomorphism)으로, 프로그램 언어의 각 요소가 한가지 형태만 가지는 성질을 가리킨다.다형성 위키백과

클래스의 인스턴스를 선언할 때 클래스의 이름으로 선언하지 않고 부모 클래스나 인터페이스의 이름으로 선언 할 수도 있다.
인스턴스를 만든 것이 부모 클래스, 인터페이스, 자식 클래스처럼 여러 형태임에도 자식 클래스의 인스턴스처럼 행동하는것을 다형성(Polymorphism)이라 한다.

interface Caculable{
    int sum(int v1, int v2);
}
interface Printable{
    void print();
}
class RealCal implements Caculable, Printable{
    @Override
    public int sum(int v1, int v2) {
        return v1+v2;
    }

    @Override
    public void print() {
        System.out.println("print메소드를 구현");
    }
}
public class InterfaceApp {
    public static void main(String[] args) {
        Printable r = new RealCal();
        System.out.println(r.sum(4,5));  //에러를 일으킴
        r.print();

    }
}

위의 코드에서 main함수를 보면 인스턴스 r을 인터페이스인 Printable로 선언한 것을 볼 수 있다. 따라서 아래의 sum메소드는 에러를 일으킴

0개의 댓글