2023. 10. 24. 14:56ㆍGame Develop/C# Programming
Static이란
일반적으로 클래스 내의 데이터(변수)나 기능(메서드)들은 new를 통해 객체를 생성했을때 객체가 가진다.
하지만 클래스 내의 static은 객체가 아닌 클래스가 자체적으로 가지고 있는 저장 공간, 메서드라고 할 수 있다.
static으로 표시된 데이터나 메서드는 프로그램이 시작할 때부터 존재한다.
property란
property가 가진 많은 의미 중에 속성이라는 의미가 있다.
프로퍼티는 메서드지만 마치 변수인 것처럼 쓰인다.
다음은 가장 기본적인 property의 형태다
[접근 제어 지시자] [데이터 형식] [프로퍼티의 이름]
{
[접근 제어 지시자] get
{
실행문들
return [반환 값]
}
[접근 제어 지시자] set
{
실행문들
}
}
property 내의 get과 set의 접근 제어 지시자는 무조건 property의 접근 제어 지시자보다 더 제한적이여야 한다.
예를들면 property의 접근 제어 지시자가 public이면 protected와 private만 쓸 수 있다, private일 경우 get, set의 접근 제어 지시자에는 아무것도 쓸 수 없다.
흔히 클래스내에서 선언하는 변수는 대개 private인 경우가 많다. 따라서 프로그램이 실행되는 main에서 클래스의 변수에 직접 접근할 수 없기 때문에 메서드를 통해 간접적으로 접근해야한다.
예를 들어 클래스 내의 name이란 변수가 있는데 접근 제어 지시자를 private을 갖고있다.
객체를 생성하고 이 객체의 이름을 지정, 사용하기 위해선 메서드 작성은 불가피하다.
따라서 이름을 쓰고 읽어올 수 있는 메서드 2개를 만들어 주어야한다.
using static System.Console;
internal class Program
{
static void Main(string[] args)
{
Human human = new Human();
human.SetName("홍길동");
WriteLine($"이름 : {human.GetName()}");
}
}
public class Human
{
private string name;
public void SetName(string name)
{
this.name = name;
}
public string GetName()
{
return name;
}
}
이런식으로 변수에 접근하려면 메서드를 2개는 만들어줘야 하는 상황이 자주 나오기 때문에 property를 사용하여 좀 더 편리하게 작성할 수 있다.
다음은 property를 사용한 경우이다.
using static System.Console;
internal class Program
{
static void Main(string[] args)
{
Human human = new Human();
human.Name = "홍길동";
WriteLine($"이름 : {human.Name}");
}
}
public class Human
{
private string name;
public string Name
{
set
{
name = value;
}
get
{
return name;
}
}
}
가장 큰 차이점은 main을 보면 분명 property는 분명 메서드라고 하였지만, human.Name = "홍길동"과 같이 마치 변수 처럼 사용하는 것을 확인할 수 있다.
대입 값이 있으면 set이 실행되어 값(value)를 name에 대입해주고, 반환을 해야하면 get을 실행하여 name을 리턴해준다.
위의 Name 프로퍼티는 입력 값을 받아 변수에 대입하고 다시 반환만 하는 기능만을 가지고 있기 때문에 이는 자동 프로퍼티로 쓸 수도 있다.
private string name; public string Name { set { name = value; } get { return name; } } |
옆의 Name 프로퍼티와 public string Name { get; set; } 은 내부적으로 완전이 동일하다고 볼 수 있다. |
public string Name { get; set; } 이를 자동 프로퍼티라고 부른다.
using static System.Console;
internal class Program
{
static void Main(string[] args)
{
Human human = new Human();
human.Name = "홍길동";
WriteLine($"이름 : {human.Name}");
}
}
public class Human
{
public string Name { get; set; }
}
이렇게 프로퍼티를 사용하면 코드 라인을 많이 줄일 수 있다.
오늘 C#을 배운 이후 처음으로 배운 내용을 복습 차원에서 일기 형식으로 써보았다.
부디 오늘 내딛은 한 발자국이 훗날의 발자취로 남아있길 바라며,
다음에는 poperty를 사용하여 나이를 입력 받고 이 사람이 성인인지 아닌지를 판단해주는 예제로 돌아오겠다.
'Game Develop > C# Programming' 카테고리의 다른 글
C# Practicing(Generic Programming1) (0) | 2023.10.24 |
---|---|
C# Practicing(Property 응용) (0) | 2023.10.24 |
C# Practicing(추상 메서드와 인터페이스) (0) | 2023.10.24 |
C# Practicing(가상 메서드 오버라이드 심화) (1) | 2023.10.24 |
C# Practicing(상속, 가상 메서드) (1) | 2023.10.23 |