2020. 1. 11. 15:10ㆍC# 언어/이것이 C# 이다. 책정리
챕터 07 '클래스' 입니다
C#의 클래스와 객체 지향 프로그래밍의 원리를 알아봅니다!
'이것이 C#이다' 교재를 바탕으로 정리했습니다.
이전 정리글
2020/01/06 - [이것이 C#이다] - Ch01 프로그래밍을 시작합시다.
2020/01/06 - [이것이 C#이다] - Ch02 처음 만드는 C# 프로그램
2020/01/06 - [이것이 C#이다] - Ch03 데이터 보관하기
2020/01/07 - [언어 공부/이것이 C#이다] - 부록A. 문자열 다루기
2020/01/07 - [언어 공부/이것이 C#이다] - Ch04. 데이터를 가공하는 연산자
2020/01/08 - [언어 공부/이것이 C#이다] - Ch05 코드의 흐름 제어하기
2020/01/09 - [언어 공부/이것이 C#이다] - ch06 메소드로 코드 간추리기
ㅇ 객체 지향 프로그래밍과 클래스 |
객체 지향 프로그래밍은 OOP라고도 하는데
코드 내의 모든 것을 '객체' 로 표현하고자 하는 프로그래밍 패러다임 입니다.
객체 지향 프로그래밍
객체의 모든것을 사실적으로 표현할 필요는 없습니다. 추상적으로 특징만 뽑아내는 것입니다.
객체의 특징은 크게 2가지가 있습니다. 속성 과 기능 입니다.
속성은 데이터(변수)로 기능은 메소드로 표현합니다.
정리하면 객체는 데이터와 메소드로 이루어집니다.
클래스
객체에게서 뽑아낸 속성과 기능은 클래스 안에 변수와 메소드로 표현됩니다.
다시 말해서 변수와 메소드의 집합은 클래스 인것이죠.
클래스는 복합 데이터형식입니다.
객체 지향적인 관점에서 보면 객체를 위한 '틀'인 동시에 데이터와 메소드를 묶는 집합입니다.
한편으로, 코드에서 보는 클래스는 또 하나의 데이터 형식입니다.
ㅇ 클래스의 선언과 객체의 생성 |
class cat
{
public string Name; // 데이터
public string Color;
public void Meow() // 메소드
{
Console.WriteLine("{0} : 야옹", Name);
}
}
위 cat 클래스에 선언되어 있는 Name 과 Color처럼
클래스 안에 선언된 변수를 일컬어 필드(Field) 라고 합니다.
필드와 메소드를 비롯하여 프로퍼티, 이벤트 등
클래스 내에 선언되어 있는 요소들을 일컬어 멤버(Member) 라고합니다.
cat kitty = new cat(); // kitty 객체 생성
kitty.Color = "하얀색";
kitty.Name = "키티";
kitty.Meow();
Console.WriteLine("{0} : {1}", kitty.Name, kitty.Color);
cat nero = new cat(); // nero 객체 생성
nero.Color = "하얀색";
nero.Name = "키티";
knero.Meow();
Console.WriteLine("{0} : {1}", nero.Name, nero.Color);
객체를 생성할때 사용되는 cat()는 생성자 라고 하는 특별한 메소드 입니다.
생성자는 클래스의 이름과 동일한 이름을 가지며, 객체를 생성하는 역할을 합니다.
클래스는 복합 데이터 형식으로 참조형식입니다.
그래서 new 연산자와 생성자를 이용하여 힙에 객체를 생성하고,
kitty는 생성자가 힙에 생성한 객체를 가리키는 거죠.
ㅇ 기반 클래스와 파생 클래스 사이의 형식 변환, 그리고 is와 as |
개와 고양이는 종으 다르지만 젖을 먹인다는 공통점 때문에 포유류로 분류됩니다.
이를 클래스로 다음과 같이 표현할 수 있습니다.
class Mammal
{
public void Nurse() {}
}
class Dog : Mammal
{
public void Bark(){}
}
class Cat : Mammal
{
public void Meow(){}
}
Mammal, Dog, Cat 클래스의 인스턴스는 다음과 같이 사용할 수 있습니다.
Mammal mammal = new Mammal();
mammal.Nurse();
Dog dog = new Dog();
dog.Nurse();
dog.Bark();
Cat cat = new Cat();
cat.Nurse();
cat.Meow();
형변환 is, as
C#은 형변환을 위해 아주 멋진 연산자 두 개를 제공합니다.
is, as 인데요.
연산자 | 설명 |
is | 객체가 해당 형식에 해당하는지를 검사하고 bool 값 반환 |
as | 형식 변환 연산자와 동일하나 형변환 실패시 null값으로 만듬 |
이용한 코드
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
using static System.Console;
namespace p256
{
class Mammal
{
public void Nurse()
{
WriteLine("Nurse()");
}
}
class Dog : Mammal
{
public void Bark()
{
WriteLine("Bark()");
}
}
class Cat : Mammal
{
public void Meow()
{
WriteLine("Meow()");
}
}
class MainApp
{
static void Main(string[] args)
{
Mammal mamma1 = new Dog();
Dog dog;
if (mamma1 is Dog)
{
dog = (Dog)mamma1;
}
Mammal mamma12 = new Cat();
Cat cat = mamma12 as Cat;
if (cat != null)
{
}
Cat cat2 = mamma1 as Cat;
if (cat2 != null)
{
}
else
WriteLine("cat2 is not a Cat");
}
}
}
|