.NET/C#
[C#] 인터페이스(Interface)와 상속(Inheriting) - 1. 메서드(Method)와 이벤트(Event)
1. 메서드(Method) 메서드에 관한 기본적인 내용은 아래 글에서도 다루고 있으니 참고 바랍니다. [.NET/C#] - [C#] C#과 OOP(Object-Oriented Programming) 클래스(Class) 안에서는 메서드를 통해 특정 기능을 구현하게 되는데 종종 비슷한 기능을 인스턴스화 된 객체와 Type에서 각각 수행될 수 있도록 2중으로 구현하는 경우가 있습니다. 예를 들어 .NET string에 보면 Type에서 호출될 수 있는 Compare() 메서드와 인스턴스 객체에서 호출될 수 있는 CompareTo() 메서드가 있는데 이 둘은 비교를 수행한다는 점에서 비슷한 동작을 수행하며 해당 Type을 사용하는 개발자는 편의성을 고려해 이 둘의 메서드를 선택적으로 사용할 수 있게 됩니다. T..
[C#] C#과 OOP(Object-Oriented Programming) - 7. 레코드(Record)
7. Record 사용 위 예제에서 Car Class의 displacement Property는 객체가 생성되고 난 후 초기값이 결정되고 나서도 언제든 값이 바뀔 수 있습니다. Car sedan = new(); sedan.displacement = 999; Console.WriteLine($"{ sedan.displacement }"); sedan.displacement = 3000; Console.WriteLine($"{ sedan.displacement }"); //999 //3000 하지만 객체의 인스턴스가 생성되는 순간에만 값이 결정되고 그다음 값이 바뀌지 말아야 하는 경우라면 Property의 set을 init으로 사용할 수 있습니다. public class Car { public int dis..
[C#] C#과 OOP(Object-Oriented Programming) - 6. 패턴 매칭(Pattern Matching)
6. 객체 비교를 위한 패턴 매칭(Pattern Matching) 패턴 매칭은 이미 아래 글에서 잠깐 살펴보았는데 [.NET/C#] - [C#] 흐름제어, 형변환, 예외처리 [C#] 흐름제어, 형변환, 예외처리 1. 변수 ● 산술 연산자 연산자는 변수나 실제값에 해당하는 피연산자를 더하거나 곱하는 등의 연산을 수행하며 일반적으로 다른 변수에 할당 가능한 또 다른 값을 반환합니다. 연산자 중 이항 lab.cliel.com 예제에서의 경우뿐만 아니라 객체의 Type비교를 위한 경우에도 패턴 매칭을 적용할 수 있습니다. namespace mylibrary; public class Car { public int displacement { get; set; } } public class Truck { } 예제는 ..
[C#] C#과 OOP(Object-Oriented Programming) - 5. 속성(Property)과 인덱서(Indexer)
5. 속성(Property)과 인덱서(Indexer) ● 속성(Property) 속성은 특정 값을 설정할 때 메서드처럼 호출하고 값을 가져오는 경우 Field처럼 호출하여 사용할 수 있도록 하는 것으로 해당 기능을 구현하기 위한 구문이 간소화될 수 있습니다. namespace mylibrary; public class Car { public int Speed { get; set; } public int RPM => Speed * 2; } 예제에서는 Speed와 RPM이라는 2개의 Property를 정의하였습니다. Speed는 값을 읽는 get과 값을 설정하는 set으로 인해 int형식의 값을 설정하고 가져올 수 있고 RPM은 Speed에서 *2를 연산한 결과만을 읽을 수 있는 Property가 되었습니다..
[C#] C#과 OOP(Object-Oriented Programming) - 4. Method (메서드)
4. Method (메서드) '함수'라고 하는 것과 개념이 동일하지만 어떤 Type(클래스)에서 하나의 Member로 취급될 수 있고 이러한 특징 때문에 이를 '메서드'라고 부르게 되었습니다. ● 값을 반환하기 메서드는 아무런 값도 반환하지 않거나 특정 값을 반환하도록 만들 수 있습니다. 그리고 값을 반환하는지에 대한 구분은 메서드에서 반환받을 값의 Type이 명시되었는지 혹은 void로 메서드가 수식되었는지로 판단할 수 있습니다. namespace mylibrary; public class Car { //void는 아무런 값도 반환하지 않음 public void Stop() { Console.WriteLine("자동차 정지"); } //int형식의 값을 반환함 public int Drive() { Co..
[C#] C#과 OOP(Object-Oriented Programming) - 3. 필드(Field)
3. Field '자동차'는 자신만의 차량번호와 생산이 완료되 시장에 나오는 출고일이라는 날짜가 존재할 수 있습니다. 이 값을 다루기 위해 이전에 만든 Car클래스에서는 Field를 아래와 같이 추가합니다. public class Car { public string Number; public DateTime FDate; } 예제에서는 Field에서 string과 DateTime형식을 사용했지만 Field를 만드는 데는 int나 Array 등 C#에서 다룰 수 있는 모든 형식뿐만 아니라 Car와 같은 자신이 직접 만든 형식까지도 사용할 수 있습니다. ● 접근 한정자 '접근 한정자'는 캡슐화 과정에서 Field를 어떻게 외부에 노출할 것인지를 지정하는 것입니다. 위 예제에서 Car클래스의 Number과 Co..
[C#] C#과 OOP(Object-Oriented Programming) - 2. 클래스 라이브러리 (Class library)
2. 클래스 라이브러리 (Class library) 클래스 라이브러리는 대게 독립적으로 실행될 수 있는 Application보다는 다른 Application에서 기능을 활용할 수 있는 DLL과 같은 형태로 배포되는데 .NET이 가장 대표적인 '클래스 라이브러리'의 모음이라고 할 수 있습니다. Visual Studio Code를 사용하는 경우 프로젝트를 '클래스 라이브러리'형태로 생성하려면 'classlib'옵션을 사용해 프로젝트를 생성해야 합니다. dotnet new classlib -o mylibrary 예제에서 프로젝트의 이름은 'mylibrary'로 하였습니다. 프로젝트를 생성한 뒤 프로젝트의 *.csproj파일을 보면 net6.0 enable enable TargetFramework가 net6.0..
[C#] C#과 OOP(Object-Oriented Programming) - 1. 객체지향프로그래밍 개념
1. OOP 실제 세계에서의 '객체(Object)'라 함은 '사람' 혹은 '자동차'와 같은 사물에 비유될 수 있습니다. 많은 프로그래밍 언어에서 이러한 '객체(Object)'를 표현하기 위해 OOP(Object-Oriented Programming)라는 개념을 도입하고 있고 그중 C#에서는 class와 struct와 같은 키워드를 사용해 이러한 Object를 코드로서 표현하고 있습니다. OOP는 프로그래밍에서 다음과 같은 특징을 가집니다. 캡슐화(Encapsulation) : 객체는 대상에 따라 필요한 데이터와 동작(Action)을 가질 수 있습니다. 예를 들어 '자동차'를 표현하는 경우 '속도' 혹은 '색상'과 같은 값(데이터)를 가질 수 있으며 '주행', '정지'와 같은 동작을 가질 수 있습니다. 캡..