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