[C#] 정리 : 클래스

Young·2024년 5월 29일
0

C#

목록 보기
9/9

클래스는 마치 설계도면 같은 거라 new를 통해 구현해낸 객체가 실체다.

클래스
= 속성 + 기능
= 필드 + 메소드

class 클래스명 = new 생성자();

여기서 new 뒤에 있는 생성자는 클래스명과 같다.
생성자는 메소드와 달리 반환형이 존재하지 않는다.

생성자를 따로 만들지 않으면 디폴트 생성자가 자동 생성되지만 하나라도 생성할 경우에나 오버로딩의 경우에는 필요시 디폴트 생성자를 새로 만들어 줘야 한다.

생성자와 반대되는 개념이 소멸자인데 클래스명 앞에 ~ 표시를 하는 식이다. 소멸자는 보통 자동생성되며 시행 시점은 객체가 사라지는 순간인데 객체지향 언어에서는 가비지컬렉터GC가 있기 때문에 언제 소멸될지 정확히 알 수 없다.


접근한정자 = 접근제어자 = 접근지시자

  • public
    누구나 접근할 수 있다.
  • protected
    상속만 접근할 수 있다.
  • private
    자신만 접근할 수 있다. 앞에 형태가 명시되지 않았을 경우에는 private가 생략되어 있다.

  • 얕은 복사와 깊은 복사
using System;

namespace thisIsCSharp
{
    class MyClass
    {
        public int MyField1;
        public int MyField2;

        public MyClass DeepCopy()       // 깊은 복사용
        {
            MyClass newCopy = new MyClass();
            newCopy.MyField1 = this.MyField1;
            newCopy.MyField2 = this.MyField2;

            return newCopy;          // 반환형 MyClass
        }
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            MyClass source = new MyClass();
            source.MyField1 = 10;
            source.MyField2 = 20;

            MyClass target = source;    // 주소값은 같음 = 얕은 복사
            target.MyField2 = 30;

            Console.WriteLine($"{source.MyField1} {source.MyField2}");
            Console.WriteLine($"{target.MyField1} {target.MyField2}");
            Console.WriteLine();

            MyClass _source = new MyClass();
            _source.MyField1 = 10;
            _source.MyField2 = 20;

            MyClass _target = source.DeepCopy();    // 깊은 복사
						// 반환되면서 뉴카피랑은 얕은 복사,
						// 뉴카피 사라지면서 뉴카피는 연결 끊기고
						// 타겟은 각 필드랑 연결됨
            _target.MyField2 = 30;                  // 쟤랑 주소 달라

            Console.WriteLine($"{_source.MyField1} {_source.MyField2}");
            Console.WriteLine($"{_target.MyField1} {_target.MyField2}");

        }
    }
}

얕은 복사는 주소값이 같은 것, 깊은 복사는 값이 동일한 새로운 객체를 생성하는 것이다.


  • static 정적
    프로그램 시작과 동시에 존재하며 유일한 대명사로 인식하면 된다.
static int a;	// 대한민국 대통령 = 유일함
int a;			// 강민지, 최사랑 같이 다르긴 하나 동명이인 있을 수 있음
  • this : 자기 자신

  • get / set : private로 보안한 데이터에 접근하고 기록을 남기거나 값을 변형하여 암호화, 복호화하여 사용할 수 있다.

profile
Beginner : C#

0개의 댓글