Section 39.5: 생성자에서 다른 생성자 호출하기

public class Animal { public string Name { get; set; } public Animal(): this("Dog") {} public Animal(string name) { Name = name; } } var dog = new Animal(); // dog.Name 은 기본값인 "Dog" 으로 설정될 것이다. var cat = new Animal("Cat"); // cat.Name 은 "Cat" 으로 설정되며, 인자가 없는 생성자는 이때 호출되지 않는다.
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 39.4: Static 생성자 강제 호출하기

Static 생성자는 해당 타입이 최초로 사용되기 전에 불리는 것을 보장하고 있긴 하지만, 때에 따라 이를 강제로 호출하는 것이 유용한 경우가 있을 수 있다. RuntimeHelpers 클래스는 이를 위한 지원 기능을 제공하고 있다:

using System.Runtime.CompilerServices; // ... RuntimeHelpers.RunClassConstructor(typeof(Foo).TypeHandle);

유의점: 생성자만이 아니라 모든 static 초기화 (예를 들어 필드 초기자 (initializer) 등) 과정이 수행될 것이다.

사용 가능한 예: UI 응용 프로그램의 초기 splash 화면에서 초기화를 수행한다거나 Unit Test 에서 static 생성자가 실패하지 않음을 보장하는 작업 등.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 39.3: 기본 생성자

특정 타입이 아래와 같이 생성자 없이 정의되었다면:

public class Animal { }

컴파일러는 아래 코드에 상응하는 기본 생성자를 자동으로 만들어 주게 된다:

public class Animal { public Animal() {} }

어떠한 형식이건, 생성자가 따로 정의되는 경우 기본 생성자는 만들어지지 않을 것이다. 만약 아래와 같이 타입 정의가 이루어진 경우라면:

public class Animal { public Animal(string name) {} }

Animal 클래스는 선언된 해당 생성자를 통해서만 생성이 가능할 것이다.

// 아래 코드는 유효하다 var myAnimal = new Animal("Fluffy"); // 아래 코드는 컴파일이 되지 않는다 var unnamedAnimal = new Animal();

위의 두번째 예제에서, 컴파일러는 아래와 같은 에러 메시지를 출력해 줄 것이다:

'Animal' does not contain a constructor that takes 0 arguments

만약 특정 클래스에 파라미터가 없는 생성자와 있는 생성자 두가지를 모두 제공하고자 한다면, 두 생성자를 모두 명시적으로 구현하여야 한다.

public class Animal { public Animal() {} //기본 생성자에 상응하는 생성자 public Animal(string name) {} }

파라미터 없는 생성자를 제공하지 않는 다른 클래스를 확장 (extend) 하는 클래스의 경우, 컴파일러는 기본 생성자를 만들어 줄 수 없다. 예를 들어, 아래와 같은 Creature 클래스가 있다고 가정한다면:

public class Creature { public Creature(Genus genus) {} }

class Animal : Creature {} 와 같이 기술된 Animal 클래스는 컴파일이 되지 않을 것이다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 39.2: 싱글톤 생성자 패턴

public class SingletonClass { public static SingletonClass Instance { get; } = new SingletonClass(); private SingletonClass() { // 필요한 생성자 관련 코드를 이곳에 위치시킨다 } }

위와 같은 패턴 사용 시, 생성자가 private 으로 선언되어 있으므로, SingletonClass 를 사용하는 코드에서 새로운 인스턴스를 임의로 생성할 수 없게 된다. SingletonClass 의 단일 인스턴스를 접근하기 위한 유일한 방법은 바로 SingletonClass.Instance static 속성을 사용하는 것이다.

Instance 속성은 C# 컴파일러가 자동 생성하는 static 생성자에 의해 할당된다. .NET 런타임은 이 static 생성자가 Instance 속성이 최초로 읽히기 전에 반드시 한번 실행됨을 보장해준다. 그러므로, 모든 동기화 및 초기화 관련 세부사항은 .NET 런타임에 의해 처리된다.

유의할 점은, 만약 static 생성자 실행이 실패할 경우, 이 Singleton 클래스는 해당 앱 도메인의 실행 기간 전체에 걸쳐 영구적으로 사용 불가능한 상태가 될 것이라는 점이다. 또한, 이 static 생성자는 Instance 에 대한 첫번째 접근시점에 맞추어 실행됨이 보장되는 것은 아니며, 그보다 더 빠른 시점에 불리게 될 것이다. 이는 초기화가 확정된 시점에 수행되지 않게됨을 의미한다. 실제적인 사례의 경우, JIT 는 보통 static 생성자를 Instance 에 대한 참조가 일어나는 메소드의 컴파일 시점 (실행 시점이 아닌) 에 호출하게 된다. 이는 성능 최적화를 위함이다.

"43: 싱글톤 구현" 페이지에 싱글톤 패턴 을 구현하는 다른 방법들이 소개되어 있다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

코로나 이후에도 진행 혹은 모집중인 해외 영어캠프 / 가족캠프 목록

코로나로 인해 대부분의 해외 영어캠프 / 가족캠프들이 자취를 감췄었으나, 최근 다시 진행 혹은 모집을 시작한 캠프들이 있는 것 같아 검색을 해 보았습니다.

(작성일 : 22/02/17, 최종 수정일 : 22/10/06)

저도 아이와 함께 떠날 수 있는 날이 오기를 기다리는 입장이라, 주기적으로 이 페이지를 업데이트 하며 동향을 지켜보려 합니다.

사진 등 실제 진행 기록이 남아있는 곳들을 정리하여 보았습니다.

