[프로그래밍] 쉬운 인터패이스 설명 – interface와 class 비교

interface는 클래스와 비슷하여 c#의 경우 type system 항목에 같이 설명되어 있다.

아래의 예제는 인터패이스 안에 하나의 메떠드를 선언한 뒤 두 개의 서로 다른 내용으로 실행되게 하는 거다. 클래스 안에서는 메떠드를 선언하고 실행부까지 코딩할 수 있지만 인터패이스에선 그렇게 할 수 없다. 대신 클래스가 인터패이스를 상속하여 자유롭게 실행부를 코딩할 수 있다. 심지어 여러 인터패이스들을 동시에 상속할 수도 있다. 클래스는 부모 클래스의 메떠드를 고스란히 이어 받은 뒤 거기에 추가만 할 수 있지만 인터패이스는 메떠드의 이름만 상속할 뿐 그 내용은 자유롭게 구현할 수 있다. 인터패이스는 클래스보다 느슨하고 자유롭다.

interface ITestInterface
{
    int testMethod(int int1);
}

class TestClass1 : ITestInterface
{
    public int testMethod(int int1)
    {
        return int1 + 1;
    }
}

class TestClass2 : ITestInterface
{
    public int testMethod(int int1)
    {
        return int1 + 2;
    }
}

private void button1_Click(object sender, EventArgs e)
{
    ITestInterface testInterface = new TestClass1();

    button1.Text = testInterface.testMethod(0).ToString(); // 1
}

private void button2_Click(object sender, EventArgs e)
{
    ITestInterface testInterface = new TestClass2();

    button2.Text = testInterface.testMethod(0).ToString(); // 2
}

private void button3_Click(object sender, EventArgs e)
{
    TestClass2 testClass2 = new();

    button3.Text = testClass2.testMethod(0).ToString(); // 2
}

버튼 1과 2처럼 인터패이스를 상속한 클래스를 이용할 땐 클래스 아닌 인터패이스 변수를 만들고 클래쓰 인스턴스를 만들어 인터패이스 변수에 넣어 쓰는 게 정석이다. 이렇게 하면 인터패이스를 상속하되 서로 다르게 실행부가 구현된 여러 클래스들을 인터패이스 변수를 그대로 둔 채 수시로 바꾸어 넣어 쓸 수 있다. 버튼 3처럼 그냥 클래스 변수를 만들어 써도 되지만 인터패이스를 쓸 때처럼 하나의 변수에 이것저것 바꿔 가면 넣어 쓸 수는 없고 매번 새로 클래스 변수를 만들어야 한다.