C#/C# 교과서

[C# 교과서] 33~34. 네임스페이스, 필드 만들기

서니션 2023. 1. 10. 17:10
728x90
반응형

네임스페이스

프로그램 규모가 커질 때 클래스 이름이 충돌하는 것을 방지하도록 클래스를 모아서 관리하는 개념

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이 지정된 클래스 또는 멤버는 해당 어셈블리(같은 프로그램)에서 접근 가능
728x90
반응형