16 나만의 타입 만들기

김민영·2023년 1월 19일
0

C# 기초 프로그래밍

목록 보기
11/18

🛖 사용자 정의 타입

1. 필요성

: 내장된 타입만으로는 현실 세계의 데이터들을 코드로 표현하기 어렵습니다. 현실 세계의 데이터들은 하나의 데이터라도 여러개의 속성(특징)들을 가질 수 있으며, 여러개의 데이터들이 하나의 종류로 묶일 수 있습니다. 프로그래머는 이를 표현하기 위해 직접 타입을 선언할 수 있으며, 이를 사용자 정의 타입이라고 합니다.

C#에서는 구조체클래스를 이용해 새로운 타입을 정의할 수 있습니다.

2. 구조체와 클래스

1) 기본 구조

struct 구조체 이름
{
	// 멤버
}

class 클래스 이름
{
	// 멤버
}

2) 멤버
: 각 타입을 구성하는 요소들

3) 차이점

  • 키워드
    : 구조체를 정의하기 위해 struct 키워드를, 클래스를 정의하기 위해 class 키워드를 사용합니다.

  • 타입 시스템
    : 구조체는 값 타입(Value Type), 클래스는 참조 타입(Reference Type)이라는 중요한 차이가 있습니다.

4) 예시

class Character
{
    int Hp;
    int Mp;
    int Atk;
}
  • Character라는 타입을 클래스를 이용해 정의
  • Character 타입의 객체를 생성할 수 있으며, 이를 인스턴스라고 합니다.

3. 인스턴스

1) 사용자 정의 타입의 객체
2) new 연산자를 사용해 생성

Character character = new Character();

3) 인스턴스의 초기화

Character character = new Character();

→ 위와 같이 인스턴스를 단순히 생성한 경우 인스턴스의 모든 멤버는 각 타입의 기본값으로 초기화됩니다.

→ 즉, 지금의 예시는 모든 멤버가 int 타입이기때문에 int의 기본값인 0으로 초기화된 상태입니다.

Character character = new Character()
{
	Hp = 100,
	Mp = 100,
	Atk = 10
};

→ 원하는 값으로 초기화하고자 하는 경우 위와 같이 초기화할 수 있습니다.

Character character = new Character();
character.Hp = 100;
character.Mp = 100;
character.Atk = 10;

→ 위와 같이 초기화하지 않고 생성한 후 각 멤버에 값을 대입해주는 경우는 초기화라고 할 수 없습니다. 이미 생성할 때 0으로 모두 초기화되었기 때문입니다.

🛖 접근 한정자

C#의 모든 타입과 타입의 멤버들은 접근 수준을 지정할 수 있습니다. 접근 수준을 지정하여 해당 타입 및 멤버를 사용할 수 있는 코드의 범위를 결정합니다.

접근 수준을 제한하여 외부에서의 의도치 않은 멤버의 수정을 방지할 수 있고, 사용자 입장에서 파악해야 할 문맥이 줄어들어 사용이 편해집니다.

1. public

: 다른 어셈블리에서도 접근 가능
→ public을 사용한 타입 및 멤버는 어디서든 접근이 가능합니다. 사실상 제약이 없다고도 할 수 있습니다.

2. internal

: 같은 어셈블리 내에서 접근 가능
→ public과 유사하게 어디서든 접근이 가능하지만, 같은 어셈블리 내에서만 접근이 가능합니다. 구조체 및 클래스 타입에 접근 한정자를 명시하지 않은 경우, 기본적으로 internal인 접근 수준을 갖습니다.

3. private

: 타입 내부에서만 접근 가능하며, 외부에서 접근이 불가능
→ 멤버의 기본 접근 한정자 입니다. 따라서 멤버를 정의할 때 별도의 접근 한정자를 명시해주지 않으면, 클래스 외부의 코드에서 바로 접근할 수 없습니다. internal은 따로 명시하여 사용하는 경우가 드물어 public을 붙여주거나 접근자를 이용해 사용할 수 있습니다.

0개의 댓글