본문 바로가기
프로그래밍 언어/C#

C# 7. 닷넷 API

by Jinger 2024. 5. 9.

서론

    API는 'Application Programming Interface'의 약자로, 애플리케이션 프로그래밍 인터페이스를 의미한다. API는 소프트웨어 간에 서로 정보를 교환하고 기능을 사용할 수 있게 해주는 도구나 프로토콜이다. 다시 말해, API는 서로 다른 소프트웨어 시스템들이 서로 '대화'하고 상호작용할 수 있도록 하는 매개체 역할을 한다. 그렇다면 닷넷(.NET) API은 무엇이고 예시로 무엇이 있는 지 살펴보자.


닷넷 API

     .NET(닷넷)은 마이크로소프트에서 개발한 소프트웨어 프레임워크이다. 이 프레임워크는 주로 윈도우 기반의 애플리케이션을 개발하기 위해 사용되지만, .NET Core의 등장으로 이제는 리눅스 및 macOS를 포함한 다양한 운영 체제에서도 실행될 수 있는 크로스 플랫폼 애플리케이션 개발이 가능해졌다.

   닷넷에서 제공하는 대부분의 API는 클래스이다. 그 외에 구조체, 열거형, 네임스페이스가 있다.


클래스

   클래스"개체를 생성하는 틀(템플릿)이다." 혹은 "무엇인가를 만들어 내는 설계도이다." 등 다양한 정의가 있다. 즉, 모두 새로운 개체(실체)를 생성하는 설계도(청사진) 역할을 한다. 예를 들어, 자동차라는 개체를 만들려면 자동차 설계도가 필요하다. 이와 마찬가지로 프로그래밍에서의 설계도를 클래스라 부른다. 클래스 관련 내용은 내용이 방대하기에 상세한 내용은 다음에 다루겠다.

클래스 만들기

   클래스를 선언할 때 class 키워드를 사용한다. 클래스 내부에는 속성(데이터, 필드)와 메서드(로직, 함수)가 포함된다. public은 생략 가능하다.

public class 클래스이름
{
	// 클래스 내용 구현
}

   클래스 이름은 의미 있는 이름을 사용하면 좋다. 이름은 명사를 사용하며, 첫 글자는 꼭 대문자여야 한다. 또 클래스 이름을 지을 때는 특수 문자는 사용하지 않는다.

   클래스를 사용하기 위해서는 클래스를 선언하고 내부에 있는 속성이나 메서드를 점(.)으로 호출한다. 자세한 내용은 다음에 다루겠다.

클래스 시그니쳐

   클래스 본문 또는 몸통(바디)을 표현하는 중괄호 안에는 메서드, 필드, 속성, 생성자, 소멸자 등이 올 수 있다. 이 모두를 가리켜 클래스 멤버라고 한다.

클래스 주요 구성요소

  • 필두(field): 클래스(개체)의 부품 역할을 한다. 클래스 내에 선언된 변수나 데이터를 담는 그릇으로, 개체 상태를 저장한다.
  • 메서드(method): 개체 동작이나 기능을 정의한다.
  • 생성자(constructor): 개체 필드를 초기화한다.
  • 소멸자(destructor): 개체를 모두 사용한 후 메모리에서 소멸될 때 실행한다.
  • 속성(property): 개체의 색상, 크기, 형태 등을 정의한다.

액세스 한정자

   클래스를 생성할 때 public, private, internal, abstract, sealed 같은 키워드를 붙일 수 있다. 이를 액세스 한정자라 부른다. 액세스 한정자는 클래스에 접근할 수 있는 범위를 결정하는 데 도움이 된다. 기본값(디폴트 값)은 internal이다.

내장 클래스

  • String 클래스: 문자열 처리와 관련한 속성과 메서드 제공
  • StringBuilder 클래스: 대용량 문자열 처리와 관련된 속석 및 메서드 제공
  • Array 클래스: 배열과 관련한 주요 속성 및 메서드 제공

구조체

   구조체는 이름하나로 데이터를 묶어 관리하는 역할을 한다. 앞서 배운 배열이 대표적인 구조체이다. 즉, 구조체 변수란 이름하나로 데이터 형식 1개 이상을 하나로 보관해 놓는 그릇 역할을 한다.

구조체 만들기

   구조체를 의미하는 sturct 키워드를 사용하여 구조체를 만들고, 중괄호 안에 구조체 멤버들을 생성한다. 여기서 선언된 구조체 이름은 새로운 데이터 형식이 되며, 변수를 선언할 때 구조체 이름을 사용할 수 있다. 즉, 조체는 사용자 정의 데이터 형식이라고도 한다.

struct 구조체이름
{
    데이터형식 변수1;
    데이터형식 변수2;
    데이터형식 변수3;
}

