C#/C# 교과서

[C# 교과서] 24. 클래스 사용하기

서니션 2023. 1. 2. 14:59
728x90
반응형

클래스

클래스는 지금까지 작성한 모든 예제에서 기본이 되는 C#의 핵심 코드

“클래스는 개체를 생성하는 틀(템플릿)”

“클래스는 무엇인가를 만들어 내는 설계도”

 

속성 : 데이터

메서드 : 로직


클래스 선언

public class 클래스이름

{

// 클래스 내용 구현

}

 

클래스를 여러 개 사용할 때는 public 키워드를 써야 함

public 키워드가 붙은 클래스는 클래스 외부에서 해당 클래스를 바로 호출해 사용할 수 있도록 공개되었다는 의미

반대 의미는 private 키워드를 사용

using System;

namespace codingstudy
{
    class Program2
    {
        static void Run()
        {
            Console.WriteLine("ClassNote 클래스의 Run 메서드");
        }
        static void Main()
        {
            Run(); // 메서드 레벨 : 같은 클래스의 메서드 호출
            Program2.Run(); // 클래스 레벨 : 클래스.메서드(); 형태로 호출
        }
    }
}

클래스가 같은 메서드를 호출할 때는 메서드 레벨 형식으로 호출하지만,

다른 클래스에 있는 메서드는 클래스 레벨 방식으로 호출해서 사용


static

정적 메서드. 공유 메서드.

static이 붙는 클래스의 모든 멤버는 해당 클래스 내에서 누구나 공유해서 접근 가능

using System;

namespace codingstudy
{
    class Program2
    {
        static void StaticMethod() => Console.WriteLine("정적 메서드");
        void InstanceMethod() => Console.WriteLine("인스턴스 메서드");

        static void Main()
        {
            Program2.StaticMethod(); // 정적 메서드 호출
            Program2 ex = new Program2(); // 인스턴스 메서드 호출
            ex.InstanceMethod();
        }
    }
}

클래스 주요 구성 요소

필드 : 클래스(개채)의 부품 역할. 클래스 내에 선언된 변수나 데이터를 담는 그릇으로, 개체 상태를 저장

메서드 : 개체 동작이나 기능을 정의

생성자 : 개체 필드를 초기화. 개체를 생성할 때 미리 수행해야 할 기능을 정의

소멸자 : 개체를 모두 사용한 후 메모리에서 소멸될 때 실행

속성 : 개체의 색상, 크기, 형태 등을 정의


엑세스 한정자

클래스를 생성할 때 public, private, internal, abstract, sealed 같은 키워드를 붙일 수 있음

액세스 한정자는 클래스에 접근할 수 있는 범위를 결정하는 데 도움


자주 사용하는 내장 클래스

String 클래스 : 프로그램을 만들 때 가장 많이 사용하는 문자열 처리와 관련한 속성과 메서드를 다양하게 제공

StringBuilder 클래스 : 대용량 문자열 처리와 관련된 속성 및 메서드를 제공. System.Text 네임 스페이스에 들어있음

Array 클래스 : 배열과 관련한 주요 속성 및 메서드 제공


Environment 클래스로 프로그램 강제 종료

Environment 클래스의 Exit() 메서드를 사용하면 콘솔 프로그램 강제로 종료 가능

using System;

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            Console.WriteLine("출력");
            Environment.Exit(0);
            Console.WriteLine("출력?"); // 이건 출력 안 됨
        }
    }
}

System 네임스페이스에 있는 Environment 클래스의 Exit() 메서드에 0 값을 매개변수로 전달하면 현재 프로그램을 종료. 이 코드 뒤로 아무리 많은 코드가 와도 실행되지 않음.


Environment 클래스로 환경 변수

Environment.SystemDirectory // 시스템 폴더
Environment.Version // 닷넷 기준 버전
Environment.OSVersion // 운영 체제 버전
Environment.MachineName // 컴퓨터 이름
Environment.UserName // 사용자 이름
Environment.CurrentDirectory // 현재 폴더
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) // 문서폴더

C# 프로젝트의 bin폴더와 obj폴더

bin 폴더 : 완전한 바이너리(어셈블리) 파일들을 저장하는 폴더. bin 폴더는 binary의 약자로 실행 파일이 들어옴

obj 폴더 : 컴파일 과정에서 최종 바이너리를 생성하는 데 사용하는 임시 파일과 기타 파일 저장


EXE 파일 실행

Process 클래스의 Start

using System;
using System.Diagnostics;

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            Process.Start("Notepad.exe");
        }
    }
}

메모장 실행 됨

운영체제에 따라 실행되지 않고 에러가 발생할 수 있음


Random 클래스

랜덤은 임의의 값을 나타냄

숫자로 따지면 임의의 수인 난수를 의미

Random 클래스를 사용하려면 Random 클래스의 인스턴스를 생성해야 함

using System;

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            Random random = new Random(); // Random 클래스의 인스턴스 생성
            Console.WriteLine(random.Next()); // 임의의 정수
            Console.WriteLine(random.Next(5)); // 0~4
            Console.WriteLine(random.Next(1,10)); // 1~10 
        }
    }
}

이 실행 결과는 실행할 때마다 다르게 나옴

Next() 메서드는 정수를 반환하고, NextDouble() 메서드는 실수를 반환


프로그램 실행 시간 구하기

Stopwatch 클래스로 Start()와 Stop() 메서드를 제공하여 프로그램 실행 시간을 잴 수 있음


정규식

모든 프로그래밍 언어는 정규식을 지원

정규식은 간단히 말해 문자열에서 특정 패턴을 찾아 주는 기능

정규식으로 공백 여러 개를 하나로 변경

using System;
using System.Text.RegularExpressions;

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            string s = "안녕     반가워     또 만나";
            var regex = new Regex("\\\\s+"); // 하나 이상의 공백 패턴 검사
            string r = regex.Replace(s," "); // 하나 이상의 공백을 공백 하나로 변환
            Console.WriteLine(s);
            Console.WriteLine(r);
        }
    }
}

Regex 클래스의 생성자에 전달된 \s 기호는 공백 문자를 의미

하나 이상의 공백 문자를 검사해서 공백 하나로 변환하는 코드


값 형식과 참조 형식

클래스나 구조체 같은 데이터 형식을 말할 때 값 형식과 참조 형식으로 구분 짓기도 합니다.

값 형식 : 개체에 값 자체를 담고 있는 구조. 지금까지 다룬 int, double 등은 내부적으로 구조체로 된 전형적인 값 형식의 데이터 구조

참조 형식 : 개체가 값을 담고 있는 또 다른 개체를 포인터로 바라보는 구조. 여러 값이 동일한 개체를 가리킬 수 있음


박싱과 언박싱

박싱 : 변환 과정에서 값 형식의 데이터를 참조 형식의 데이터로 변경하는 것

언박싱 : 참조 형식의 데이터를 값 형식의 데이터로 변경하는 것


is 연산자로 형식 비교

특정 개체가 특정 형식인지 검사할 때

개체.GetType() == typeof(형식)

is 연산자의 결괏값은 불 값


as 연산자로 형식 변환

as 연산자는 특정 데이터를 특정 데이터 형식으로 변환하는 데 사용

해당 데이터 형식이면 변환하고 그렇지 않으면 null을 반환

using System;

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            object x = 1234;
            string s = x as string;
            Console.WriteLine(s==null ? "null" : s);
        }
    }
}

Convert.ToString() 메서드는 형식 변환이 가능하면 변환해 주는 것과 달리, as 연산자는 반드시 지정한 데이터 형식만 변환하고 그렇지 않으면 null을 저장

728x90
반응형