객체지향 프로그래밍에서 클래스가 가장 큰 단위이고 클래스는 그 내부에 많은 것들을 쓸어 담고 있습니다. 그 중에 하나가 필드입니다.
필드는 읽기전용 필드와 상수가 있습니다.
상수 필드 | 읽기전용 필드 |
---|---|
컴파일 시 데이터 저장 | 런타임 시 데이터 저장 |
선언과 동시에 초기화 | 선언과 동시에 초기화 또는 생성자에 의해 초기화 |
static으로 호출 | static 선언 가능, 인스턴스로 호출 |
필드는 대부분 private로 선언하고 외부 공개가 필요할 경우 property(속성)으로 사용합니다.
public class Person
{
//[1] 변수 형식의 필드
public static string name = "강감찬";
//[2] 상수 형식의 필드
public const int m_age = 21;
//[3] 읽기전용 형식의 필드
public static readonly object _NickName = "RedPlus";
//[4] 배열 형식의 필드
public static string[] _websites = { "dotnet", "ms" };
//[!] 필드 내용 출력 메서드
public static void ShowProfile()
{
// 로컬변수(Local Variable)
string strWrite = String.Format("이름: {0}\n나이: {1}\n별명: {2}\n", name, m_age, _NickName);
strWrite += "홈페이지: ";
foreach (string s in _websites)
{
strWrite += s + '\t';
}
strWrite += '\n';
Console.WriteLine(strWrite);
}
}
public class Field
{
public static void Main(string[] args)
{
// 지역 변수(LocalVariable): 특정 메서드내에서 선언된 변수
string name = "유관순";
Console.WriteLine(name);
//[!] private으로 선언된 필드는 접근이 안되므로 필드를 public으로 선언했다.
Person.name = "홍길동";
// Person.m_age = 22; // 이 코드는 실행 안됨
// Person._NickName = "WhitePlus"; // 이 코드는 실행 안됨
Person._websites[0] = "dotnetkorea";
Person.ShowProfile();
}
}
속성은 필드의 값을 읽거나 쓰거나 계산하는 방법을 제공하는 클래스의 속성을 나타내는 멤버입니다.
public class Car
{
// 필드
private string color;
// 생성자
public Car()
{
this.color = "Black";
}
// 메서드로 외부에 공개
public void SetColor(string color)
{
this.color = color; // this.필드 = 매개변수;
}
public string GetColor()
{
return color;
}
// 속성(프로퍼티;Property)
public string Color
{
get
{
return color;
}
set
{
color = value;
}
}
// 읽기전용 속성
public string Make
{
get
{
return "한국자동차";
}
}
// 쓰기전용 속성
private string _Type;
public string Type
{
set
{
_Type = value;
}
}
// 축약형 속성
public string Name { get; set; }
}
class PropertyAll
{
static void Main()
{
//[1] Set과 Get 메서드 사용
Car car1 = new Car();
car1.SetColor("Red");
Console.WriteLine(car1.GetColor()); // Red
//[2] 속성을 사용
Car whiteCar = new Car();
whiteCar.Color = "White"; // set {}
Console.WriteLine(whiteCar.Color); // get {}
//[3] 읽기전용 속성
Car k = new Car();
// k.Make = ""; // <- 이 코드는 에러
Console.WriteLine(k.Make); // 읽기만 가능
//[4] 쓰기전용 속성
Car car = new Car();
car.Type = "중형"; // 쓰기만 가능
// Console.WriteLine(car.Type); // <- 이 코드는 에러: 읽기는 불가
//[5] 축약형 속성
Car myCar = new Car();
myCar.Name = "좋은차";
Console.WriteLine(myCar.Name);
}
}