네임스페이스
프로그램 규모가 커질 때 클래스 이름이 충돌하는 것을 방지하도록 클래스를 모아서 관리하는 개념
using 지시문을 사용하여 클래스 파일의 위쪽에 선언
- 서로 관련 있는 클래스, 구조체, 열거형 등의 형식과 또 다른 네임스페이스 등을 묶어 관리해 주는 개념
- 클래스 이름이 중복되는 것을 방지하는 역할
- 클래스를 계층형으로 묶어 관리 가능
- 네임스페이스는 패키지란 단어와 의미가 비슷, 관련 있는 형식의 묶음
namespace 네임스페이스 이름
{
// 클래스 등 정의가 들어옴
}
using System;
namespace Foo
{
public class Car
{
public void Go() => Console.WriteLine("[1] Foo 네임스페이스의 Car 클래스 호출");
}
}
namespace Bar
{
public class Car
{
public void Go() => 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.Go();
}
}
네임 스페이스가 적용된 클래스를 호출할 때는 네임스페이스.클래스; 형태를 사용
using 지시문
using System; // System 네임스페이스를 현재 CS 파일 또는 네임스페이스에서 사용하겠다고 지정
using MyNamespace; // MyNamespace 네임스페이스를 현재 CS 파일에서 사용하겠다고 지정
using AllCar.MyCar; // 계층형 네임스페이스를 지정
using AC = AllCar.MyCar; // 별칭을 붙여 사용 가능
AllCar.MyCar.Car car = new AllCar.MyCar.Car();
// using 지시문을 사용하지 않고 전체 네임스페이스와 클래스 이름을 함께 사용 가능
필드
- 클래스의 부품 역할을 하는 클래스의 내부 상태 값을 저장해 놓는 그릇
- 클래스 내에서 선언된 변수 또는 배열
- 매서드 내에서 선언된 변수 또는 배열을 지역 변수
- 메서드 밖에서 선언된 변수를 전역 변수
- 다만 C#에서는 전역 변수라는 용어를 사용하지 않고 메서드와 동일하게 액세스 한정자를 붙여 필드라고 함
필드 종류
- 변수(variable) 형식의 필드 : 지역 변수와 마찬가지로 값을 대입하여 사용 가능
- 상수(constant) 형식의 필드 : 필드(변수)와 비슷하지만 한 번 값을 초기화한 후에는 다시 값을 재설정할 수 없음. 상수 형식의 필드는 반드시 선언과 동시에 초기화 시켜야 함
- 읽기 전용(readonly) 형식의 필드 : 필드 중에서 readonly 키워드를 붙이는 읽기 전용 필드도 상수 형식의 필드와 역할이 비슷함. 단 상수와 차이점이 있다면 선언할 때 초기화시키지 않고 앞으로 배울 생성자로 초기화
- 배열(array) 형식의 필드 : 배열을 필드 레벨로 올린 개념으로, 값을 여러 개 보관 가능
- 기타, 개체(object) 형식의 필드 : 기타 필드에는 모든 데이터 형식이 올 수 있음
액세스 한정자
필드를 만들고 클래스 외부(다른 클래스)에서 사용하도록 설정하려면 public 액세스 한정자를 붙이거나 나중에 자세히 배울 속성으로 변환시켜야 함
아무것도 붙이지 않거나 private를 붙이면 해당 클래스의 멤버는 해당 파일이나 클래스 영역에서만 사용
public을 붙이면 해당 클래스와 멤버에 제한 없이 외부에서도 접근 가능
- public : 멤버에 대한 접근이 제한되지 않음. 모든 곳에서 접근 가능. public이 지정된 클래스 및 클래스의 멤버는 항상 접근 가능.
- private : 현재 클래스 내에서만 접근 가능. private이 지정된 클래스 및 멤버는 해당 클래스에서만 접근 가능.
- protected : 현재 클래스 또는 현재 클래스를 상속하는 자식 클래스에만 접근이 허가. protected가 지정된 클래스 및 멤버는 해당 클래스와 해당 클래스를 상속하는 파생 클래스에서 접근 가능.
- internal : 현재 프로젝트의 모든 클래스에 접근이 허가
- protected internal : 현재 어셈블리(DLL 파일)또는 현재 어셈블리에서 파생된 모든 클래스에 액세스 허가. internal이 지정된 클래스 또는 멤버는 해당 어셈블리(같은 프로그램)에서 접근 가능
'C# > C# 교과서' 카테고리의 다른 글
[C# 교과서] 38~39. 속성, 인덱서와 반복기 (0) | 2023.01.17 |
---|---|
[C# 교과서] 35~37. 생성자, 소멸자, 메서드와 매개변수 (0) | 2023.01.11 |
[C# 교과서] 31~32. 알고리즘과 절차 지향 프로그래밍, 개체 만들기 (0) | 2023.01.09 |
[C# 교과서] 28~29. 제네릭 사용하기, 널(null) 다루기 (0) | 2023.01.05 |
[C# 교과서] 26~27. 예외 처리, 컬렉션 사용하기 (0) | 2023.01.03 |