전체 글 55

이것이 C#이다 Chapter 15 LINQ

15.1 LINQLINQ(Language INtegrated Query)C#에 통합된 데이터 질의 기능기본적으로 Query는 다음 내용을 포함from: 어떤 데이터 집합에서 찾을 것인가?where: 어떤 값의 데이터를 찾을 것인가?select: 어떤 항목을 추출할 것인가?class Profile{ public string Name {get; set;} public int Height {get; set;}}Profile[] arrProfile = { new Profile(){Name="엄준식1", Height=170}, new Profile(){Name="엄준식2", Height=160}, ..

공부/C# 2024.03.16

이것이 C#이다 Chapter 14 람다식

14.1 람다식( Lambda Expression, λ-Expression)람다식은 알론조 처치(Alonzo Church)라는 수학자가 1936년에 발표한 람다 계산법(Lambda Calculus)에서 사용하는 식이다.알론조 처치는 수학 기초론을 연구하던 중에 분명하고 간결한 방법으로 함수를 묘사하기 위해 람다 계산법을 고안해냈다.람다 계산법은 크게 함수의 정의와 변수, 함수의 적용으로 이루어지는데 이 계산법에서는 모든 것이 함수로 이루어져 있다.0, 1, 2, ...와 같은 숫자도 함수로 표현한다. 따라서 람다 계산법에서 어떤 값을 변수에 대입하고 싶으면 함수를 변수에 대입하며, 이것을 함수의 적용이라고 부른다.람다 계산법은 단순히 수학 이론에 그치지 않았다. 알론조 처치의 제자였던 존 메카시(John..

공부/C# 2024.03.16

이것이 C#이다 Chapter 12 예외 처리하기

12.1 예외에 대하여 프로그램 사용자는 프로그래머가 생각한 대로만 프로그램을 다루지 않는다. 예를 들어, 숫자만 입력해야 하는데 문자를 입력하기도 한다. 사용자뿐만 아니라 갑자기 네트워크가 다운되기도 하는 등 프로그래머가 생각한 시나리오에서 벗어나는 사건을 예외(Exception)이라 부른다. 그리고 예외가 프로그램의 오류나 다운으로 이어지지 않도록 적절하게 처리하는 것을 예외 처리(Exception Handling)라고 한다. using System; namespace PracticeCSharp { class Program { static void Main(string[] args) { int[] arr = { 1, 2, 3 }; for(int i=0;i

공부/C# 2024.03.09

이것이 C#이다 Chapter 11 일반화 프로그래밍

11.1 일반화 프로그래밍이란? 특수한 개념으로부터 공통된 개념을 찾아 묶는 것을 '일반화(Generalization)'라고 한다. 일반화 프로그래밍(Generic Programming)은 일반화를 이용하는 프로그래밍 기법이다. 일반화 프로그래밍이 일반화하는 대상은 '데이터 타입(Data Type)'이다. 예를 들어, 정수형 1차원 배열을 복사하는 메소드를 작성했다고 하자. void CopyArray(int[] source, int[] target) { for(int i=0; i

공부/C# 2024.03.09

이것이 C#이다 Chapter 10 배열과 컬렉션 그리고 인덱서

10.1 배열 배열은 다음과 같은 형식으로 선언한다. // 데이터_타입[] 배열_이름 = new 데이터_타입[용량]; int[] scores = new int[5]; 배열의 각 요소에 데이터를 저장하거나, 요소 안에 있는 데이터를 읽어올 때는 배열 이름 뒤에 대괄호 [와 ]를 붙여주고, 그 사이에 인덱스(index)를 적어준다. 주의할 점은 인덱스는 1이 아닌 0부터 시작한다는 것이다. int[] scores = new int[5]; score[0] = 80; score[1] = 74; score[2] = 81; score[3] = 90; score[4] = 34; 같은 성격의 데이터라면 변수를 사용하는 것보다 배열로 정의한 다음 for문이나 foreach문과 함께 사용하는 것이 코드를 간결하게 만들 수..

공부/C# 2024.03.08

이것이 C#이다 Chapter 09 프로퍼티

9.1 public 필드의 유혹 Get/Set 메소드 대신 할당 연산자 '='를 읽거나 할당하고 싶을 때가 있다. 은닉성을 지키자니 귀찮고, 안지키자니 신경쓰인다. 프로퍼티를 이용하면 은닉성과 편의성을 가질 수 있다. class MyClass { private int myField; } GetXXX(), SetXXX() 메소드를 클래스에 추가해서 MyField에 접근할 수 있다. class MyClass { private int myField; public int GetMyField(){return myField;} public void SetMyField(int NewValue){myField = NewValue;} } 사용은 다음과 같이 할 것이다. MyClass obj = new MyClass();..

공부/C# 2024.03.07

이것이 C#이다 Chapter 08 인터페이스와 추상 클래스

8.1 인터페이스의 선언 인터페이스(Interface)는 클래스와는 다르게 메소드, 이벤트, 인덱서, 프로퍼티만을 가질 수 있다. 게다가 구현부가 없다. 인터페이스는 접근 한정자를 사용할 수 없고 모든 것이 public으로 선언된다. 인스턴스도 만들 수 없다. interface 인터페이스_이름 { 반환_타입 메소드_이름1(매개변수 목록); 반환_타입 메소드_이름2(매개변수 목록); 반환_타입 메소드_이름3(매개변수 목록); // ... } interface ILogger { void WriteLog(string message); } 인터페이스는 인스턴스를 가질 수 없지만, 이 인터페이스를 상속받는 클래스의 인스턴스를 만드는 것은 가능하다. 파생클래스는 인터페이스에 선언된 모든 메소드(및 프로퍼티)를 구현..

공부/C# 2024.03.06

이것이 C#이다 Chapter 07 클래스

7.1 객체지향 프로그래밍과 클래스 객체지향 프로그래밍(Object Oriented Programming, OOP)은 코드 내 모든 것을 객체(Object)로 표현하려는 프로그래밍 패러다임이다. 여기서 객체는 세상의 모든 것을 지칭한다. 모든 것을 그대로 표현하는 것이 아닌 추상화(객체의 주요 특징만 뽑아낸다)시켜서 표현한다. 객체는 '속성'과 '기능'을 갖는다. 속성은 데이터로 기능은 메소드로 표현한다. 즉, 객체는 데이터와 메소드로 이루어진다. 클래스(Class)는 객체를 만들기 위한 청사진이라고 볼 수 있다. 클래스는 객체가 가지게 될 속성과 기능을 정의하지만 실체를 가지지 않는다. 만들어진 실체(Instance)를 영어 발음 그대로 '인스턴스'라고 부른다. 클래스는 복합 데이터 타입 객체지향적인 ..

공부/C# 2024.02.27

이것이 C#이다 Chapter 06 메소드로 코드 간추리기

6.1 메소드란? 메소드는 객체지향 프로그래밍 언어에서 사용하는 용어. C/C++ 에서는 함수(Function)라 부르기도 하고, 파스칼에서는 프로시저(Procedure)라 불렀다. 또는 서브루틴(Subroutine)이나 서브 프로그램(Subprogram)이라 부르는 언어도 있다. 엄밀히 말하면 의미 차이가 존재하지만, 큰 맥락에서는 같은 것을 지칭한다고 볼 수 있다. 메소드는 일련의 콛르르 하나의 이름 아래 묶은 것이다. 이렇게 묶은 코드는 메소드의 이름을 불러주는 것으로 실행할 수 있다. ('메소드를 호출(call)한다'고 한다) class 클래스_이름 { 한정자 반환_타입 메소드_이름(매개변수_목록) { // 실행할 코드 return 메소드_결과 // 메소드 결과의 데이터 타입은 메소드의 반환 타입..

공부/C# 2024.02.26