
C# WinForm 사용자 정의 컨트롤 활용. 실무 역량 키우기
₩66,000
5시간만
30%
₩46,200
중급이상 / C#, winform, winforms
5.0
(2)
재사용 가능한 UI 요소를 만들어 코드 중복을 줄이고 유지보수를 쉽게 하며, 필요한 동작과 디자인을 캡슐화해봐요!
중급이상
C#, winform, winforms
병.의원 소프트웨어 개발 업체 | 2015년 ~ 현재
C# 관련 강의 유튜브 운영 : 까불이코더(https://www.youtube.com/@kaburi-coder) 2022 ~
프로그래밍 언어: C#, TypeScript, Dart, Python, VB.NET
데스크탑 애플리케이션: WinForms, WPF
모바일 앱 개발: Flutter
웹 개발: React, Next.js, Express, NestJS
Gen AI: LangChain, LangGraph
컨테이너 및 오케스트레이션: Docker, Kubernetes, Helm, ArgoCD ..
CI/CD: GitHub Actions
DataBase: MySql, Postgresql, MongoDB, SQLITE 등
2015년부터 현재까지 소프트웨어 개발 분야에서 다양한 프로젝트를 성공적으로 이끌어온 경험을 보유하고 있습니다.
기술 리더로서 팀을 이끌며 효율적인 개발 프로세스를 유지하고, 최신 기술 스택을 적극적으로 도입하여 소프트웨어의 품질과 사용자 경험을 향상시키는 데 주력하고 있습니다.
현재는 데스크톱과 웹의 통합 개발을 주도함과 동시에, 사내 직원 교육을 책임지고 있습니다.
또한 사용자 친화적인 애플리케이션 개발과 배포 자동화, DevOps 도입을 통해 프로젝트의 전반적인 성공에 기여하고 있습니다.
지속적인 자기계발을 통해 변화하는 기술 환경에 유연하게 대응하며, 높은 열정으로 새로운 도전에 임하고 있습니다.
C# WinForm 사용자 정의 컨트롤 활용. 실무 역량 키우기
₩66,000
5시간만
30%
₩46,200
중급이상 / C#, winform, winforms
5.0
(2)
재사용 가능한 UI 요소를 만들어 코드 중복을 줄이고 유지보수를 쉽게 하며, 필요한 동작과 디자인을 캡슐화해봐요!
중급이상
C#, winform, winforms
C# 프로그래밍 기초부터 실전 활용까지
₩24,200
5시간만
30%
₩16,940
입문 / C#, .NET
5.0
(9)
C#의 기초부터 활용까지 핵심만 콕 짚어 배우는 코드 위주 강의!
입문
C#, .NET
질문&답변
Xunit private 메서드 테스트
해당 문의 사항에 대한 강의가 업로드 되었습니다. 감사합니다. https://inf.run/NwUf1
질문&답변
자원정리 개념
인프런 AI 인턴의 설명이 훌륭하네요 ㅎㅎ제가 obj = null로 할당한 예제를 보여드린 것으로 약간 헷갈리신 것 같습니다. null 할당은 객체가 GC의 대상이 되도록 도울 수 있습니다. 왜냐면 GC는 참조가 되지 않은 객체를 메모리에서 제거하거든요.즉 변수에 null을 할당하는 것은 메모리에서 객체를 직접 해제하는 행위가 아닙니다. finally블록은 설명드렸다시피 return문을 만나더라 해도 반드시 실행이 보장되는 코드 블록입니다.그러하여 일반적으로 finally에는파일 스트림 (FileInputStream, FileOutputStream 등)네트워크 소켓 연결 (Socket)데이터베이스 연결 (Connection)그래픽 리소스 등위 항목의 자원을 정리할 때 주로 사용된다고 보시면 되겠습니다. 반드시 위와 같은 경우가 아니더라해도 제가 예제로 보여드린 바와 같이 더 이상 사용되지 않는힙 영역의 객체를 참조를 끊어주기 위해서도 종종 사용된다고 보시면 되겠습니다.
질문&답변
강의 영상 오류
수정하여 다시 업로드했습니다.불편함을 드려 죄송합니다.그리고 감사드립니다~!
질문&답변
Item 속성 Serializable 오류
안녕하세요. 상훈님 먼저 영상을 수강해주셔서 감사드립니다.본 강의에서는 .Net8 환경에서 촬영된 영상이다보니 별도로 직렬화 어트리뷰트를 작성하지 않아도 오류가 뜨지 않았습니다. 하지만 .Net Framework환경에서는 직렬화 어트리뷰트가 빠지게 되면 오류가 발생되는 현상이 있습니다.직렬화 어트리뷰트는 바로 다음 강의에서 나오는 [DesignerSerializationVisibility] 를 추가해주시면 되겠습니다. [Serializable] 는 일반적으로 디자이너에서 쓰이진 않습니다.따라서 직렬화 어트리뷰트를 [DesignerSerializationVisibility] 로 변경해주시면 되겠습니다. 궁금한 점이 있다면 언제든 질문주세요~ 감사합니다.^^
질문&답변
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 키워드는 확장 메서드가 어떤 타입의 변수에 대해 호출될 수 있는지, 그리고 호출 시 해당 변수가 메서드의 어떤 인자로 전달될지를 정의하는 역할을 합니다.
질문&답변
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);명시적으로 변환을 하는 것이기 때문에 오류가 발생하지 않습니다.감사합니다.
질문&답변
접근 제어자로 필드를 만들어 파생 클래스에서 사용할 때 질문입니다.
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(); } }더 궁금한 사항이 있으시다면 언제든지 질문주세요. 감사합니다. ^^
질문&답변
상속 부분 강좌에서 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 위 코드처럼 필요 시 업캐스팅을 하시면 되겠습니다.또 다른 질문이 있으시다면 언제든지 주세요. 감사합니다 ^^
질문&답변
정적 클래스, 확장 함수에서 매개변수로 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(); // 사용 불가능!! 이상입니다. ^^또 궁금한 점이 있으시다면 언제든 질문 주세요. 감사합니다.