[C#] 12. 클래스 (Class)
클래스는 C# 프로그래밍의 기본 단위로 새로운 개채(실체)를 생성하는 설계도(청사진) 역할을 한다. 예를 들어 자동차라는 개체(object)를 만들려면 자동차 설계도가 필요합니다. 프로그래밍도 마찬가지로 설계도가 필요한데, 이 역할을 하는 것이 클래스(class)입니다.
즉, 클래스는 개체를 생성하는 틀(템플릿)이며, 더 간단히 말하자면 ‘무엇인가를 만들어 내는 설계도’ 입니다.
클래스 선언하기
//클래스 선언 형태
public class 클래스이름
{
//클래스 내용 구현
}
클래스 레벨의 메서드 호출하기
using System;
class ClassNote
{
static void Run()
{
Console.WriteLine("ClassNote의 Run 메서드");
}
static void Main()
{
Run(); // 1. 메서드 레벨: 같은 클래스의 메서드 호출
ClassNote.Run(); // 2. 클래스 레벨: 클래스, 메서드(); 형태로 호출
}
}
클래스가 같은 메서드를 호출할 때는 1번 방식을 사용하지만, 다른 클래스에 있는 메서드는 2번 방식으로 호출해서 사용합니다.
static과 정적 메서드
C#에서는 static을 정적으로 표현합니다. 의미가 같은 다른 말로 표현하면 공유(shared)입니다.
static이 붙는 클래스의 모든 멤버는 해당 클래스 내에서 누구나 공유해서 접근할 수 있습니다. 메서드에 static이 붙는 메서드를 정적 메서드라고 하는데, 이를 공유 메서드(shared method)라고도 합니다.
정적 메서드와 인스턴스 메서드
using System;
class MyFirstClass
{
static void StaticMethod() => Console.WriteLine("[1] 정적 메서드");
void InstanceMethod() => Console.WriteLine("[2] 인스턴스 메서드");
static void Main()
{
MyFirstClass.StaticMethod(); // 1. 정적 메서드 호출
MyFirstClass my = new MyFirstClass(); // 2. 인스턴스 메서드 호출
my.InstanceMethod();
}
}
💡 Result
[1] 정적 메서드
[2] 인스턴스 메서드
클래스의 주요 구성 요소
클래스 시작과 끝, 즉 클래스 블록 내에는 다음 용어(개념)들이 포함될 수 있습니다. 클래스 구성 요소를 가르킬 때 클래스 멤버란 용어와 혼용해서 사용합니다. 다음 내용은 앞으로 자세히 다룰 예정이니 간단히 읽어 보고 넘어갑니다.
- 필드(field) : 클래스(개체)의 부품 역할을 합니다. 클래스 내에 선언된 변수나 데이터를 담는 그릇으로, 개체 상태를 저장합니다
- 메서드(method) : 개체 동작이나 기능을 정의합니다.
- 생성자(constructor) : 개체 필드를 초기화합니다. 즉, 개체를 생성할 때 미리 수행해야 할 기능을 정의합니다.
- 소멸자(destructor) : 개체를 모두 사용한 후 메모리에서 소멸될 때 실행합니다.
- 속성(property) : 개체의 색상, 크기, 형태 등을 정의합니다.
Environment
Environment 클래스의 여러 가지 속성을 사용하여 환경 변수를 출력해보기
using System;
namespace N_EnvironmentExit
{
internal class EnvironmentExit
{
static public void EnvironmentExitEx()
{
Console.WriteLine("시스템 폴더");
Console.WriteLine(Environment.SystemDirectory);
Console.WriteLine("닷넷 기준 버전");
Console.WriteLine(Environment.Version);
Console.WriteLine("운영 체제 버전");
Console.WriteLine(Environment.OSVersion);
Console.WriteLine("컴퓨터 이름");
Console.WriteLine(Environment.MachineName);
Console.WriteLine("사용자 이름");
Console.WriteLine(Environment.UserName);
Console.WriteLine("현재 폴더");
Console.WriteLine(Environment.CurrentDirectory);
Console.WriteLine("문서 폴더");
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
}
}
}
💡 Result
시스템 폴더
C:\WINDOWS\system32
닷넷 기준 버전
6.0.8
운영 체제 버전
Microsoft Windows NT 10.0.19043.0
컴퓨터 이름
DESKTOP-ENDAPE0
사용자 이름
admin
현재 폴더
C:\C#\CsharpStudy\Day8\bin\Debug\net6.0
문서 폴더
C:\Users\admin\Documents
EXE 파일 실행하기
using System;
using System.Diagnostics;
namespace N_ProcessStartDemo
{
internal class ProcessStartDemo
{
public static void ProcessStartDemoEx()
{
Process.Start("Notepad.exe"); // 메모장 실행
}
}
}
is 연산자로 형식 비교하기
특정 개체가 특정 형식인지 검사할 때는 is 연산자를 사용합니다.
개체.GetType() == typeof(형식) 의 줄임 표현으로 다음과 같이 사용합니다.
- 개체 is 형식
- 변수 is 데이터 형식
using System;
namespace N_Is
{
internal class Is
{
public static void IsEx()
{
object x = 1234;
if (x is int)
{
Console.WriteLine($"{x}는 정수형으로 변환이 가능합니다.");
}
}
}
}
💡 Result
1234는 정수형으로 변환이 가능합니다.
as 연산자로 형식 변환하기
as 연산자는 특정 데이터를 특정 데티어 형식으로 변환하는 데 사용합니다.
using System;
namespace N_IsAs
{
internal class IsAs
{
public static void IsAsEx()
{
object x = 1234;
object a = "ABC";
if (x is int)
{
Console.WriteLine($"{x}는 정수형으로 변환이 가능합니다.");
}
string s = a as string;
Console.WriteLine(s == null ? "null" : s);
string y = x as string;
Console.WriteLine(y == null ? "null" : y);
}
}
}
💡 Result
1234는 정수형으로 변환이 가능합니다.
ABC
null