게시글
질문&답변
Delegate 내용은 어디서 다루나요?
14. 대리자 섹션을 보시면 됩니다. 감사합니다 ^^
- 0
- 2
- 30
질문&답변
Xunit private 메서드 테스트
해당 문의 사항에 대한 강의가 업로드 되었습니다. 감사합니다. https://inf.run/NwUf1
- 0
- 2
- 43
질문&답변
자원정리 개념
인프런 AI 인턴의 설명이 훌륭하네요 ㅎㅎ제가 obj = null로 할당한 예제를 보여드린 것으로 약간 헷갈리신 것 같습니다. null 할당은 객체가 GC의 대상이 되도록 도울 수 있습니다. 왜냐면 GC는 참조가 되지 않은 객체를 메모리에서 제거하거든요.즉 변수에 null을 할당하는 것은 메모리에서 객체를 직접 해제하는 행위가 아닙니다. finally블록은 설명드렸다시피 return문을 만나더라 해도 반드시 실행이 보장되는 코드 블록입니다.그러하여 일반적으로 finally에는파일 스트림 (FileInputStream, FileOutputStream 등)네트워크 소켓 연결 (Socket)데이터베이스 연결 (Connection)그래픽 리소스 등위 항목의 자원을 정리할 때 주로 사용된다고 보시면 되겠습니다. 반드시 위와 같은 경우가 아니더라해도 제가 예제로 보여드린 바와 같이 더 이상 사용되지 않는힙 영역의 객체를 참조를 끊어주기 위해서도 종종 사용된다고 보시면 되겠습니다.
- 0
- 2
- 47
질문&답변
강의 영상 오류
수정하여 다시 업로드했습니다.불편함을 드려 죄송합니다.그리고 감사드립니다~!
- 0
- 1
- 37
질문&답변
Item 속성 Serializable 오류
안녕하세요. 상훈님 먼저 영상을 수강해주셔서 감사드립니다.본 강의에서는 .Net8 환경에서 촬영된 영상이다보니 별도로 직렬화 어트리뷰트를 작성하지 않아도 오류가 뜨지 않았습니다. 하지만 .Net Framework환경에서는 직렬화 어트리뷰트가 빠지게 되면 오류가 발생되는 현상이 있습니다.직렬화 어트리뷰트는 바로 다음 강의에서 나오는 [DesignerSerializationVisibility] 를 추가해주시면 되겠습니다. [Serializable] 는 일반적으로 디자이너에서 쓰이진 않습니다.따라서 직렬화 어트리뷰트를 [DesignerSerializationVisibility] 로 변경해주시면 되겠습니다. 궁금한 점이 있다면 언제든 질문주세요~ 감사합니다.^^
- 0
- 1
- 70
질문&답변
this string text의 동작 과정이 궁금합니다.
네 정확하게 이해하셨습니다. string name = "John"; static class MyClass { public static void Print(this string text) { // 본문 내용.. } } name.Print(); // MyClass.Print(name); 과 동일한 동작MyClass.Print(name); 과 동일한 동작이라고 보시면 되겠습니다. 정리하자면this string text 는 string 타입에 Print 라는 새로운 메서드를 추가하는 것처럼 보이게 합니다.name.Print() 호출은 실제로는 MyClass.Print(name) 와 같이, name 변수를 Print 메서드의 text 인자로 전달하는 형태로 동작합니다.this 키워드는 확장 메서드가 어떤 타입의 변수에 대해 호출될 수 있는지, 그리고 호출 시 해당 변수가 메서드의 어떤 인자로 전달될지를 정의하는 역할을 합니다.
- 0
- 2
- 75
질문&답변
type변환 as에서 string과 int, int? 차이 질문입니다.
AI가 답변을 잘해줬네요 ㅎㅎ메모리 관리 방식 차이가 있습니다.class : 참조 타입 / int : 값 타입참조 타입은 힙(Heap)에 저장되므로, 객체가 없을 수도 있기 때문에 null이 필요합니다.값 타입은 스택(Stack)에 직접 값을 저장하며, 항상 메모리를 차지해야 하므로 null이 불가능합니다. as 연산자는 참조 타입 및 Nullable에서만 사용 가능합니다. 따라서 string 은 Nullable로 명시를 해주지 않아도 참조 타입이라서 경고만 발생된 것이고,int는 값 타입이므로 에러가 발생하는 것 입니다. 아래의 코드는object value = 3.14; int result = Convert.ToInt32(value);명시적으로 변환을 하는 것이기 때문에 오류가 발생하지 않습니다.감사합니다.
- 0
- 2
- 114
질문&답변
접근 제어자로 필드를 만들어 파생 클래스에서 사용할 때 질문입니다.
c# 에서는 필드의 값을 변경하고자 할 때 초기화 문이 아닌 이상 메서드 본문에서 할당이 가능합니다.따라서 말씀해주신 문법 자체가 잘못된 것이며만약 포켓몬 클래스를 상속받는 모든 클래스가 Sound를 구현해야 한다면상속 클래스의 abstract property를 만들어보시는 건 어떨까요? var pika = new Pikachu(); pika.MakePikaSound(); Console.ReadKey(); abstract class Poketmon { public abstract string Sound { get; } protected void MakeSound() { Console.WriteLine($"{Sound}"); } } class Pikachu : Poketmon { public Pikachu() : base() { } public override string Sound => "피카 피카~~!"; public void MakePikaSound() { MakeSound(); } }더 궁금한 사항이 있으시다면 언제든지 질문주세요. 감사합니다. ^^
- 0
- 2
- 61
질문&답변
상속 부분 강좌에서 upcasting을 하는 이유가 궁금합니다.
업캐스팅할 이유가 없다면 굳이 할 필요가 없습니다.override와 new키워드의 차이를 명확히 보여드리고 싶어서 인스턴스를 영상과 같이 만들었을 뿐이에요~ 다음은 인스턴스를 만들 때 업캐스팅을 하지 않지만스타크래프트의 마린과 벌쳐의 공격(Attack) 메서드를 사용할 때 업캐스팅의 좋은 예시 코드입니다.class Program { static void Main(string[] args) { // Marine과 Vulture 객체 생성 Marine marine = new Marine(); Vulture vulture = new Vulture(); // Marine이 Vulture를 공격 marine.Attack(vulture); // Vulture가 Marine을 공격 vulture.Attack(marine); // Marine이 다시 Vulture를 공격 marine.Attack(vulture); Console.ReadKey(); } } class Unit { public string Name { get; set; } public int Health { get; set; } public Unit(string name, int health) { Name = name; Health = health; } // 데미지를 받는 메서드 public void TakeDamage(int damage) { Health -= damage; if (Health 결과:Marine이(가) Vulture을(를) 공격합니다! Vulture이(가) 6의 피해를 입었습니다. 체력: 74 Vulture이(가) Marine을(를) 공격합니다! Marine이(가) 20의 피해를 입었습니다. 체력: 20 Marine이(가) Vulture을(를) 공격합니다! Vulture이(가) 6의 피해를 입었습니다. 체력: 68 위 코드처럼 필요 시 업캐스팅을 하시면 되겠습니다.또 다른 질문이 있으시다면 언제든지 주세요. 감사합니다 ^^
- 0
- 2
- 91
질문&답변
정적 클래스, 확장 함수에서 매개변수로 this를 쓰는 이유?
안녕하세요~ 정적 클래스의 "첫 번째 매개변수"에 사용되는 this 키워드는 다음에 정의된 타입에 대해서"확장 함수를 정의하겠다"는 특별한 의미를 지닙니다.따라서 아래와 같이 사용할 수 있습니다.// 정적 클래스 static class MyExtension { // 확장 메서드 정의 public static void Print(this string text) { Console.WriteLine(text); } }string name = "John"; name.Print(); // 확장 함수 사용만약 this 키워드가 없다면?// 정적 클래스 static class MyExtension { // 일반 정적 메서드 정의 public static void Print(string text) { Console.WriteLine(text); } }string name = "John"; // name.Print(); // 사용이 불가능해요!!! MyExtension.Print(name); // 이렇게 사용해야 합니다.그리고 this 다음에 나오는 타입이 int 라면 int 타입에 대해서 확장 함수가 사용이 가능합니다.// 정적 클래스 static class MyExtension { // int 타입에 대한 확장 메서드 정의 public static bool IsEven(this int number) { return number % 2 == 0; } }int num = 4; if (num.IsEven()) { Console.WriteLine($"{num}은(는) 짝수입니다."); } else { Console.WriteLine($"{num}은(는) 홀수입니다."); }아래 코드는 사용이 불가능합니다.string name = "John"; name.IsEven(); // 사용 불가능!! 이상입니다. ^^또 궁금한 점이 있으시다면 언제든 질문 주세요. 감사합니다.
- 0
- 1
- 85