2024. 10. 3. 17:16ㆍSTUDY/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 |