C# 18

[C#] 객체 얕은 복사(Shallow Copy) 깊은 복사(Deep Copy)
얕은 복사(Shallow Copy) 얕은 복사는 객체의 참조만 복사하는 것입니다. 객체를 얕은 복사 하게 되면 스택에 있는 참조를 복사하게 됩니다. 즉 복사할 객체(source)의 참조값을 복사될 객체(target)에 대입하게 됩니다. 다음은 얕은 복사의 예제 코드입니다. public class Employee { public int No; public string Name; } public class Program { static void Main(string[] args) { Employee source = new Employee(); source.No = 1; source.Name = "Sana"; Employee target = source; target.No = 2; target.Name = "..
[C#] 정적(Static) 클래스(Class), 메소드(Method), 필드(Field)
정적 클래스(Static Class) 정적 클래스는 new 키워드를 사용해서 인스턴스를 만들 수 없습니다. 정적 클래스는 class 키워드 앞에 static 키워드를 선언해서 만듭니다. 정적 클래스의 모든 멤버는 static으로 선언되어야 합니다. 정적 클래스는 생성자를 포함할 수 없습니다. 정적 클래스는 객체들이 처음 호출될 때 생성되고 프로그램이 종료될 때 해제되기 때문에 정적 클래스는 어디서든 접근할 수 있습니다. 전역적으로 접근해야 하는 유틸리티 클래스를 만들 때 정적 클래스로 만들면 유용하게 사용할 수 있습니다. 다음은 정적 클래스의 예제 코드입니다. 정적 메소드(Static Method) 정적 메소드는 인스턴스를 직접 생성하지 않고 호출할 수 있습니다. 정적 메소드는 static 키워드를 선언..
[C#] 클래스(Class) 생성자(Constructor), 소멸자(Destructor)
생성자(Constructor) 생성자는 객체가 만들어질 때 정의하는 메소드입니다. 생성자의 이름은 클래스 이름과 동일하게 정의하고 반환형은 없고 매개변수를 가집니다. 생성자는 메소드와 마찬가지로 오버로딩이 가능하고 객체가 만들어질 때 직접 호출합니다. 생성자는 주로 객체의 필드를 초기화 할 때 사용합니다. 다음은 생성자의 예제 코드입니다. 출력결과 dog1 Name : 없음, Breeds : 없음 dog2 Name : 곰이, Breeds : 시바 소멸자(Destructor) 소멸자(종료자)는 객체가 없어질 때 정의하는 메소드입니다. 소멸자의 이름은 클래스 이름 앞에 ~를 붙여서 정의하고 반환형과 매개변수가 없습니다. 소멸자는 오버로딩 할 수 없으며 직접 호출할 수 없습니다. 소멸자는 CLR의 가비지 컬렉..

[C#] 클래스(Class)
클래스(Class) 클래스를 이해하기 이전에 먼저 객체 지향 프로그래밍(Object Oriented Programming)을 이해하는것이 필요합니다. 객체 지향 프로그래밍은 모든 것을 객체로 표현합니다. 사람, 사물, 동물 등은 모두 객체로 표현할 수 있습니다. 객체는 속성과 기능(또는 행위)을 가지고 있습니다. 사람을 예로 들면 이름, 나이, 성별을 속성으로 가질 수 있고, 잠자기, 밥먹기, 걷기 등을 기능으로 가질 수 있습니다. 이것을 코드로 표현하면 객체의 속성은 변수, 기능은 메소드로 표현할 수 있습니다. 앞에서 설명한 객체를 만들기 위해서는 클래스가 필요합니다. 클래스는 객체를 만들기 위한 틀이고 클래스를 통해 만들어진 것이 객체 입니다. 클래스를 통해 만들어진 객체는 인스턴스(Instance,..

[C#] 네트워크(Network)를 통한 클래스(Class) 직렬화(Serialize) 역직렬화(Deserialize)
네트워크를 통해서 클래스를 직렬화 역직렬화 하는 방법으로 다음과 같은 방법을 사용했습니다. 서버 클라이언트 하지만 위와 같은 방법으로 클래스를 직렬화 해서 역직렬화 했을 때 클라이언트쪽에서 다음과 같은 오류가 발생했습니다. 이 오류는 역직렬화 할때 클라이언트 쪽에서는 참조하는 어셈블리가 없기 때문에 클래스를 역직렬화 할 수가 없는 오류입니다. 같은 클래스를 정의해도 클라이언트 쪽에서는 어떤 클래스인지 인식할 수 없습니다. 오류를 해결하는 방법으로 DLL을 만들어서 어셈블리를 참조하는 방법으로 오류를 해결할 수도 있지만, 여기서는 Xml을 직렬화 한 후 역직렬화 하는 방식으로 설명드리겠습니다. 다음은 XmlSerializer 클래스를 이용한 클래스 직렬화 역직렬화를 방식입니다. NetworkStream에 ..

[C#] CLR(Common Language Runtime)
CLR(Common Language Runtime) CLR은 C# 프로그램이 실행되는 환경이고 .NET 프레임워크의 실행을 관리합니다. 자바를 아시는 분들은 CLR은 자바 가상 머신(Java Virtual Machine)과 비슷하다고 생각하시면 됩니다. C#으로 만든 실행파일은 네이티브 코드로 되어있지 않고 IL(Intermediate Language, 중간언어)로 되어있기 때문에 운영체제가 이해할 수 없습니다. C# 컴파일러는 C#으로 작성한 코드를 IL로 만들고 CLR은 프로그램 실행 시 IL을 운영체제가 이해할 수 있는 네이티브 코드로 바꿔줍니다. IL을 네이티브 코드로 바꾸는 것을 JIT(Just In Time, 적시 컴파일)이라고 하는데 필요한 코드를 실행할 때마다 실시간으로 컴파일해서 실행한다..

[C#] 데이터를 엑셀 파일로 저장하기
C#에서 엑셀 파일로 저장하기 위해서는 Microsoft Excecl Object Library를 참조로 추가해야 합니다. 솔루션탐색기에서 프로젝트 -> 참조 우클릭 - 참조 추가를 클릭 한 후 Microsoft Excel Object Library를 체크한 후 확인을 클릭합니다. 엑셀 파일에 저장하는 코드는 다음과 같습니다. ReleaseObject(object obj) : 엑셀 객체를 사용하고 난 후 반드시 엑셀 객체를 해제(Release)해 주어야 합니다. 셀에 데이터를 저장하기 위해서는 workSheet.Cells[row, column]를 사용하는데 row, column의 인덱스는 0이 아닌 1부터 시작해야 합니다. 소스 코드를 실행하게 되면 지정된 경로에 엑셀 파일이 저장되고 다음과 같은 결과를..
[C#] XML Serialize/Deserialize Class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 using System; using System.IO; using System.Xml.Serialization; public class XmlManager { public void Serialize(string path, T data) where T : class { if (data == null || path == null) return; using (StreamWriter sw = new StreamWri..