일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 프로그래머스
- AI Mathematics
- 코세라
- 데이터사이언스
- 알고리즘
- 부스트캠프
- Boostcamp AI
- 파이썬
- 클린코드 파이썬
- programmers
- 데이터 사이언스
- Java
- softeer
- Data Science
- string
- Python
- 문자열
- 데이터과학
- 티스토리챌린지
- IBM
- 깨끗한 코드
- Clean Code
- 오블완
- data science methodology
- 클린코드
- 자바
- Coursera
- 코딩테스트
- 코테
- 소프티어
- Today
- Total
떼닝로그
[C#] Virtual(가상) vs Abstract(추상) vs Interface(인터페이스) 본문
예전에는 이런 거 알아봐야 정말 필요가 있을까? 생각도 했지만
그것은 내가 지금껏 얼레벌레 개발을 해왔기 때문에 중요성을 못 느꼈다는 것을 최근에 깨달았다
실제 운용 중인 서비스(내가 하고 있는 걸 서비스라고 할 수 있을까 싶긴 하지만ㅋ)는 정말 방대하고
그를 위해 OOP나 여러 구조들이 유기적으로 들어가 있다.
이번에 개발을 진행하면서 아 내가 이런 점이 부족했구나 싶어 virtual, abstract, interface의 특징들을 구분해보고자 한다.
개발 천재...는 아니고 아무튼 개발왕이 되는 그날까지...!!
Virtual (가상) 키워드
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/virtual
- virtual 키워드는 메소드, 속성, 인덱서 또는 이벤트 선언을 수정할 때 사용한다.
- 파생 클래스에서 재정의(override)할 수는 있으나, 필수 사항은 아니다.
public class Vehicle
{
public virtual void Ride()
{
Console.WriteLine("앞으로 달린다=3=3");
}
}
public class Motorbike : Vehicle
{
public override void Ride()
{
Console.WriteLine("앞바퀴를 들고 달린다=3=3");
}
}
public class Car : Vehicle
{
public override void Ride()
{
Console.WriteLine("앞으로 부와앙 달린다=3=3");
}
}
Motorbike mb = new Moborbike();
Car lambo = new Car();
mb.Ride(); // 앞바퀴를 들고 달린다=3=3
lambo.Ride(); // 앞으로 부와앙 달린다=3=3
Abstract (추상) 키워드
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/abstract
- abstract를 사용함으로써 클래스가 자체에서 인스턴스화 되지 않고, 기본 클래스의 공통적인 정의로만 사용됨을 나타낸다.
- 추상으로 표시된 멤버는 파생 클래스의 멤버에 의해 필수적으로 구현되어야 한다.
- 추상 클래스는 인스턴스화 할 수 없다.
public class Vehicle
{
public abstract void Ride();
}
public class Motorbike : Vehicle
{
public override void Ride()
{
Console.WriteLine("앞바퀴를 들고 달린다=3=3");
}
}
public class Car : Vehicle
{
public override void Ride()
{
Console.WriteLine("앞으로 부와앙 달린다=3=3");
}
}
Motorbike mb = new Moborbike();
Car lambo = new Car();
mb.Ride(); // 앞바퀴를 들고 달린다=3=3
lambo.Ride(); // 앞으로 부와앙 달린다=3=3
Interface (인터페이스) 키워드
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/interface
https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/types/interfaces
- class 또는 struct의 멤버에 대한 기본 구현을 정의하며, 여러 소스의 동작을 클래스에 포함 가능
- abstract와 비슷하지만, 변수를 사용할 수 없음. property는 사용 가능
- 규칙에 따라 인터페이스 이름은 대문자 I로 시작한다
public interface IVehicle
{
void Ride();
string Name
{
get;
set;
}
}
class Car : IVehicle
{
private string name;
public override void Ride()
{
Console.WriteLine(name + "이(가) 앞으로 부와앙 달린다=3=3");
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
}
Car lambo = new Car();
lambo.Name = "람보르기니";
lambo.Ride(); // 람보르기니이(가) 앞으로 부와앙 달린다=3=3
Virtual(가상) vs Abstract(추상) vs Interface(인터페이스)
- virtual은 하나의 기능을 하는 완전한 메소드이며, 파생 클래스에서 재정의함으로써 기능을 추가하여 사용 가능하다.
- abstract는 여러 파생 클래스의 공통적인 정의를 위해 사용하며, 모든 파생 클래스에서 abstract 메소드에 대한 신규 정의가 필수적이다.
- interface는 abstract와 달리 멤버 변수를 사용할 수 없다. class 또는 struct의 멤버에 대한 기본 구현을 정의하며, 서로 다른 계층이나 타입이라도 같은 기능을 추가하고 싶을 때 사용한다.
'개발로그 > 기타 이론 정리' 카테고리의 다른 글
[Python] " is None " vs " == None " (1) | 2024.11.27 |
---|---|
[CS] 객체 지향 설계의 SOLID 규칙 (OO 5원칙) (2) | 2024.11.08 |
[CS] 객체 지향 프로그래밍의 특징 (2) | 2024.07.05 |
[Python] Python 기술 면접 대비 (2) | 2024.04.24 |