  1. 김아빠유학원
    https://cafe.naver.com/kimfather
    말레이시아 / 괌 / 싱가포르 / 필리핀 2023 겨울 모집 중 : 링크
    싱가포르 2022 여름 및 비수기 모집 중 : 링크
    말레이시아 2022 여름 및 비수기 모집 중 : 링크
    필리핀 클락 2022 모집 중 : 링크
    싱가포르 2021~2022 겨울 진행
    -> 사진/후기 등 싱가포르 영어캠프 진행 자료 많음
    괌 2021~2022 겨울 모집 기록 있음
    -> 괌 영어캠프 진행관련 자료는 따로 올라오지 않은 듯

  2. 미미맘의 미국 영어캠프
    https://blog.naver.com/PostList.naver?blogId=scripps0507
    https://cafe.naver.com/mimimomcamp
    미국 샌디에이고 2023 겨울 모집 중 : 링크
    미국 샌디에이고 2022 여름 모집 중 : 링크 / 링크
    미국 샌디에이고 2021~2022 겨울 진행
    -> 블로그에 캠프 시작 / 진행 사진 올라와있음

  3. 하와이 브라더스
    https://cafe.naver.com/hawaiiwaikikiminbak
    하와이 2022 여름 캠프 모집 중 : 링크
    하와이 2021 여름, 2021~2022 겨울 진행
    -> 사진 및 유튜브 영상 등이 올라와있음

  4. 시온맘 영어캠프
    https://cafe.naver.com/homelovecare
    필리핀 2023 겨울 모집 중 : 링크
    필리핀 2022 여름 진행,
    괌 2021~2022 겨울 진행
    -> 사진 및 영상 많이 올라와있음

  5. 괌 영어연수의 정석
    http://naver.me/Fr8IPUX5
    괌 2023 겨울 모집 중 : 링크
    괌 2022 여름 모집 중 : 링크
    괌 2021 여름, 2021~2022 겨울 진행
    -> 사진 및 후기 많이 올라와 있음

  6. 오즈게코
    https://blog.naver.com/ilovedarby
    호주 골드코스트 2023 겨울 모집 중 : 한달살기, 현지유치원
    호주 골드코스트 2022 여름 모집 중 : 한달살기 , 현지유치원 , 캠프
    호주 퀸즐랜드 2022 단기스쿨링 모집 중 : 링크

  7. 스쿨링하며 해외가유
    http://naver.me/FiWheB7p
    필리핀 클락 2023 여름 모집 중 : 링크
    필리핀 클락 2023 비수기 모집 중 : 링크
    필리핀 딸락 2023 겨울 모집 중 : 링크
    필리핀 세부 2023 겨울 모집 중 : 링크
    필리핀 바기오 2023 비수기 모집 중 : 링크
    수빅 2022 겨울 모집 중 : 링크
    조호바루 2023 겨울 모집 중 : 링크
    다낭 2023 겨울 모집 중 : 한달살기, 2주
    필리핀 클락 2022 모집 중 : 링크

여기까지는 실제 진행 기록이 함께 올라와 있는 링크였으며, 진행 기록을 확인할 수는 없지만 모집 관련 정보가 있는 링크는 아래 따로 정리해 보았습니다. 주기적으로 모니터링 하면서 진행 기록이 추가되면 위 리스트로 옮기려고 합니다.

