[C#] 자습서 10장 - 델리게이트
·
개발/C#
델리게이트(Delegate) 델리게이트(Delegate)는 메서드를 가리키는 참조형이다. C++의 함수 포인터에 대응하는 개념이되 타입 체크가 더 엄격하고 클래스 소속의 메서드도 가리킬 수 있어 객체지향적이다. 지정자 delegate 리턴타입 이름(인수목록); 키워드 delegate로 선언하며 이름은 원하는대로 붙인다. 가리킬 메서드의 리턴 타입과 인수 목록을 모두 밝혀야 델리게이트로부터 메서드를 정확히 호출할 수 있다. 완전한 형식을 요구하기 때문에 별 의미는 없지만 인수 목록의 형식 인수 이름도 다 적어야 한다. delegate void deleA(int, string, double); // 에러 delegate void deleA(int a, string b, double c); // 이렇게 형식 ..
[C#] 자습서 9장 - 인터페이스
·
개발/C#
인터페이스 메서드의 목록만 가지는 타입. interface 키워드로 선언하며 대문자 I로 시작하는 것이 관례이다. 지정자 interface 이름 : 기반인터페이스 { // 메서드 목록 } 인터페이스의 멤버는 추상 메서드이기 때문에 객체를 생성할 수 없고 메서드를 물려주는 역할만 한다. 인터페이스로부터 상속받는 클래스는 인터페이스의 모든 메서드를 구현해야 한다. 인터페이스는 추상 클래스와 유사한데 추상 클래스는 일부 메서드만 추상인데 비해 인터페이스는 모든 메서드가 추상이라는 점이 다르다. 또 다른 차이점으로는 인터페이스는 다중 상속에도 사용할 수 있다는 점이 있다. interface IUnit { void Move(int x, int y); void Attack(int x, int y); void Die..
[C#] 자습서 8장 - 상속(2)
·
개발/C#
멤버 숨기기 상속을 받으면 자식은 부모의 모든 멤버를 물려받게 된다(선택적으로 받을 수 없음). 하지만 물려받은 멤버를 새로 정의하여 원하는 기능을 부여할 수 있다. 부모의 메서드를 자식이 다시 정의하면 부모의 메서드는 숨겨지게 되는데 이때 메서드에 new 지정자를 붙인다. 부모의 메서드를 자식이 다시 정의해도 가려지기만 할 뿐 여전히 상속은 되어서 숨겨진 부모의 멤버를 참조할 때는 base 키워드를 사용하면 된다. class Base { public int a; } class Derived : Base { public new double a; } internal class Program { private static void Main(string[] args) { Base B = new Base(); ..
[C#] 자습서 7장 - 상속(1)
·
개발/C#
객체지향의 3대 요소 은닉성, 상속성, 다형성 은닉성(캡슐화) : 값의 보호를 위해 객체의 필드, 메서드를 감추거나 들어내는 것. 상속성 : 부모 클래스로부터 새 클래스를 정의 상속 받는 순간 부모의 모든 기능을 물려받음. 다형성 : 한 부모에게서 다양한 클래스들이 만들어짐. 부모의 클래스 변수에 자식 객체를 담을 수 있음. 상속 상속은 이미 정의해 놓은 클래스로부터 새 클래스를 정의하는 기법이다. 기존의 클래스를 '부모/기반 클래스'라고 하며 상속에 의해 새로 만들어지는 클래스를 '자식/파생 클래스'라고 한다. (필자는 부모, 자식 클래스가 좀 더 익숙한 느낌이어서 앞으로도 그렇게 쓰겠다) 생성자, 파괴자 등의 특수한 몇 개를 제외한 모든 멤버가 상속되며 액세스 지정은 유지된다. private 멤버 또..
[C#] 자습서 6장 - 함수
·
개발/C#
함수는 특정 작업을 분담하는 코드 덩어리에 이름을 붙여 놓은 것이다. 함수를 이용하면 불필요한 반복을 제거하며 필요할 때마다 호출할 수 있고 코드의 재사용성이 향상된다. 메서드 객체지향 기법에서 함수는 전역으로 존재할 수 없고 클래스에 소속된다. 클래스에 소속되는 함수를 '메서드'라고 부르며 객체에 대한 작업을 담당한다(C++ 의 멤버 함수와 같은 의미). 구체적인 동작을 상징하는 짧은 동사와 목적어의 조합으로 이름을 짓는데 WriteLine이 좋은 예이다. 이름을 잘 붙여 놓으면 동작을 쉽게 짐작할 수 있는 것이다. internal class Program { static public int CalcSum(int from, int to) { int sum = 0; for (int i = from; i
[C#] 자습서 4장 - 제어문
·
개발/C#
조건문 조건문은 조건의 진위 여부에 따라 명령의 실행 여부를 결정하는 문장이다. 조건이 참일 때만 뒤쪽의 명령을 수행하며 거짓이면 명령을 무시한다. else문은 조건이 거짓일 때 실행할 명령을 지정하며 생략도 가능하다. if(조건) 명령1; else 명령2; internal class Program { private static void Main(string[] args) { int i = 3; if (i == 3) Console.WriteLine("i는 3이다."); else Console.WriteLine("i는 3이 아니다."); } } 간단한 예시이다. i 변수에 3이 저장되어 있으므로 결과는 "i는 3이다." 가 출력된다. 명령문이 한 줄이면 바로 밑에 써도 되지만 2줄이상이 된다면 {} 안에 ..
[C#] 자습서 3장 - 변수
·
개발/C#
타입(Type) 닷넷의 타입은 System 네임스페이스에 구조체나 클래스로 정의되어 있다. 타입에 따라 변수의 크기와 부호 여부가 다르다. 닷넷의 타입은 크게 값(value) 타입과 참조(reference) 타입으로 분류되며 기억장소와 관리 방법이 완전히 다르다. 값(value) 타입: 스택(stack)에 할당되며 변수가 직접 값을 가진다. 정수, 실수 등의 내장형과 열거형, 구조체 등이며 크기가 작고 길이가 일정한 값을 저장한다. 선언하는 즉시 기억장소가 할당되어 바로 사용할 수 있다. 참조(reference) 타입: 값을 가지지 않고 값이 저장된 위치만 가진다. 선언 후 힙(heap)에 기억장소를 따로 할당해야 사용할 수 있다. 실제값은 힙에 저장되며 가비지 컬렉터가 관리한다. 문자열, 클래스, 배..
[C#] 자습서 2장 - 입출력
·
개발/C#
입출력 닷넷의 입출력 닷넷의 입출력은 System 네임스페이스의 Console 클래스가 제공한다. 따라서 입출력 기능을 사용하려면 소스 선두에 using System; 이라고 선언을 해야 한다. 사용자 입력(Console.ReadLine()) 사용자에게 입력을 받는 방법은 ReadLine() 메서드를 이용하는 것이다. 문자열로 입력받기 때문에 형식이 간단하며 인수없이 그냥 호출한다. 입력 받은 값을 정수값으로 쓰고자 한다면 ex) 나이, 숫자.. 받은 입력값을 int형으로 변환할 수 있다. using System; private static void Main(string[] args) { Console.Write("이름을 입력하세요: "); string Name = Console.ReadLine(); C..