본문 바로가기

C#80

[C#/Unity][디자인패턴] 추상 팩토리 패턴(Abstract Factory Pattern) 1. 추상 팩토리 패턴이란? - 관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우 사용됨. - 관련 객체들의 구상 클래스들을 지정하지 않고도 관력 객체들의 모음을 생성할 수 있도록 하는 생성패턴 - 연관성이 있는 객체 군이 여러개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화 하는 생성 패턴. 2. 팩토리 메서드 패턴과의 공통점과 차이점 - 먼저, 추상 팩토리 패턴이 팩토리 메서드 패턴의 상위 호환이 아니라는 것에 주의! - 팩토리 메서드 패턴은 어떤 객체를 생성할 지에 집중하고, 추상 팩토리 패턴은 연관된 객체들을 모아둔다는 것에 집중함. - 조건에 따라 객체 생성을 팩토리 클래스로 위임하여 팩토리 클래스에서 객체를 생성하.. 2023. 11. 13.
[C#/Unity][디자인패턴] 팩토리 메서드 패턴(Factory Method Pattern) 1. 팩토리 메서드 패턴이란? - 생성하는 공장은 단 한 개만 존재, 하지만 자식 클래스에 의해 여러 방식들로 구현 가능! - 객체를 생성하는 방법을 해당 클래스를 상속 받은 클래스에서 명시하도록 하는 패턴 - 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생설될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴 - 클래스에서 객체를 생성하기 위해 일반적으로 생성자를 만들지만 팩토리 메서드 패턴을 사용하면 이런 행위를 위임받아서 실행함. 2. 팩토리 메서드 패턴을 사용하는 경우 1) 코드가 높은 수준의 유연성을 제공해야 할 경우 2) 프로그램의 뼈대를 만들 경우 3) 추후 확장이 필요할 수 있는 경우 3. 팩토리 메서드 패턴의 장점 1) 유지보수 용이 : 객체의 생성을.. 2023. 11. 9.
[C#/Unity][디자인패턴] 싱글톤 패턴(Singleton Pattern) 1. 싱글톤 패턴이란? - 런타임 동안 "단 하나의 인스턴스만을 생성"하는 패턴 - 싱글톤 패턴이 적용된 객체는 하나의 인스턴스만 생성할 수 있고, 다른 객체에서 싱글톤 객체의 인스턴스를 생성하려 할 경우, 기존에 생성된 인스턴스가 있다면 해당 인스턴스를 반환하는 형태로 사용됨. - 모든 데이터를 전역으로 관리하여 쉽게 접근할 수 있게 하는 것 - 객체의 메모리를 정적으로 할당하여 하나의 객체에만 접근하는 방법 2. 싱글톤 패턴을 사용하는 경우 1) 공통된 객체를 여러개 생성해서 사용해야 하는 경우 2) 인스턴스가 절대적으로 한 개만 존재해야 한다는 것을 명시하고 싶은 경우 3. 싱글톤 패턴의 장점 1) 편리성 : 최초로 생성된 객체 하나에만 접근하게 되므로 데이터를 접근하고 수정하는데 용이함. 2) 중.. 2023. 11. 8.
[C#] 리플렉션(Reflection) 1. 리플렉션(reflection)이란? - 애플리케이션 실행 중 어셈블리의 내용(메서드, 프로퍼티, 생성자 등, 인스턴스의 데이터 타입 정보)을 확인하거나 검사하려는 경우 사용되는 기능 - 프로그램 실행 도중에 객체의 정보를 조사하거나, 다른 모듈에 선언된 인스턴스를 생성하거나, 기존 개체에서 형식을 가져오고 해당하는 메소드를 호출, 또는 해당 필드와 속성에 접근할 수 있는 기능을 제공한다. - 컴파일 시에 알 수 없었던 타입이나 멤버들을 찾아내고 사용할 수 있게 해주는 메커니즘 2. 리플렉션의 목적 - 애플리케이션 개발시, 디버깅 또는 런타임에 알 수 없는 객체의 동작을 분석하기 위함. - 외부 라이브러리에 존재하는 클래스 및 메서드를 분석하기 위함. - 개발 도구 자체를 개발하거나 분석도구를 만들때.. 2023. 11. 1.
[개발 지식][C++/C#] 얕은 복사, 깊은 복사 1. 얕은 복사(shallow copy) - 한 객체의 모든 멤버 변수의 값을 다른 객체로 복사 - 실제 포인터가 가리키는 값은 같기 때문에 한 쪽이 변하면 다른 한 쪽도 따라서 변함 2. 깊은 복사(deep copy) - 한 객체의 모든 멤버 변수의 값 뿐만 아니라, 포인터 변수가 가리키는 모든 객체에 대해서도 복사 - 포인터까지 복사가 되어 생기는 것으로, 한 쪽이 아무리 바뀌어도 다른 한 쪽에는 영향이 없음 3. 소스코드(C++) // c++ #include #include #include #define _CRT_SECURE_NO_WARNINGS using namespace std; class Student { public: char* name; int age; Student(const char* .. 2023. 10. 31.
[C#][Study] 확장 메서드(Extension Method) 1. 확장 메서드 - 기존 클래스의 기능을 확장하는 기법(상속과는 다름) - 클래스 외부에서 클래스의 메서드처럼 사용할 수 있는 새로운 메서드를 만들 수 있는 기능 2. 확장 메서드 생성방법 1) static class 2) static method 3) 첫번째 매개변수 this 키워드 using System; namespace StudyCSharp { class Program { static void Main(string[] args) { int a = 10; int b = 20; // int의 메서드처럼 IntToString 함수를 사용가능 string A = a.IntToString("aaaa"); string B = b.IntToString("bbbb"); Console.WriteLine(A); .. 2023. 10. 4.
[WPF][MVVM][Study] MVVM 실습 4 - 주소록 만들기 MVVM을 이용해 주소록을 만드는 과정을 실습하였다. ⚠️주의 : dll 파일 오류로 인해 실행이 안될 수 있음! 0. 파일 구조 - 파일 구조는 아래와 같다. 1. MainView[View] 1) xaml 2) code-behind // MainView.xaml.cs using System.Windows; using WPF_MVVM_EX_4_2.Interface; namespace WPF_MVVM_EX_4_2.View { /// /// MainView.xaml에 대한 상호 작용 논리 /// public partial class MainView : Window , IWindowView // 인터페이스 IWindowView 상속 { // 생성자 public MainView(ViewModel.MainView.. 2023. 9. 27.
[WPF][MVVM][Study] ReactiveUI 다운 UI를 화면에 바로바로 연동시키기위해 Notify~로 시작하는 인터페이스를 상속받아 사용할 수 있다. 그런데 이를 좀 더 편하게 사용하고자 만들어 놓은 라이브러리가 있는데 그것이 ReactiveUI이다. 찾고 다운받고 이러는데 엄청 힘들었어서 다음에도 이런일이 있을까봐 미리 dll 파일만 올려놓는다. 이 파일의 압축을 풀고 비주얼 스튜디오 솔루션 탐색기에서 참조를 오른쪽 클릭하여 참조추가 버튼을 누른 뒤 찾아보기로 들어가 이 파일속 모든 dll 파일을 드래그하여 넣어주면 된다. 2023. 9. 26.
[WPF][C#][Study] DataGrid 컨트롤 DataGrid 컨트롤 - ListView와 비슷하지만 추가기능 제공(데이터에 따라 열 자동 생성, 편집 가능) [예제 1] - DataGrid 기본 형태 1) xaml 2) code-behind using System; using System.Collections.Generic; using System.Windows; namespace WpfTutorialSamples.DataGrid_control { public partial class SimpleDataGridSample : Window { public SimpleDataGridSample() { InitializeComponent(); List users = new List(); users.Add(new User() { Id = 1, Name =.. 2023. 9. 25.
[C#][Study][기초다지기] Action, Func, Predicate 1. 사용 목적 - 딜리게이트 선언의 불편함을 보완 ex) delegate 사용 delegate void DelegateFunction(); // 이렇게 매번 선언을 해줘야 하는 불편함이 있음 static void Main(string[] args) { DelegateFunction df = () => Console.WriteLine("실행"); // 아래 두가지 방법 중 하나로 실행 가능 df(); // 실행 방법 1 df.Invoke(); // 실행 방법 2 } ex) Action 사용 static void Main(string[] args) { Action ac = () => Console.WriteLine("실행"); ac(); ac.Invoke(); } - 이처럼 간결하게 나타낼 수 있다. 2... 2023. 9. 25.
[C#][Study][기초다지기] 제네릭 Generic 제네릭 - 코드 type 안전성, 성능 및 코드 유용성을 향상시킴 - 대부분 Generic은 컬렉션 클래스를 생성하는데 사용됨(List, Vector 등) - System.Collections.Generic 네임스페이스를 추가해 제네릭을 사용할 수 있음 - 자신만의 코드를 만들 수 있음 1) 선언 public class GenericList { void Add(T input) { } } 2) 사용 class TestGenericList { private class ExampleClass { } static void Main() { // int형 리스트 GenericList list1 = new GenericList(); // string형 리스트 GenericList list2 = new GenericL.. 2023. 9. 23.
[C#][Study][기초다지기] 다형성 다형성 1) 정적 다형성(컴파일 다형성) - 컴파일 시간동안 함수를 객체와 바인딩 - 프로그램을 작성하는 동안 객체로 함수에 태그를 지정(초기 바인딩) - 함수 오버로딩이 해당 2) 동적 다형성(런타임 다형성) - 후기 바인딩(Late Binding), 메서드 재정의(Method Override) 라고도 함 - virtual 또는 override 키워드를 사용해 기본 클래스 함수를 재정의 함 3) 오버로딩 - 매개변수에 따라 함수가 다르게 동작 4) 오버라이딩 - 이름과 매개변수, 리턴형이 모두 같지만 다른 동작을 하는 것을 의미 2023. 9. 23.