  1. 유학큐브
    https://blog.naver.com/PostList.naver?blogId=aquarius5
    미국 하와이 2023 겨울 모집 중 : 링크
    두바이 2023 겨울 모집 중 : 링크
    코타키나발루 2023 겨울 모집 중 : 링크
    미국 필라델피아 스쿨링 2023 겨울 모집 중 : 링크
    미국 포트로더데일 2023 겨울 모집 중 : 링크
    호주 브리즈번 2023 겨울 모집 중 : 링크
    캐나다 밴쿠버 2023 겨울 모집 중 : 링크
    미국 보스턴/샌프란시스코/포트로더데일 2022 여름 모집 중 : 링크
    하와이 2022 여름 모집 중 : 링크
    호주 브리즈번 2022 여름 모집 중 : 링크
    필리핀 바기오 2022 여름 모집 중 : 링크
    캐나다 밴쿠버/토론토 2022 여름 모집 중 : 링크
    미국, 캐나다 2021~2022 겨울 모집

  2. 유학허브
    https://blog.naver.com/PostList.naver?blogId=uhakhub_dj
    필리핀 세부 2023 겨울 모집 중 : 링크
    미국 캘리포니아 스쿨링 2023 겨울 모집 중 : 링크
    말레이시아 2023 겨울 모집 중 : 링크, 링크
    호주 브리즈번 2023 겨울 모집 중 : 링크, 링크
    미국 플로리다 2023 겨울 모집 중 : 링크
    미국 포트로더데일 2022 여름 모집 중 : 링크
    캐나다 밴쿠버 2022 여름 모집 중 : 링크 , 링크
    캐나다 밴쿠버/토론토, 미국 LA 2022 여름 모집 중 : 링크
    캐나다 퀘벡 2022 여름 모집 중 : 링크
    영국 2022 여름 모집 중 : 링크
    스위스 2022 모집 중 : 링크
    미국 UCLA 2022 여름 모집 중 : 링크

반응형

Section 39.1: Static 생성자

static 생성자 (constructor) 는 해당 타입의 인스턴스가 최초로 초기화되거나, static 클래스 멤버나 static 메소드가 최초로 호출될 때 수행된다. static 생성자는 멀티스레드 환경에서도 안전하게 수행된다 (thread safe). static 생성자는 일반적으로 다음과 같은 경우에 사용된다:

  • static 한 상태를 초기화한다. 이 상태는 동일 클래스의 각기 다른 인스턴스간에 공유되는 상태값이다.
  • singleton 을 생성한다.

예제:

class Animal { // * static 생성자는 해당 클래스에 // 최초로 접근할 때 단 한번 실행된다. // * static 생성자는 접근 한정자 (access modifier) 를 가질 수 없다. // * static 생성자는 파라미터를 가질 수 없다 static Animal() { Console.WriteLine("Animal initialized"); } // 클래스의 인스턴스가 생성될 때마다 실행되는 instance 생성자. public Animal() { Console.WriteLine("Animal created"); } public static void Yawn() { Console.WriteLine("Yawn!"); } } var turtle = new Animal(); var giraffe = new Animal();

출력 결과:

Animal initialized Animal created Animal created

Demo 확인하기

해당 클래스에 대한 첫번째 호출이 static 메소드인 경우, instance 생성자 호출 없이 static 생성자만 호출이 될 것이다. 그러나 static 메소드는 어차피 instance 상태값에 접근이 불가능하기에 이러한 현상은 아무런 문제를 유발하지 않는다.

Animal.Yawn();

위 코드는 다음과 같은 결과를 출력할 것이다:

Animal initialized Yawn!

"39.8 static 생성자에서의 예외 발생시의 동작" 항목과 "39.10 Generic static 생성자" 항목도 읽어두는 것을 추천한다.

Singleton 예제:

public class SessionManager { public static SessionManager Instance; static SessionManager() { Instance = new SessionManager(); } }
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Chapter 39: 생성자와 종료자 (Finalizer)

생성자 (Constructor) 는 해당 클래스의 인스턴스가 생성될 때 불리는 메소드이다. 이들의 주 역할은 새로운 객체를 사용 가능하고 일관성있는 상태로 만들어주는 것이다.

소멸자 (Destructor) / 종료자 (Finalizer) 는 해당 클래스의 인스턴스가 소멸될 때 불리는 메소드이다. C# 에서 이들이 명시적으로 작성되거나 사용되는 경우는 드물다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 38.7: 제네릭 타입 인자가 nullable 타입인지 확인하기

public bool IsTypeNullable<T>() { return Nullable.GetUnderlyingType( typeof(T) )!=null; }
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts