생성자와 클래스 심화

생성자


  • 생성자는 객체의 인스턴스가 생성될 때 호출되는 특수한 메서드입니다
  • 이를 활용하면 객체 생성 시 의무적으로 데이터를 초기화할 수 있도록 할 수 있기 때문에 소스코드 작성 시 객체 데이터의 초기화 과정을 까먹는 등의 프로그래머의 실수를 줄이고 코드를 간결하게 유지할 수 있습니다

생성자 만드는 법

public [클래스명] (원하는 매개변수)

{

      생성과 동시에 실행이 되었으면 하는 코드

}

c#에서는 생성자 만들때 ctor 치면 만들어짐 , 컨스트럭터 줄임말

 

오버로딩

매개변수의 개수나 타입을 다르게 하여 하나의 클래스에 여러 개의 생성자를 정의할 수 있습니다. 이는 다양한 방식으로 객체를 초기화할 수 있게 합니다.

using System;


namespace ClassCtor
{
    class Pet
    {
        string name;
        int level;
        string skill;
		
        //프로퍼티들 구현한 것
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public int Level
        {
            get { return level; }
            set { level = value; }
        }

        public string Skill
        {
            get { return skill; }
            set { skill = value; }
        }

        public void UseSkill()
        {
            Console.WriteLine($"{skill} 을 사용하였습니다");
        }


        //생성자 만드는 법
        //public [클래스명] (원하는 매개변수)
        //{
        //        생성과 동시에 실행이 되었으면 하는 코드
        //}
        //생성자 만들때 ctor 치면 만들어짐 , 컨스트럭터 줄임말
        
        //생성자 오버로딩
        public Pet()
        {
            Console.WriteLine("(^-^)");
        }
        public Pet(string petInitName)
        {
            name = petInitName;
            Console.WriteLine($"펫이름이 {name}으로 설정되었습니다");
        }
        public Pet(int initLvl)
        {
            level = initLvl;
            Console.WriteLine($"펫 레벨이 {level}로 생성되었습니다");
            
        }
        public Pet(string inputName,int inputLvl,string inputSkill)
        {
            name=inputName;
            level = inputLvl;
            skill = inputSkill;
            Console.WriteLine($"펫 이름은 {name},레벨은 {level},스킬은{skill}로 생성되었습니다");
        }

        public void PrintPetPrice()
        {

        }
        //함수명이 같아도 매개변수 차이에 따라 사용 가능하게 하는 것을 오버로딩
        //매개변수 다른것만 가능
        public void PrintPetPrice(int money)
        {

        }
    };
}

 

 


자동구현 프로퍼티

c#에서 프로퍼티를 정의할 때 속성 접근자 (get ,set) 에 특별한 조건이 없이 값을 저장하고 검색하는데만 사용할 때 사용하는 구문입니다

public string Name { get;set; }  // 단 한줄로 표현 가능


new 키워드

C#에서 주로 클래스나 구조체의 새 인스턴스(객체)를 생성하고 초기화할 때 사용하는 연산자입니다. 이는 곧 객체 지향 프로그래밍의 핵심인 객체 생성 과정을 담당합니다.

배열에 new를 쓰면 힙영역에 공간을 빌린 후 어디에 저장되었는지 주소값을 좌항에 달라는 뜻

구조체에 new를 쓰면 해당하는 생성자를 불러와서 임시 구조체를 만들어 달라는 뜻

클래스에서 new를 쓰면 해당하는 생성자도 부르고 힙공간에 공간도 빌려다가 주소를 좌 항에 넣으라는 뜻

 


 partial 클래스, namespace

  • partial클래스는 C#에서 하나의 클래스, 구조체, 인터페이스 또는 메서드를 여러 개의 소스 파일에 분할하여 정의할 수 있게 해주는 기능입니다. 컴파일 시점에 이 모든 조각들이 합쳐져 하나의 완전한 클래스로 컴파일됩니다.
  • namespace는 일종의 폴더 개념입니다 같은 클래스명이라도 네임스페이스가 다르면 충돌이 일어나지 않습니다 

값과 참조 차이

  • 깊은 복사 - 값만 복사해 넘기고 주소를 각각 가지고 있어 완전히 새로운 애라 원본은 안바뀜
  • 얕은복사 - 참조형이라 원본도 바뀜
  • call by value - 값에 의한 호출 즉 함수에서 값이 변경되도 원본은 안바뀜
  • call by ref - 참조에의한 호출 즉 값이 바뀌면 원본도 바뀜

ref,in,out

  • 매개변수를 메서드에 전달하는 방식을 지정하는 키워드들

ref

  • 매개변수를 참조로 전달
  • 매개변수의 값을 변경하면 원래 변수의 값도 변경됨
  • 메서드를 호출하기 전에 변수가 반드시 초기화 되어 있어야함

out

  • out키워드도 참조로 전달하지만, 주로 메서드에서 값을 반환하는데 사용됨
  • 메서드 내부에서 반드시 매개변수에 값을 할당해야함
  • 메서드 호출전 변수 초기화 할 필요없음
  • 메서드가 반환하는 값 외에 추가적인 값을 반환할 때 주로 사용됨

in

  • 매개변수 읽기 전용 참조로 전달
  • 매개변수의 복사본을 만들지 않고 메모리 주소를 전달받아 성능을 개선합니다, 그러나 읽기전용이라 메서드 내에서 매개변수의 값을 변경할 수 없습니다
  • 데이터 무결성을 보장할 때 주로사용됨 (구조체같은 큰 값형식을 전달하면서)

 

'C# > 객체지향 활용과 응용 개발' 카테고리의 다른 글

메모리와 GC(가비지 컬렉터)  (0) 2025.11.15
추상 클래스  (0) 2025.10.10
상속  (0) 2025.10.10
Static  (0) 2025.10.10
객체지향과 클래스  (0) 2025.10.05