구조체 선언 및 사용하기

   구조체 선언은 struct 키워드와 선언하여 만든 개체는 일반 변수처럼 사용할 수 있다. 선언된 구조체는 int, string과 같은 자료형처럼 변수를 만들어 사용할 수 있다. 구조체의 각 항목을 일반적으로 구조체 멤버(member)라고 한다. 멤버 변수는 외부에서 사용하도록 public키워드를 붙인다. 구조체 멤버에 값을 할당할 때는 점(.)으로 구분해서 값을 입력한다.

구조체변수이름.멤버이름 = 값;
using System;

class StructVariable
{
    static void Main()
    {
    	Product product;	// 구조체 형식 변수 선언
        // 구조체 변수의 각 멤버에 값 할당
        product.Id = 1;
        product.Title = "책";
        product.Price = 10000M;
        
        // 구조체 형식 사용
        string message = $"번호: {product.Id}\n상품명: {product.Title}\n가격: {product.Price = 10000M}";
        Console.WritLine(message);
    }
}

struct Product
{
    public int Id;
    public string Title;
    public decimal Price;
}

구조체 배열

   구조체에도 배열을 사용할 수 있다. 배열 선언 및 사용과 큰 차이는 없으나 이용 시 점(.) 뒤에 멤버변수를 통해 구조체 멤버에 접근할 수 있다.

구조체이름[] 변수명 = new 구조체이름[배열크기];
변수명[인덱스].멤버변수
using System;

naemspace StructArray
{
    struct BusinessCard	// 구조체 선언
    {
    	public string Name;
        public int Age;
    }
    
    class StructArray
    {
    	static void Print(string name, int age)	// 출력 전담 함수
        => Console.WriteLine($"{name}은 {age}살입니다.");
        
        static void Main()
        {
            BusinessCard biz;
            biz.Name = "정리병";
            biz.Age = 17;
            Print(biz.Name, biz.Age);
            
            BusinessCard[] names = new BusinessCard[2];	// 구조체 배열
            names[0].Name = "걸린"; names[0].Age = 102;
            names[1].Name = "jinger"; names[1].Age = 21;
            
            for(int i = 0; i < names.Length; i++)
            {
            	Print(names[i].Name, names[i].Age);
            }
        }
    }
}

    C#에서 구조체 사용은 클래스 사용에 비해 극히 적은 편이다. 하지만 간단한 구조의 데이터를  모아 처리할 때는 클래스보다 처리 속도가 좋기에 적절하게 사용한다.

내장형 구조체

   닷넷 프레임워크에 이미 내장된 구조체를 내장형 구조체라 한다. 대표적으로 아래와 같이 있다.

  • DateTime 구조체: 시간/날짜 관련 모든 정보를 제공한다.
  • TimeSpan 구조체: 시간/날짜 간격에 대한 모든 정보를 제공한다.
  • Char 구조체: 문자 관련 모든 정보를 제공한다.
  • Guid 구조체: 절대로 중복되지 않은 유일한 문자를 생성한다.

열거형

    열거형(enumeration) 형식은 기억하기 어려운 상수들을 기억하기 쉬운 이름 하나로 묶어 관리하는 표현 방식이다. 열거형을 사용하면 값 리스트 여러 개를 이름 하나로 관리할 수 있는 장점이 있다.

열거형 만들기

   이미 만들어진 열거형이 아닌 직접 정의해서 사용할 수도 있다. 이를 사용자 정의 열거형이라고 한다. 사용할 때는 enum키워드를 이용한다.

enum 열거형이름
{
    열거형변수1 = 기본값1,	// 기본값 생략 가능
    열거형변수2 = 기본값2,
    열거형변수3 = 기본값3
}

열거형 사용하기

    열거형 또한 점(.)을 이용하여 사용할 수 있다. 또한, 기본적으로 값을 지정하지 않으면 각 열거형 변수의 값은 순서대로 0~(n-1)가 지정된다.

using System;

namespace EnumIndex
{
    enum Animal {Rabbit, Dragon, Snake}
    
    class EnumIndex
    {
        static void Main()
        {
            Animal animal = Animal.Dragon;
            int num = (int)animal	// 열거형 값 가져오기
            string str = animal.ToString();	// 열거형 이름 가져오기
            Console.WriteLine($"Animal.Dragon : {num}, {str}");
            // Animal.Dragon : 1, Dragon
        }
    }
}

    만약 값을 지정하면 그 이후의 값은 지정된 값 이후의 값을 따른다.

enum Animal
{
    Horse,	// == 0
    Sheep = 5,	// 1 => 5
    Monkey	// 2 => 6
}

