본문 바로가기

C# 18

[C#] 인터페이스(Interface)

인터페이스(Interface) 인터페이스는 약속입니다. 차는 우측 방향으로 통행해야 하고, 초록불일때 통행을 해야하는 것 처럼 인터페이스는 클래스가 따라야 하는 약속을 정의합니다. 즉 인터페이스는 인터페이스로부터 파생된 클래스가 어떤 메소드를 구현할지를 정의합니다. 인터페이스에서 정의한 메소드는 파생된 클래스에서 반드시 구현해야 합니다. 인터페이스는 다음과 같은 특징을 가지고 있습니다. 인스턴스를 만들 수 없음 접근 제한자(Access Modifier)를 사용할 수 없고 모두 public으로 선언됨 메소드(Method), 이벤트(Event), 인덱서(Indexer), 프로퍼티(Property)만을 가짐 파생 클래스는 인터페이스에 선언되어 있는 모든 메소드(Method), 프로퍼티(Property)를 구현..

C#
·
2020. 5. 11.
·

[C#] DLL 파일 생성

DLL은 동적 링크 라이브러리(Dynamic Link Library)의 약자로 표준화된 함수나 데이터를 모아놓은 것을 의미합니다. DLL 파일을 만들기 위한 방법은 다음과 같습니다. DLL 파일 생성 1. Visual Studio에서 클래스 라이브러리(.NET Framework)로 프로젝트를 생성합니다. 2. 프로젝트를 생성한 후 라이브러리로 만들고자 하는 코드를 작성합니다. 3. 코드 작성 후 빌드 -> 솔루션 빌드(Ctrl + Shift + B)를 클릭합니다. 4. 솔루션 빌드 후 프로젝트 폴더의 bin\Debug로 이동하면 DLL 파일이 생성된 것을 확인할 수 있습니다. DLL 파일 참조 만들어진 DLL 파일을 사용하기 위해서는 DLL 파일을 참조해야 합니다. 새로운 프로젝트를 하나 만들겠습니다. ..

C#
·
2020. 4. 21.
·

[C#] CSV 파일 읽기

CSV는 comma-separated valued의 약자로 쉼표(,)로 분리된 텍스트 파일을 의미합니다. CSV 파일을 읽기 위해서는 CSV 파일이 필요합니다. 메모장 등으로도 CSV 파일을 만들 수 있지만 저는 엑셀로 만들어 보겠습니다. 엑셀을 실행해서 데이터를 입력합니다. A1에 #을 붙이는 이유는 키(Key)라는 것을 알려주기 위함입니다. 입력한 데이터를 파일형식을 CSV UTF-8로 선택해서 저장합니다. UTF-8은 거의 모든 언어를 표현할 수 있기 때문에 UTF-8로 저장하는 것을 권장합니다. CSV 파일을 읽기 위한 코드를 작성합니다. 코드는 다음과 같습니다. using System; using System.IO; using System.Text; namespace CSVReader { cla..

C#
·
2020. 4. 21.
·

[Visual Studio] 디버깅시 Microsoft 기호 서버에서 기호 파일(Symbol File) 로드 해제 방법

Visual Studio에서 프로젝트 디버깅 시(F5) 다음과 같이 ‘Microsoft 기호 서버에서 로드하는 중’ 이라는 내용이 뜨면서 디버깅 시간이 오래 걸리는 경우가 있습니다. 이는 프로그램에 대한 디버깅 정보를 저장하는 기호 파일(Symbol File)이 로드되지 않았기 때문에 Microsoft 서버에서 기호 파일을 로드 하는 과정에서 시간이 오래 걸리게 됩니다. Microsoft 서버에서 기호 파일을 로드 하지 않으려면 다음과 같이 해주면 됩니다. 1. Visual Studio에서 디버그 -> 옵션을 클릭합니다. 2. 옵션창에서 디버깅 -> 기호에서 기호 파일(.pdb) 위치에서 Microsoft 기호 서버를 체크 해제한 후 확인을 클릭합니다.

C#
·
2020. 3. 26.
·

[C#] 오버로딩(Overloading), 오버라이딩(Overriding)

오버로딩(Overloading) 오버로딩의 사전적 의미는 과적하다 입니다. 오버로딩은 하나의 메소드에 여러 가지로 구현하는 것을 말합니다. 오버로딩을 하게 되면 하나의 메소드에 여러 개의 구현을 과적할 수 있습니다. 오버로딩은 같은 메소드 이름으로 매개 변수의 개수 또는 타입을 다르게 정의할 수 있습니다. 동일한 역할을 하는 메소드의 경우 이름을 다르게 할 필요 없이 매개 변수의 개수 또는 타입만 다르게 정의하면 됩니다. 오버로딩을 활용 하면 메소드 이름을 새로 지을 필요가 없을 뿐만 아니라 코드를 일관성 있게 유지해 줍니다. 컴파일러는 매개 변수의 개수와 타입을 분석해서 어떤 메소드를 실행할지 찾습니다. 다음은 오버로딩의 예제 코드입니다. namespace Overloading { class MainA..

C#
·
2020. 3. 24.
·

[C#] 엑셀 파일로부터 데이터 불러오기

C#에서 엑셀 파일을 불러오기 위해서는 Microsoft Excecl Object Library를 참조로 추가해야 합니다. Microsoft Excecl Object Library 참조 추가 방법은 [C#] 데이터를 엑셀 파일로 저장하기 를 참조하시면 됩니다. 엑셀 파일로부터 불러오기 위한 샘플 데이터로 다음과 같은 데이터를 사용하겠습니다. 엑셀 파일을 불러오는 코드는 다음과 같습니다. using System; using System.IO; using System.Runtime.InteropServices; using Excel = Microsoft.Office.Interop.Excel; namespace ImportExcel { class Program { static Excel.Application ..

C#
·
2020. 2. 14.
·

[C#] 접근 한정자(Access Modifier)

접근 한정자(Access Modifier) 접근 한정자는 클래스, 구조체, 필드, 메소드 델리게이트 등에 대해서 노출 수준을 설정하는 것입니다. 일반적으로 외부로부터 노출할 필요가 없는 경우에는 private 접근 한정자를, 외부로부터 노출할 필요가 있는 경우에는 public 접근 한정자를 사용합니다. 클래스 내부에서 접근 한정자를 설정하지 않은 필드, 메소드 등은 private 접근 한정자로 설정됩니다. 객체 지향 프로그래밍의 특성 중 캡슐화(Encapsulation)라는 특성 때문에 접근 한정자를 설정하는 것은 매우 중요합니다. 필요한 부분만 공개하고 불필요한 부분은 숨김으로써 소프트웨어 간의 결합도를 낮추고 응집도를 높일 수 있습니다. 결합도를 낮추고 응집도를 높이는 소프트웨어 설계를 하려면 변경되..

C#
·
2020. 2. 13.
·

[C#] 사용자 정의 컨트롤(UserControl) 사용법

윈폼(WinForm)에서는 기존에 제공하는 컨트롤(Control)을 조합해서 새로운 사용자 정의 컨트롤을 만들 수 있습니다. 사용자 정의 컨트롤을 만들게 되면 다른 프로젝트에서 재사용 할 수 있기 때문에 생산성을 높일 수 있습니다. 사용자 정의 컨트롤의 이해를 돕기 위해 날짜 확인 버튼 클릭 시 오늘 날짜가 메시지 박스로 출력되고, 시간 확인 버튼 클릭 시 현재 시간이 메시지 박스로 출력되는 예제를 만들어 보겠습니다. 사용자 정의 컨트롤 생성 Visual Studio에서 새 프로젝트 -> Windows Forms 컨트롤 라이브러리를 선택 후 프로젝트 이름을 UserDateTime으로 입력하고 프로젝트를 생성합니다. 프로젝트 생성 후 다음과 같이 컨트롤을 위치시키고 컨트롤의 속성 값을 설정합니다. Tabl..

C#
·
2020. 2. 4.
·

[C#] WinForm 스레드(Thread)에서 컨트롤(Control) 호출

스레드에서 직접 컨트롤을 접근하게 되면 크로스 스레드 에러가 발생합니다. 스레드에서 컨트롤을 접근하는 것은 컨트롤을 일관되지 않은 상태로 만들 수 있고, 심각한 오류나 프로그램 중단을 초래할 수 있습니다. 따라서 스레드에서 직접 컨트롤을 접근하는 것은 안전하지 않은 호출 방법입니다. 다음은 크로스 스레드 에러를 발생시키는 예제 코드입니다. private void Button1_Click(object sender, EventArgs e) { thread = new Thread(SetName); thread.Start(); } private void SetName() { txtName.Text = "SSABI"; // 크로스 스레드 에러 발생! } 크로스 스레드 에러를 해결하게 위해서는 System.Wind..

C#
·
2020. 1. 23.
·

[C#] this

this this 키워드는 객체 내부에서 필드나 메소드에 접근할 때 사용하는 키워드입니다. 메소드의 인자와 필드의 이름이 같을 경우 this 키워드를 통해 객체 내부의 필드를 접근할 수 있습니다. 다음은 this 키워드의 예제 코드입니다. class Phone { private string number; private string name; public Phone(string number, string name) { this.number = number; this.name = name; } } this() 생성자 this() 생성자는 자기 자신의 생성자를 호출할 때 사용합니다. 생성자 이름을 사용해서 생성자를 사용할 수 있지만 이름을 간략하게 하기 위해 this() 생성자를 사용할 수 있습니다. 다음은 ..

C#
·
2020. 1. 22.
·
반응형