람다식을 알아보기 전에 익명 메소드부터 알고 있으면 편하기 때문에 익명 메소드에 대해 먼저 설명을 해야겠다. 익명메소드는 말 그대로 이름이 없는 메소드입니다. 메소드인데 어떻게 이름이 없을까? 다음 코드를 보면 익명 메소드가 뭔지 감이 잡힐 것이다. delegate int Calc(int a, int b); public static void Main() { Calc calc; calc = delegate (int a, int b) { return a + b; } } 익명메소드는 자신을 참조할 델리게이트 형식과 동일한 형식으로 선언되어야 한다. 델리게이트의 반환 형식이 int 면 익명메소드의 반환 형식도 int여야하고 델리게이트의 매개 변수 목록이 3개면 익명메소드의 매개 변수고 3개를 받아와야 한다. 마..
델리게이트 C#에서 이 델리게이트는 콜백을 구현하기 위해 사용이 된다. 델리게이트는 메소드에 대한 참조이다. 델리게이트에 메소드의 주소를 할당한 후 델리게이트를 호출하면 이 델리게이트가 메소드를 호출해준다. 한정자 delegate 반환형식 델리게이트명(매개변수); 델리게이트는 delegate 키워드를 제외하고는 메소드와 매우 유사하다. 메소드의 참조이기 때문에 자신이 참조할 메소드의 반환 형식과 매개 변수를 명시해줘야 한다. 한가지 알아둬야 할 것은 델리게이트는 인스턴스가 아닌 형식(Type)이라는 것이다. int, string과 같은 형식이다. 따라서 메소드를 참조하기 위해서는 인스턴스를 따로 만들어야 한다. delegate double TestDelegate(double num1, double num..
일반화 어떤 특수한 개념으로부터 공통된 개념을 찾아 묶는 것을 말한다. 일반화 프로그래밍이 일반화 하는 대상은 데이터 형식(Type)이다. 일반화 메소드 이름처럼 데이터 형식을 일반화한 메소드. 선언을 하는 방법은 다음과 같다. 한정자 반환형식 메소드명(매개 변수) { } 다음 예제는 내용은 같지만 두개의 메소드로 분리가 되어있다. 이것을 일반화 메소드를 사용해서 하나로 합친 후 확장성을 넓힐 수 있다. 굳이 데이터 형식마다 메소드를 오버로딩 할 필요가 없어지게 된다. void CopyData(int data1, int data2) { data1 = data2; } void CopyData(double data1, double data2) { data1 = data2; } 위 코드에서 데이터 형식 부분을..
컬렉션이란 같은 성격을 띄는 데이터의 모음을 담은 자료구조이다. .NET 프레임워크는 많은 컬렉션 클래스를 제공을 한다. 그 중 가장 자주 사용되는 것은 다음 4가지 클래스이다. 1. ArrayList 2. Queue 3. Stack 4. Hashtable ArrayList 가장 배열과 닮은 컬렉션이다. 요소에 접근할 때는 [] 연산자를 이용해 특정 인덱스에 접근하고, 데이터를 할당할 수 있다. 배열과는 달리 생성할 때 용량을 미리 지정할 필요가 없이 필요에 따라 자동으로 늘고 줄고 한다. Add() 컬렉션의 가장 마지막에 있는 요소 뒤에 새 요소 추가 RemoveAt() 특정 인덱스의 요소 제거 Insert() 특정 위치에 새 요소 삽입 ArrayList array = new ArrayList(); a..
은닉성과 편의성 둘 다 잡을 수 있는 문법이 프로퍼티이다. class ClassName { private int num1; public int Num1 { get { return num1; } set { num1 = value; } } } 프로퍼티 선언 문법에서 get/ set을 접근자(accessor)라고 한다. get은 필드의 값을 가져오고 set은 필드의 값을 할당한다. 외부에서 이 프로퍼티에 접근해서 값을 할당하는 것을 막고 싶다면 단순하게 set 접근자를 지워주기만 하면 된다. 위 코드처럼 작성을 하면 코드가 엄청 길어지고 중복 코드가 엄청 많은 기분이 들게 된다 그래서 C# 3.0버전에서 자동 구현 프로퍼티라는 것을 도입을 했다. class ClassName { public int Num1 {..
인터페이스란? interface 인터페이스명 { 반환형식 메소드명(매개변수); . . } 인터페이스의 선언은 클래스의 선언과 유사하다. 인터페이스는 메소드, 이벤트, 인덱서, 프로퍼티만 가질 수 있고 구현부는 구현하지 못한다. 접근 제한 한정자를 사용할 수 없고 모든 것이 public으로 선언된다. 게다가 인스턴스도 만들 수 없다. 다만 인터페이스를 상속받는 클래스의 인스턴스를 만드는 것은 가능하다. 인터페이스를 상속받는 클래스의 인스턴스 만드는법 - 인터페이스에 선언되어 있는 모든 메소드 및 프로퍼티 구현 - public으로 수식해야 한다. 아래와 같이 사용을 하면 된다. interface ILogger { void WriteLog(string log); } class ConsoleLogger : IL..
C#의 복합 데이터 형식에는 클래스 말고도 구조체라는 것이 있다. 구조체는 클래스의 사촌지간쯤 된다고 생각하면 편하다. 구조체도 필드와 메소드를 가질 수 있고 상당 부분이 비슷하다. 다음과 같이 struct 키워드를 이용해 선언한다. struct 구조체명 { } //// struct ExampleStruct { public int Field1; public int Field2; } 구조체는 데이터를 담기 위한 자료 구조로 사용된다. 따라서 은닉성은 고려하지 않고 편의를 위해 필드를 public으로 선언해서 사용하는 경우가 많다. 다음 표는 구조체와 클래스의 차이점이다. 특징 클래스 구조체 키워드 class struct 형식 참조 형식 값 형식 복사 얕은 복사 깊은 복사 인스턴스 생성 new 연산자와 생성..
객체 지향 프로그래밍에서 다형성은 객체가 여러 형태를 가질 수 있음을 의미한다. 다형성은 하위 형식 다형성의 준말이다. 이 말은 자신을 상속받아 만들어진 파생 클래스를 통해 다형성을 실현한다는 것 적절한 예인지는 모르지만 간단한 예를 들어 보겠다. 스타크래프트의 종족 클래스인 Kind 클래스에 Initialize 메소드를 가지고 있다. class Kind { public virtual void Initialize() { Console.WriteLine("Start Game"); } } 이 Kind 클래스는 저그, 프로토스, 테란으로 파생될 수 있다. 그리고 게임을 시작할 때 각각 드론, 프로브, SCV를 가지고 시작한다. class Zerg { public override void Initialize()..
클래스는 다른 클래스로부터 필드나 메소드, 프로퍼티 같은 멤버들을 물려 받을 수 있습니다. 객체 지향 프로그래밍에서는 물려받는 클래스(파생or자식 클래스)가 유산을 물려줄 클래스(기반or부모 클래스)를 지정 다음 코드가 상속의 예이다. class Base() { public void BaseMethod() { Console.WriteLine("BaseMethod"); } } class Derived : Base { } 파생 클래스는 자신만의 고유한 멤버 외에도 기반 클래스로부터 물려받은 멤버를 가지고 있다. 이것은 바로 파생 클래스가 기반 클래스 위에 새로운 멤버를 얹어서 만든 것이기 때문이다. 파생 클래스는 객체를 생성할 때 내부적으로 기반 클래스의 생성자를 호출한 후에 자신의 생성자를 호출하고 객체가..
static 한정자 메소드나 필드가 클래스의 인스턴스가 아닌 클래스 자체에 소속되도록 지정하는 한정자 static한정자를 사용해서 얻는 효과는 static으로 수식한 필드는 프로그램 전체에 걸쳐 하나밖에 존재하지 않는다. 따라서 프로그램 전체에서 공유해야 하는 변수가 있다면 정적 필드를 이용하면 된다. 이와 반대되는 것을 인스턴스 메소드라고 한다. 왜냐하면 클래스의 인스턴스를 생성해야만 호출할 수 있기 때문이다. class MyClass { public static void StaticMethod() { } public void InstanceMethod() { } } 객체 내부의 데이터를 이용해야 한다면 = 인스턴스 메소드 내부 데이터를 이용할 일이 없다 = 정적 메소드 this 키워드 this는 객체..
- Total
- Today
- Yesterday
- 글로
- 관계형데이터베이스
- 언리얼엔진4
- C언어
- 선택자
- HTML
- GRID
- visual studio code
- Link
- 동영상을
- 생활코딩#동영상을#글로#html
- TAG
- 기초
- 차이점
- 문자열
- javascript
- PHP&MySQL
- 안드로이드 스튜디오
- 조건문
- 변수
- 언리얼엔진
- 네트워크 프로그래밍
- css
- inline
- 정렬
- 생활코딩
- 알고리즘
- 객체
- 생활코딩#MySQL
- php
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |