interface는 인스턴스는 못 만들지만 참조는 만들 수 있다?

2024. 10. 3. 17:16STUDY/C#에 대한 다양한 공부

c#에서 인터페이스는 인스턴스를 만들 수 없지만 참조를 만들 수 있다.
즉, 인터페이스 자체로는 객체를 생성할 수 없지만, 인터페이스를 구현한 클래스의 객체는 인터페이스 타입의 변수를 할당하여 사용할 수 있다는 뜻이다.

이를 이해하기 위해 클래스와 인터페이스의 차이를 예제로 설명해보자.

public class Dog
{
    public void Bark()
    {
        Console.WriteLine("Woof!");
    }
}

Dog dog = new Dog();  // 클래스의 인스턴스를 생성
dog.Bark();  // 출력: Woof!

여기서 Dog 클래스는 Bark 메서드를 가지고 있으며, Dog 클래스를 사용해 dog 라는 객체를 만들고 Bark() 메서드를 호출할 수 있다. 즉 Dog 클래스를 직접 인스턴스를 만들 수 있다.

[인터페이스와 참조]

public interface IAnimal
{
    void MakeSound();
}

public class Dog : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("Woof!");
    }
}

IAnimal animal = new Dog();  // 인터페이스 참조를 이용하여 Dog 인스턴스를 할당
animal.MakeSound();  // 출력: Woof!
// IAnimal animal = new IAnimal();  // 오류: 인터페이스 자체로는 인스턴스를 만들 수 없음

IAnimal은 MakeSound() 라는 메서드를 가지고 있지만, 인터페이스 자체로는 인스턴스를 만들 수 없다.

하지만 Dog 클래스가 IAimal 인터페이스를 구현했기 때문에 Dog객체를 IAnimal 타입의 변수에 할당할 수 있다. 즉 인터페이스 참조를 통해 클래스 객체를 참조하고 그 객체의 메서드를 호출할 수 있다.

[그렇다면 왜 인터페이스는 인스턴스를 생성할 수 없는가?]

1.구현이 없기 때문에 : 인터페이스는 메서드 시그니처만 정의할 뿐, 그 메서드가 실제로 어떻게 동작하는지에 대한 구현을 제공하지 않는다. 따라서 인터페이스 자체는 메모리에서 실체화(즉, 인스턴스화)될 수 없다/
2. 다향성을 위해 : 인터페이스는 다향성을 구현하기 위한 도구이다. 여러 클래스가 같은 인터페이스를 구현할 수 있으며, 이 인터페이스를 참조하여 각 클래스의 구체적인 동작을 실행할 수 있다. 

이처럼 c#의 인터페이스는 인스턴스화할 수 없고, 이를 구현한 클래스의 객체를 인터페이스 타입으로 참조하는 방식으로 사용된다.

정리

  • 클래스는 인스턴스를 직접 생성할 수 있고, 생성된 객체를 이용해 클래스의 메서드를 호출할 수 있다.
  • 인터페이스는 인스턴스를직접 생성할 수 없지만 인터페이스를 구현한 클래스의 객체를 인터페이스 타입으로 참조할 수 있다. 이를 통해 해당 클래스가 구현한 메서드를 호출할 수 있다.

'STUDY > C#에 대한 다양한 공부' 카테고리의 다른 글

[C#] Array vs List vs ArrayList  (0) 2024.11.12
[C#] Class vs Struct  (0) 2024.11.06
[C#] Find() vs FirstOrDefault()  (1) 2023.09.05
.Any()  (0) 2023.09.05
[C#] List.Clear() vs List = null  (0) 2023.01.30