C#/Basic Syntax

[C#] 12. 클래스 (Class)

가든가든 2022. 10. 24. 22:50
728x90

클래스는 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

 

728x90