c#

    [C#] 대리자와 이벤트

    [C#] 대리자와 이벤트

    1. 대리자 (델리게이트) 만약 아래와 같이 숫자를 계산해 주는 메서드가 존재할 때 class Cal { public int Sum(int i, int j) { return i + j; } } 이 메서드를 호출해 계산을 수행하려면 다음과 같이 메서드를 호출할 수 있습니다. class Program { static void Main(string[] args) { Cal c = new Cal(); WriteLine(c.Sum(100, 200)); } } 에제에서 메서드를 호출하기 위해 c.Sum(100, 200)처럼 하였는데 이렇게 직접적으로 메서드를 호출하는 것이 아니라 다른 매개체를 통해서 필요한 메서드를 대신 호출할 수도 있는데 이때 사용되는 매개체를 '대리자'라고 합니다. 즉, 대리자를 통해서 다른 ..

    [C#] 예외처리

    [C#] 예외처리

    예외란 컴파일 단계에서 파악할 수 없는 오류로 대부분 프로그램 동작중에 발생하며 다른 말로 '런타임 에러'라고 표현하기도 합니다. class Program { static void Main(string[] args) { string name = args[0]; string greeting = args[1]; WriteLine($"{name}님 {greeting}"); } } 예제에서는 args매개변수를 통해 2개의 문자열을 구분해 처리하고 있습니다. 프로그램을 보면 문자열 값이 무조건 2개는 들어온다는 가정하에 만들어진 것으로 소스상으로는 아무런 문제가 없지만 사용자가 프로그램 실행 시 문자열 값을 하나만 주는 경우라면 예외가 발생하게 될 것입니다. 프로그램은 처리할 수 없는 예외상황을 마주하게 되면 문..

    [C#] 일반화 프로그래밍

    일반화 프로그래밍은 처리의 대상이 되는 '데이터'에서 '타입'이라는 개념만을 분리해 공통적으로 취급하고자 하는 것을 말합니다. 예를 들어 다음과 같이 매개변수를 받은 정수 1개를 그대로 반환하는 메서드가 존재하는 경우 class Cal { public int Print(int i) { return i; } } 이 상태에서 float형에 대한 Print() 메서드를 추가해야 한다면 다음과 같이 할 수 있을 것입니다. class Cal { public int Print(int i) { return i; } public float Print(float i) { return i; } } 문제가 되는 점은 똑같은 처리를 하는 메서드가 단지 데이터의 '타입'이 다르다는 이유만으로 중복해서 생성되고 있다는 점인데 바..

    [C#] 배열, 컬렉션, 인덱서

    1. 배열 배열의 기본적인 개념은 '같은 성격의 데이터를 여러 개 모아놓은 것'이라고 볼 수 있습니다. 예를 들어 어떤 학급의 학생별 시험 점수를 처리하기 위해 다음과 같이 변수를 선언했다면 class Program { static void Main(string[] args) { int 홍길송 = 70; int 홍길남 = 80; int 홍길순 = 50; int 홍길석 = 100; int 홍길병 = 70; } } 이를 배열로는 대괄호를 사용해 아래와 같이 선언할 수 있습니다. class Program { static void Main(string[] args) { int[] score = new int[5]; score[0] = 70; score[1] = 80; score[2] = 50; score[3] ..

    [C#] 프로퍼티(Property)

    1. 프로퍼티 C#에서 어떤 필드의 은닉성을 지키기 위해 필드에 값을 읽고 쓰는 메서드를 만들었다면 class Program { static void Main(string[] args) { Car car = new Car(); car.SetSpeed(100); car.GetSpeed(); } } class Car { private int speed; public int GetSpeed() { return speed; } public void SetSpeed(int i) { speed = i; WriteLine(speed); } } 같은 기능을 프로퍼티로 완벽하게 대체할 수 있습니다. class Program { static void Main(string[] args) { Car car = new Car(..

    [C#] 인터페이스와 추상클래스

    [C#] 인터페이스와 추상클래스

    1. 인터페이스 (Interface) 인터페이스는 클래스를 만들 때 특정 메서드를 반드시 구현하도록 강제하는 역할을 합니다. 바꿔 말하면 어떤 인터페이스를 상속받아 만들어진 클래스는 인터페이스에 명시된 메서드가 반드시 구현되어 있다는 것을 보증할 수 있습니다. 인터페이스는 interface키워드를 사용해 아래와 같은 방법으로 구현합니다. interface ICar { void Drive(); } ICar는 인터페이스의 식별자(이름)인데 반드시 그렇게 해야 하는것은 아니지만 관례상 인터페이스의 이름은 대문자 I로 시작합니다. 인터페이스 내부를 보면 Drive()라는 메서드의 이름만을 가지고 있습니다. 이것이 인터페이스의 특징으로 실제 구현되는 내용은 포함하지 않고 특정 메서드나, 이벤트, 인덱서, 프로퍼티..

    [C#] 메서드

    [C#] 메서드

    1. 메서드 기본 메서드는 함수와 비슷한 개념으로 특정 목적을 위해 작성된 코드를 묶어 놓은 것을 말합니다. 보통 클래스에 소속된 함수를 메서드라고 부르며 일반적인 함수와는 구분되는 개념입니다. using System; using static System.Console; namespace Test { class MyTestApp { static void Main(string[] args) { Plus(10, 20); } static void Plus(int i, int j) { WriteLine(i + j); } } } 예제에서는 Plus()메서드를 만들고 이를 Main() 메서드에서 호출하여 두 숫자의 합을 확인하고 있습니다. 필요에 따라 특정 메서드에서 자기 자신을 스스로 호출하는 경우도 있는데 이를..

    [C#] 제어문

    [C#] 제어문

    제어문이라 함은 말 그대로 프로그램의 흐름을 제어하는 프로그래밍 구문을 의미합니다. 1. 분기문 주어진 조건에 따라 프로그램의 흐름을 분기하여 처리합니다. ● if 주어진 조건이 참인 경우 이하 구문을 실행합니다. static void Main(string[] args) { bool b = true; if (b == true) WriteLine("b는 참"); //b가 true이므로 해당 문장 실행 } 제어문은 기본적으로 구문 이후에 나오는 단 하나의 문장(; 기준)만을 평가 대상으로 합니다. 실행해야 할 구문이 여러 줄이라면 { 와 } 로 실행할 문자를 묶어줄 수 있습니다. static void Main(string[] args) { bool b = true; if (b == true) { //{ 부터..