C#(Nullable, 소멸자, namespace, partial, sealed)

JHO·2024년 7월 23일
0

c#스터디

목록 보기
3/9

Nullable


1-1. Nullable

  • c#에는 값 타입과 참조 타입이 존재하며, 참조 타입에는 null값이 가능하지만, 값 타입에는 불가능.
Nullable<int> nullableInt = new Nullable<int>(5);
  • 이런 식으로 선언하면 값 타입도 null값 가능

1-2. ?

int? nullableInt = null
  • ?을 사용하여 선언도 가능.
string mychar = "123";
Console.WriteLine(mychar?.Length);
  • mychar이 null 이면 에러없이 반환값없고,
    null이 아니면 길이를 반환해준다.

1-3. ??

String a = null;
a ??= "10";
Console.WriteLine(a);
  • ??를 사용하면 왼쪽 항이 null일시 오른쪽 항 실행.
  • null이 아니면 기존 값 return.

2. 소멸자


  • c#에서는 가비지 컬렉터가 알아서 함수가 종료하면 안쓰는 가비지들을 메모리 해제.
  • 따라서 프로그래머가 직접 메모리를 해제할 일이 없기때문에 언제 소멸될지 정확히 파악하기가 어려움.
  • c#에서는 using문법과 Dispose함수를 통해서 소멸 타이밍을 특정할 수 있음.
  • Dispose는 주로 관리되지 않는 자원들(ex)운영체제 자원이나 외부에서 관리되는 자원) 위주에 사용.
    -> 가비지 컬렉터는 관리되는 자원(ex)객체가 더이상 참조되지 않는 경우)들만 신경쓰므로 관리되지 않는 자원들은 명시적으로 해제해야함.
using(Player p = new Player())
{
}
class Player : IDisposable
{
   public void Dispose()
   {
     Console.WriteLine("메모리 해제");
   }
}
  • Dispose 함수를 사용하려면 IDisposable이라는 인터페이스를 상속받고 재정의.
  • using문 박스를 벗어나면 Player 인스턴스가 소멸되면서 DisPose함수 출력.

3. namespace와 partial


  • 프로그래머끼리 각자 구현한 것을 합치는 도중에 문제가 생길 수가 있다.
  • 이러한 현상을 피하기 위해 namespace와 partial을 이용.
  • namespace: using키워드를 이용해서 namespace안에 원하는 클래스나 기능을 가지고 와서 사용가능.
  • partial: 다른 파일에 같은 이름의 클래스가 있어도 현재 파일에 같은 이름의 클래스를 사용가능.
    -> partial 키워드가 붙은 같은 이름의 클래스의 기능을 공유할 수 있다.(같은 이름의 함수와 변수는 제외)
    -> 각자 다른 환경에서 같은 클래스 내부에서 구현이 가능하다.

4. 깊은 복사와 얕은 복사


  • 깊은 복사:구조체와 같이 값 타입의 형식의 경우, 값 자체만을 그대로 가져오는 복사
  • 얕은 복사:클래스와 object 같이 참조타입의 형식의 경우, 값이 아닌 주소 값을 가져오는 복사

5. sealed


  • class 앞에 sealed를 붙이면 다른 클래스에서 그 클래스를 상속 받을 수가 없다.
public sesaled class SealedClass
  • public class A: SealedClass 시도할 시 컴파일 오류 발생.

profile
개발노트

0개의 댓글