[ 유니티를 배우기 전, 기초 문법 톺아보기(2) ]
내일배움캠프 사전캠프의 과제를 해결하며 C#과 유니티의 예습을 하고 있다. 유니티를 본격적으로 배워나가기 전에 C# 문법에 익숙해지기에 좋은 시간이었다.
이 글은 달리기반을 학습하는 동안 사용하거나 알게 된 기억하고 싶은 문법들을 정리한 글이다.
목차
1. 클래스
2. 상속
3. 인터페이스
4. 인덱서
5. 추상 클래스
6. 가상 메서드
클래스 (Class)
클래스는 객체를 정의하는 데 사용되는 청사진이다. 클래스는 필드와 메서드를 포함하며 객체의 속성과 동작을 정의한다.
클래스 정의와 사용
namespace Example
{
class Person
{
// 필드(속성)
public string Name;
public int Age;
// 메서드(행동)
public void Introduce()
{
Console.WriteLine($"Hello, I'm {Name} and I am {Age} years old.");
}
}
internal class Program
{
static void Main(string[] args)
{
// 클래스 사용 예제
Person person = new Person();
person.Name = "Yeondoo";
person.Age = 26;
person.Introduce();
}
}
}
상속 (Inheritance)
상속은 한 클래스가 다른 클래스의 특성과 메서드를 물려받는 것을 의미한다. C#은 다중 상속을 지원하지 않는다.
자식 클래스는 부모 클래스의 변수에 접근하거나 메서드를 사용할 수 있다. 접근 범위를 제한하는 것이 접근제한자 이다.
상속 예제
namespace Example
{
class Animal
{
public void Eat()
{
Console.WriteLine("Eating...");
}
}
class Dog : Animal
{
public void Bark()
{
Console.WriteLine("Barking...");
}
}
internal class MyExample
{
static void Main()
{
// 상속 사용 예제
Dog dog = new Dog();
dog.Eat();
dog.Bark();
}
}
}
인터페이스 (Interfaces)
인터페이스는 클래스나 구조체가 반드시 구현해야 하는 메서드와 속성을 정의하는 데 사용한다. 인터페이스는 구현을 제공하지 않으며 설계 규격을 정의한다. C#에서는 인터페이스를 다중 상속할 수 있다.
구현할 때는 인터페이스의 모든 멤버를 구현해야 한다.
인터페이스 정의와 구현
namespace Example
{
interface IAnimal
{
void MakeSound();
}
class Dog : IAnimal
{
public void MakeSound()
{
Console.WriteLine("Bark");
}
}
internal class MyExample
{
static void Main()
{
// 인터페이스 사용 예제
IAnimal animal = new Dog();
animal.MakeSound();
}
}
}
인터페이스의 모든 멤버를 구현? 필드(변수)는 어떻게 구현하라는 걸까?
1. 인터페이스는 필드를 가질 수 없다.
변수를 가질 수 없다.!!
public interface IExample
{
string name; // ❌ 컴파일 오류: 인터페이스는 필드를 포함할 수 없습니다.
}
2. 속성 구현과 변수를 연결해야 한다.
인터페이스에 속성이 선언되면, 이를 구현하는 클래스는 속성과 연결된 데이터를 저장하기 위해 필드(변수)를 정의해야 한다.
- 인터페이스 예제
public interface IExample
{
string Name { get; set; } // 속성 정의
}
- 클래스 구현 예제
public class ExampleClass : IExample
{
// 클래스에서 변수(필드)를 정의
private string _name;
// 속성을 구현하면서 필드와 연결
public string Name
{
get => _name; // 필드 값을 반환
set => _name = value; // 필드 값을 설정
}
}
3. 인터페이스에 포함될 수 있는 멤버 종류
- 메서드
- 속성
- 이벤트
- 인덱서
인덱서 (Indexer)
C#에서 인덱서는 객체를 배열처럼 다룰 수 있도록하는 특별한 속성이다.
배열의 인덱스를 사용하는 방식처럼 객체의 데이터에 접근할 수 있다. 인덱서는 클래스, 구조체, 인터페이스 내에서 정의되며 this 키워드를 사용하여 구현된다.
기본 구조
public class 클래스이름
{
private 데이터타입[] 배열 = new 데이터타입[크기];
public 데이터타입 this[int index]
{
get { return 배열[index]; }
set { 배열[index] = value; }
}
}
일반적인 방법으로 객체의 배열에 참조
인덱서가 생소하게 느껴지지만 일반적인 방법과 비교해보니 그나마(?) 설득력있게 느껴졌다.
class Data
{
public int[] Values = new int[10];
}
Data data = new Data();
data.Values[0] = 10; // 배열을 직접 참조
Console.WriteLine(data.Values[0]); // 출력: 10
↓
인덱서로 배열에 접근
class Data
{
private int[] values = new int[10];
public int this[int index]
{
get { return values[index]; }
set { values[index] = value; }
//get => values[index];
//set => values[index] = value;
}
}
Data data = new Data();
data[0] = 10; // 인덱서를 통해 접근
data[1] = 20; // 인덱서를 통해 접근
Console.WriteLine(data[0]); // 출력: 10
(실제로는 인덱서를 많이 사용하는지, 주로 어떤 상황에 사용하는지 궁금해졌다..)
추상 클래스 (Abstract Classes)
추상 클래스는 인스턴스화될 수 없고, 상속을 통해서만 사용될 수 있다. 기본 구현과 추상화를 동시에 제공할 수 있다.
추상 메서드를 포함할 수 있다.
- abstract 키워드 사용 : 클래스 선언에 abstract를 붙여 추상 클래스로 만든다.
- 추상 멤버 : abstract로 선언된 메서드나 속성은 구현을 제공하지 않는다. 파생 클래스에서 반드시 구현해야 한다.
- 일반 메서드, 필드, 속성도 포함할 수 있다.
- 인스턴스화 불가능하다.
public abstract class 클래스이름
{
// 추상 메서드 (구현 없음)
public abstract void 추상메서드();
// 일반 메서드 (구현 있음)
public void 일반메서드()
{
Console.WriteLine("일반 메서드입니다.");
}
}
예제
abstract class Animal
{
// 일반 속성
public string Name { get; set; }
// 추상 메서드
public abstract void MakeSound();
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine($"{Name} : Bark");
}
}
// 추상 클래스 사용 예제
Animal animal = new Dog();
animal.Name = "CuteDog";
animal.MakeSound();
가상 메서드 (Virtual Methods)
가상 메서드는 자식 클래스에서 재정의할 수 있는 부모 클래스의 메서드이다.
- 키워드 : virtual, override
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal sound");
}
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Bark");
}
}
// 가상 메서드 사용 예제
Animal animal = new Dog();
animal.MakeSound();
다른 글 보러가기
[C#] 내일배움캠프 사전캠프 - C# 사전 문법 기초 (is, as, Convert, Parse, TryParse, 접근제한자)
[Stage3. 각자 속도에 맞춰 나아가기] Stage3에서는 C# 기초를 다져볼 수 있다. 걷기반과 달리기 반으로 나눠서 단계별 학습이 권장된다.나는 C#을 배우는 것은 처음이기 때문에 걷기반부터 시작해서
ramenkirby.tistory.com
[C#] 기초 문법 톺아보기 (1) - 입력과 출력, 배열, 필드와 속성
[ 유니티를 배우기 전, 기초 문법 톺아보기(1) ]내일배움캠프 사전캠프의 과제를 해결하며 C#과 유니티의 예습을 하고 있다. 유니티를 본격적으로 배워나가기 전에 C# 문법에 익숙해지기에 좋은
ramenkirby.tistory.com
'공부 기록 > C#' 카테고리의 다른 글
[C#/TIL] C# 문법 종합반 중간지점에서 배운 내용 정리 (3) | 2025.01.31 |
---|---|
[C#/TIL] 진입점 Main 메서드에 대한 이해, 문자열 처리 메서드 , C# switch 조건에 문자열 가능 (5) | 2025.01.27 |
[C#] 기초 문법 톺아보기 (1) - 입력과 출력, 배열, 필드와 프로퍼티 (0) | 2025.01.08 |
[C#] 숫자 야구 게임 만들기 (달리기반 Lv3) (2) | 2025.01.07 |
[C#] 행맨 게임 만들기 (달리기반 Lv3) (0) | 2025.01.06 |