ch07 클래스

2020. 1. 11. 15:10C# 언어/이것이 C# 이다. 책정리

반응형

 

 

챕터 07  '클래스'  입니다

C#의 클래스와 객체 지향 프로그래밍의 원리를 알아봅니다!

 

'이것이 C#이다' 교재를 바탕으로 정리했습니다.

 

이전 정리글

 


ㅇ 객체 지향 프로그래밍과 클래스

객체 지향 프로그래밍은 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;
                dog.Bark();
            }
 
            Mammal mamma12 = new Cat();
 
            Cat cat = mamma12 as Cat;
            if (cat != null)
            {
                cat.Meow();
            }
 
            Cat cat2 = mamma1 as Cat;
            if (cat2 != null)
            {
                cat2.Meow();
            }
            else
                WriteLine("cat2 is not a Cat");
 
        }
    }
}

 

반응형