열거형 관련 클래스

   Enum 클래스에는 아래와 같은 메서드가 있다.

  • GetNames(): 열거형에서 상수 이름의 배열을 검색한다.
  • Parse(): 문자열을 사용하여 실제 열거형을 만들 수 있다. 하나 이상 열거된 상수 이름이나 숫자 값의 문자열 표현을 해당하는 열거형 개체로 변환된다.

네임스페이스

   네임스페이스는 프로그램 규모가 커질 때 클래스 이름이 충돌하는 것을 방지하도록 클래스를 모아서 관리하는 개념이다. 닷넷에는 수많은 클래스가 있다. 이러한 클래스들은 의미가 같은 클래스끼리 네임스페이스로 묶어 관리한다. 네임스페이스의 특징은 다음과 같다.

  • 서로 관련 있는 클래스, 구조체, 열거형 등의 형식과 또 다른 네임스페이스 등을 묶어 관리해주는 개념이다.
  • 클래스 이름이 중복되는 것을 방지하는 역할을 한다.
  • 클래스를 계층형으로 묶어 관리할 수 있다.
  • 네임스페이스는 패키지란 단어와 의미가 비슷하며, 관련 있는 형식의 묶음이다.

네임스페이스 만들기

   네임스페이스를 만들려면 namespace 키워드를 사용한다. 네임스페이스 이름도 클래스 이름과 마찬가지로 대문자로 시작한다.

namespace 네임스페이스이름
{
	// 클래스 등의 정의가 들어옴
}
using System;

namespace Foo
{
    public class Car
    {
        public void Go() => Console.writeline("[1] Foo 네임스페이스의 Car 클래스 호출");
    }
}

namespace Bar
{
    public class Car
    {
    	public void 6o() => Console.Writeline("[2] Bar 네임스페이스의 Car 클래스 호출");
    }
}

class NamespaceNote
{
    static void Main()
    {
    	Foo.Car fooCar = new Foo.Car();
        foocar.Go();
        Bar.Car barCar = new Bar.Car();
        barCar.G0();
     }
}

using 지시문

    namespace 키워드로 만든 네임스페이스를 특정 C#파일에서 사용하려면 코드 위쪽에 using 지시문으로 해당 네임스페이스를 현재 파일에서 사용하겠다고 선언해야한다. 대표적으로 "using System"은 System의 네임스페이스를 가져온 것이고 "System.Linq"는 System 내에 있는 Linq의 네임스페이스를 가져온 것이다.

네임스페이스 선언과 사용하기

using Korea.Seoul;	//Korea Seoul 네임스페이스의 클래스를 바로 사용 가능
using System;
using In = Korea.Incheon;	//Korea. Incheon 네임스페이스를 In 네임스페이스로 별칭을 불여 사증

namespace Korea
{
    namespace Seoul
    {
    	public class Car
        {
        	public void Run() => Console.riteline("서울 자동차가 달립니다.");
        }
    }
    
    namespace Incheon
    {
    	public class Car
        {
        	public void Run() => Console.riteLine("인천 자동차가 달립니다.");
        }
    }
}

namespace NamespaceDescription
{
    class NamespaceDescription
    {
        static void Main()
        {
        	// 네임스페이스 전체 지정
            Korea.Seoul.Car s = new Korea.Seoul.Car():
            s.Run();
			Korea.Incheon.Car i = new Korea. Incheon.Car();
            i.Run();

			// 네임스페이스 선언부에 선언
            Car seoul = new Car(); seoul.Run();
 			
            //@ 별칭을 사용해서 간결하게 사용
            In.Car ic = new In.Car(): ic.Run();
        }
    }
}

주섬주섬

  • 닷넷에서 제공하는 API는 너무 많기에 아래 참고에 있는 닷넷 API 탐색기를 사용하면 필요한 API 도움말을 얻을 수 있다.
  • 프레임워크란 사용 방법을 정해놓은 라이브러리이다.

참고

 

.NET API browser

Explore Microsoft's comprehensive .NET API browser. Your ultimate resource for all .NET-based APIs. Start your search now.

learn.microsoft.com

 

C# 네이밍

서론 C# 코딩 컨벤션(C# coding Conventions)은 C# 코드를 작성할 때 사용되는 규칙과 가이드라인의 모음이다. 이러한 컨벤션은 코드의 가독성과 일관성을 유지하고 협업 시에도 작성자 간에 일관된 스

jinger.tistory.com

 

반응형

'프로그래밍 언어 > C#' 카테고리의 다른 글

C# 6. 함수  (0) 2024.03.10
C# 5. 배열  (0) 2024.03.02
C# 4. 제어문  (1) 2024.02.27
C# 3. 변수와 입력문  (1) 2023.10.04
C# 2. 출력문  (0) 2023.09.10

댓글