본문 바로가기

Udemy 강의 후기/Udemy - POCU C# 프로그래밍 기초

생성자(Constructor)와 Get,Set 그리고 프로퍼티

생성자의 개념

프로그래밍에서 드물게, 영단어(?)와 그 뜻이 일치하지 않는 파트라고 생각한다.

 

영어로 Constructor는 건설자 정도가 되겠는데, 클래스(OOP)에서는 그 뜻이

'인스턴스 생성시 자동으로 실행되는 메서드' 정도가 되겠다.

 

굳이 원 뜻인 '건설자(?)'에 끼워맞춰보자면....
클래스를 이용해 인스턴스를 만드는데(건설) 제일 기본적인 사항을 만드는(건설자)
거라고 생각해볼수도 있다 (좀 민망하기는 하다)

 

무슨 역할을 하는가?

1. 클래스 초기화

2. 메모리에 할당 
정도가 되겠다.

가장 기본적인 형태를 써보자면...

 

class Program

{

  Program()

  {

    Console.WriteLine("Program 클래스 기본생성자!")

  }

}

 

Program program = new Program();

여기서 알수 있는 특징은

 

1. 클래스 이름과 생성자 이름은 동일하다

2. public으로 기본 접근자가 설정됨.

3. 반환(return)을 사용할수 없다. 

 

정도가 있다.

 

이번엔 가장 기본적인 생성자만 얘기했지만, 정말 다양한 형태의 생성자들이 있다.

매개변수도 들어가고,  static 키워드부터 시작해서 굉장히 골치아픈 주제들이다.

 

이는 차차 더 포스팅해볼 생각이다. 

사실 JS배울때도 그렇고 클래스만 들어가면 정신이 없는건 나만 그런건가??

Get, Set 함수와 자동 구현 프로퍼티

프로그래머는 클래스 내부 속성들을 다른사람이 멋대로 바꾸는걸 방지하기 위해

속성들을 private 혹은 protected로 선언하는 경우가 있다.

 

예를들어 게임으로 따지면

 

class Magician 
{

  protected int mp;

}

 

저 mp 변수를 Magician.mp 로 접근하면, 보호수준 에러가 발생한다.
그렇다고 마법사가 제일 신경써야할 마력을 접근도 못하고 수정도 못하면 웃기니,
그것을 Get 키워드와 Set 키워드로 함수를 만들어 접근하는 것이다.

 

public int GetMp() 
{

  return mp;

}

 

public int SetMp(int hp)

{

  this.hp = hp

}

 

이러면 Magician.SetHp(100) 등으로 접근이 가능해진다! 

 

그런데 이걸 좀 간략하게 하기 위해서, C#에서는 프로퍼티란 기능을 제공하는데,

간단하다.

 

public int mp

{

  get { return mp; }

  set { mp = value; }

}

로 하면 끝이다. 그런데 최근부터는 아예 자동 프로퍼티란게 생겨서

 

class Magician

 

{

  protected int mp;

  public int mp { get; set; } = 100;

}

 

로 더욱 더 간편하게 바뀌었고, 초기화(100)도 가능하게 해 준다.

다만 단순 읽기, 쓰기만 가능한건 주의해야 할 것 같다.
(로직을 위한 코드작성이 안되므로)