내가 일하며 알게 된 프로그래밍
article thumbnail
C# Winform vs WPF
프로그래밍/ETC 2024. 5. 13. 16:40

최근 개인 프로젝트를 진행하면서어떤 모델로 개발을 해야할까 싶은 생각에뉴비 시절 WPF를 썼던 기억이 다시금 떠올라이번에는 Winform으로 개발을 해봐야겠다는 생각이 들었다.(WPF을 수준급으로 하는것도 아니지만 Winform도 궁금했다)큰 규모의 프로젝트는 아니고연애 시뮬레이션처럼 지문과 선택지 노드들을 생성하고 노드끼리의 순서를 연결하여데이터 형태로 추출하는 프로젝트가 필요했다.(절대로 내가 미연시를 하려고 시작한 건 아니다)아직 프로젝트 개발중이지만 지금까지의 느낀점을 몇가지 적어보려고한다. 렌더링 차이- 진행하는 프로젝트가 [대화상자를 이어가는 툴] 이라고 생각했기에 굳이 렌더링에 대한 필요도는 높지 않았다.Winform : GDI+에 의존하여 렌더링을 한다.WPF : DirectX로 렌더링을 ..

article thumbnail
Struct와 Class의 차이
프로그래밍/C# 2023. 8. 3. 00:10

Struct와 Class의 차이를 깊게 생각하지 않고 사용한다면 단순한 객체로 활용할 것이다. 이번엔 두 기능의 차이점에 대해 알아보자. 1. 형식 Struct : ‘구조체 형식’은 데이터와 관련 기능을 캡슐화할 수 있는 값 형식입니다. 구조체 형식은 struct 키워드를 사용하여 정의 값 형식 - C# 참조 값 형식과 참조 형식, 값 형식의 종류, C#의 기본 제공 값 형식 learn.microsoft.com Class : 클래스는 참조 형식 으로 데이터에 대한 참조를 저장 참조 형식 - C# 참조 참조 형식(C# 참조) 아티클 04/07/2023 기여자 12명 피드백 이 문서의 내용 --> C# 형식은 참조 형식과 값 형식 두 가지가 있습니다. 참조 형식의 변수에는 데이터(개체)에 대한 참조가 저장되..

article thumbnail
Partial Class를 사용하는 이유
프로그래밍/C# 2023. 8. 1. 23:12

Partial : 부분적, 일부분의 ... C#에서 partial class란 두 개 이상의 파일에 걸쳐 정의된 하나의 클래스를 말한다. public partial class ClassA { public void Function1() { } } public partial class ClassA { public void Function2() { } } 위처럼 ClassA는 2개의 클래스로 분리되어 정의되어 있지만 각 클래스 내부에서는 Function1과 Function2를 정의하고 있으며 public void Main() { ClassA myClass = new ClassA(); myClass.Function1(); myClass.Function2(); } Partial된 클래스의 함수를 모두 호출할 수 ..

article thumbnail
C#과 다중 상속
프로그래밍/C# 2023. 8. 1. 00:01

C#에서 다중상속이 안되는 이유를 말해보라고 하면 다들 알지만, 선뜻 이런 이유에서 안된다 라고 바로 생각이 안나는 경우가 있다. 왜 안되는지 하나씩 짚어보자 다중 상속이란, 둘 이상의 클래스를 동시에 상속하는 것을 말한다. 이를 지원하는 언어로는 C++이 있지만 이 다중상속에는 많은 문제가 있다. (C++에서도 다중상속을 지원하지만 상호참조라는 문제가 있다) 1. 메서드 충돌 : 서로 다른 부모 클래스로부터 상속받은 메서드 이름이 같다면, 어떤 메서드를 호출해야 하는지에 대한 모호한 부분이 발생한다 public class ClassA { public virtual void Function() { } } public class ClassB { public virtual void Function() { }..

article thumbnail
Static 클래스
프로그래밍/C# 2023. 7. 31. 21:41

C#에서 정적 클래스 (static class)는 특별한 종류의 클래스로 객체의 인스턴스를 생성하지 않고 사용할 수 있는 클래스를 말한다. 보통 유틸리티 함수들, 헬퍼 함수들을 제작하는데 사용된다. Static 클래스를 사용하는 여러가지 이유는 1. 객체를 인스턴스 생성 없이 사용한다는 점 2. 전역에서 접근이 용이하다는 점 3. 네임스페이스를 통해 그룹화하여 코드의 구성과 가독성을 개선할 수 있다는 점 등등 많은 이유가 있지만 가장 큰 이유는 인스턴스가 필요하지 않기 때문에 더 적은 공간을 차지한다는 점이라고 생각한다. 예시 public static class MathUtility { public static int Add(int a, int b) { return a + b; } public stati..

article thumbnail
C# Array, List, ArrayList 차이
프로그래밍/C# 2023. 4. 23. 23:07

C#에서 Array, List, ArrayList는 모두 데이터를 저장하는데 사용되는 컬렉션 타입이다. 각 특징이라하면 1. Array -고정된 크기의 요소들을 저장할 수 있는 컬렉션 -배열의 크기는 생성 시점에 결정, 변경 불가능 -인덱스를 사용하여 요소에 직접 액세스 가능 -다차원 배열도 지원 2. List -동적으로 크기가 조정될 수 있는 컬렉션 -요소의 추가, 삭제, 수정 등이 자유로움 -인덱스를 사용하여 요소에 직접 액세스 가능 -Generic으로 구현되어 타입 안정성 보장 3. ArrayList -동적으로 크기가 조정될 수 있는 컬렉션 -요소의 추가, 삭제, 수정 등이 자유로움 -인덱스를 사용하여 요소에 직접 엑세스 가능 -박싱, 언박싱으로 인한 성능 저하가 있을 수 있음 일단 공통점은 위의 ..

article thumbnail
C# String과 StringBuilder
프로그래밍/C# 2023. 4. 15. 19:31

C#에서의 string은 string MSDN 변경불가능한 데이터 형식으로 수정할 수 없다. MSDN의 설명에서 그러하듯 string은 immutable 데이터 형식으로 수정할 수 없다. 따라서 string str = "Hello"; str += "World"; 위 처럼 수정하는건 사실 수정이 아니라 새로운 문자열 개체를 생성한다. str 문자열을 수정하는 += "World"; 에서는 Hello에 World를 포함한 실제로 새로운 문자열 개체가 생성되며, 기존의 "Hello" 문자열 개체는 GC에 의해 해제된다. 따라서 string은 문자열 조작 작업이 많다면 string보단 StringBuilder를 사용하는 것이 올바른 방법으로 보인다. StringBuilder MSDN 그러면 StringBuilde..

article thumbnail
C# 8.0의 달라진 Switch문
프로그래밍/C# 2021. 12. 28. 00:09

Unity 버전이 2021로 버전업이 되면서 Unity C#에 대한 언어 버전이 C# 8.0으로 업데이트 되었다. 이번 C# 8.0에서 많은 새로운 기능이 추가되었지만 이번에 다룰 내용은 Switch문의 개선이다 패턴 일치 개선 사항: Switch 식 속성 패턴 튜플 패턴 위치 패턴 우리가 기존에 알고 익숙하게 사용 하던 Switch 문의 사용 방식 switch (type) { case ItemType.SWORD: { name = "SWORD"; break; } case ItemType.SHIELD: { name = "SHIELD"; break; } case ItemType.ARMOR: { name = "ARMOR"; break; } case ItemType.NONE: default: { break; }..