- 다음 내용은 Unity 퀘스트 모음집 \ 기초 문법 톺아보기 페이지를 학습하고 작성되었습니다.
- 이전 C# 사전 문법 기초와 중복되는 내용은 생략하였습니다.
상속 (Inheritance)
- 하위 클래스가 상위 클래스의 속성과 메서드를 물려받아 사용
- C#은 클래스 다중 상속 지원 X
- ex) Animal(상위 클래스), Brid(하위 클래스)
새는 동물의 특성을 상속 받아 걸을 수 있고, 조류 고유의 특성으로 날 수 있음
// 상속 사용 예제
Bird bird = new Bird();
bird.Eat();
bird.Fly();
class Animal
{
public void Eat()
{
Console.WriteLine("Walking...");
}
}
class Bird : Animal
{
public void Fly()
{
Console.WriteLine("Flying...");
}
}
인터페이스 (Interfaces)
- 클래스나 구조체가 구현해야 하는 속성과 메서드를 정의
- C#은 인터페이스 다중 상속 지원, 클래스 다중 상속 불가로 생기는 한계를 해소
- 인터페이스를 상속시 반드시 인터페이스에 정의된 내용 구현 필요
- ex) 동물 인터페이스의 소리를 내는 메서드
새 객체를 동물 인터페이스 상속받아 만들면 반드시 소리내는 메서드 구현 필요
// 인터페이스 사용 예제
IAnimal bird = new Bird();
bird.MakeSound();
interface IAnimal
{
void MakeSound();
}
class Bird : IAnimal
{
public void MakeSound()
{
Console.WriteLine("Tweet");
}
}
추상 클래스 (Abstract Classes)
- 여러 클래스의 공통된 부분을 모아 상속을 통해 활용하는 클래스
- 그 자체로 인스턴스화 될 수 없으며, 하위 클래스가 상속을 통해서만 사용 가능
- 추상 메서드는 추상 클래스에서만 허용
- 추상 메서드는 구현 내용이 없음
// 추상 클래스 사용 예제
Animal bird = new Bird();
bird.MakeSound();
abstract class Animal
{
public abstract void MakeSound();
}
class Bird : Animal
{
public override void MakeSound()
{
Console.WriteLine("Tweet");
}
}
가상 메서드 (Virtual Methods)
- 하위 클래스에서 재정의할 수 있는 상위 클래스의 메서드
- 상위 클래스에서는 virtual 키워드와 정의됨
- 하위 클래스에서 재정의할 때는 override 키워드 사용
// 가상 메서드 사용 예제
Animal bird = new Bird();
bird.MakeSound();
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal sound");
}
}
class Bird : Animal
{
public override void MakeSound()
{
Console.WriteLine("Tweet");
}
}
Random
- 의사 난수를 편리하게 생성하도록 지원하는 클래스
Random random = new Random();
// 0 ~ int.MaxValue 범위의 난수 생성
int randomNum = random.Next();
// 1 ~ 100 범위의 난수 생성
// 첫번째 인자는 포함, 두번째 인자 미포함
int randomNumInRange = random.Next(1, 101);
참고 : https://learn.microsoft.com/ko-kr/dotnet/api/system.random?view=net-8.0
문자열 처리 (String Manipulation)
문자열 길이
- Length 속성으로 문자열 길이 확인
string message = "Hello World";
int length = message.Length; // 11
문자열 비교
- Equals 메서드나 ==(같음 연산자) 사용해 동일한 문자열인지 검사
string str1 = "Hello";
string str2 = "World";
bool isEqual = str1 == str2; // false
isEqual = str1.Equals(str2); // false
문자열 추출
- Substring 메서드로 특정 범위의 문자열만 추출할 수 있음
- 첫번째 인자는 추출을 시작할 인덱스, 0보다 작거나 문자열 길이보다 크면 에러
- 두번째 인자는 추출할 문자의 개수, 생략하면 첫번째 인자의 인덱스부터 문자열 끝까지 추출
string message = "Hello, World!";
string hello = message.Substring(0, 5); // "Hello"
string world = message.Substring(7); // "World"
문자열 분할
- Split 메서드 사용해 문자열을 특정 구분자로 나눌 수 있음
- 한번에 여러 구분자로 구분 가능
string greetingMsg = "Hello,Ladies and Gentlemen";
string[] subs = greetingMsg.Split(' ', ',');
// subs[0] = Hello
// subs[1] = Ladies
// subs[2] = and
// subs[3] = Gentlemen
문자열 병합
- String.Concat, String Join 메서드나 +(더하기) 연산자 사용해 문자열 합칠 수 있음
string str1 = "Hello";
string str2 = "World";
string message = str1 + " " + str2; // "Hello World"
string[] words = { str1, str2 };
message = string.Concat(words); // HelloWorld
message = string.Join(" ", words); // Hello World
변수와 문자열의 활용
- String.Format 메서드 사용해 문자열 포맷팅 가능
- 문자열 보간(string interpolation)으로 가독성 향상
string name = "Jane";
int age = 50;
string message = String.Format("Name: {0}, Age: {1}", name, age); // "Name: Jane, Age: 50"
message = $"Name: {name}, Age: {age}"; // "Name: Jane, Age: 50"
문자열과 문자 배열 간 전환
- 문자열을 해체하여 각 문자가 저장된 배열로 전환 가능
- 문자들이 저장된 배열을 하나의 문자열로 통합 가능
string message = "Ask";
// 문자열 -> 문자의 배열
char[] chars = message.ToCharArray(); // { 'A', 's', 'k' }
// 문자의 배열 -> 문자열
string newMessage = new string(chars); // "Ask"
out과 ref (Pass by Reference)
- 메서드에 참조값으로 인자를 전달할 때 사용
- 데이터 값을 복사하여 넘기는 것이 아닌 주소를 참조하는 형식
- 메서드 외부의 변수를 내부에서 변경할 수 있으며, 호출이 종료되어도 변경된 값 유지
out
- 하나의 함수는 하나의 값만 반환 가능, out 키워드로 여러 개의 값을 반환하는 효과
- 헤더와 호출에 모두 out 키워드 필요
- 메서드 반환 전에 반드시 값 할당해야 함
- 호출시 초기화 필요 X
void DivideNum(int a, int b, out int x, out int y)
{
x = a / b;
y = a % b;
}
int quotient;
int remainder;
DivideNum(10, 3, out quotient, out remainder);
Console.WriteLine(quotient); // 3
Console.WriteLine(remainder); // 1
ref
- 로직상 메서드 외부의 값을 내부에서 접근해야 할 때 사용
- 메모리 할당 큰 클래스 활용 시 불필요한 메모리 복사 오버헤드 감소
- 메서드 호출시 변수 초기화 필요
void Decrement(ref int num)
{
num--;
}
int value = 3;
Decrement(ref value);
Console.WriteLine(value); // 2
is와 as (Type Checking and Casting)
- 안전한 타입 변환을 도와주는 역할
- 클래스 간 형변환시 실제로는 예외를 발생시키지만 문법상 문제가 없어 컴파일러 수준에서 에러 탐지 불가한 경우 존재
- 잘못된 형변환 시도하면 처리되지 않은 예외 발생
is (타입 확인)
- 객체가 특정 타입인지 확인
- 타입이 일치하면 true, 불일치하면 false 반환
object obj = "Hello";
if (obj is string)
{
Console.WriteLine("obj is a string");
}
else
{
Console.WriteLine("obj isn't a string");
}
as (타입 변환)
- 객체를 특정 타입으로 변환
- 변환 성공시 변환된 객체 반환, 실패시 null 반환
object obj = "Bello";
string str = obj as string;
if (str != null)
{
Console.WriteLine("Conversion successful: " + str);
}
else
{
Console.WriteLine("Conversion failed");
}'내일배움캠프 > IL' 카테고리의 다른 글
| [내배캠][Unity_6기][IL] C# 추가 학습 (0) | 2024.08.31 |
|---|---|
| [내배캠][Unity_6기][IL] C# 클래스와 객체 (0) | 2024.08.31 |
| [내배캠][Unity_6기][IL] C# 함수 (0) | 2024.08.30 |
| [내배캠][Unity_6기][IL] C# 배열 (0) | 2024.08.30 |
| [내배캠][Unity_6기][IL] C# 제어문 (0) | 2024.08.30 |