038. 객체지향의 특징
반응형

이번엔 클래스에 대해 알아보자...

 

C#은 OOP(Object Oriented Programming) 언어이다.

 

C는 PP(Procedural Programing) 언어구요

 

다르게 말하면 C는 절차지향언어, C#은 객체지향 언어!

 

이렇게 말하면 또 쉽지...

 

절차지향은 위에서부터 차례대로 컴파일하므로 변수 선언, 함수 선언등을 언어의 상단에다가 해주어야 한다.

 

하지만 객체지향은 객체단위로 컴파일을 하므로 굳이 위쪽에 선언을 해주지 않아도 된다.

 

또한 객체지향은 캡슐화, 다형성, 클래스 상속등의 기능등의 기능을 제공하고, 이러한 기능때문에 객체지향을 많이 쓰게 된다. ( 그래도 C가 전세계에서 가장많이 쓰는언어지만.. 그만큼 빠름 )

 

여기서 클래스 상속과 캡슐화, 다형성에 대해서 알아보자.

 

내가 생각하기에 3가지는 다 연관되어있다고 생각되며

 

간단하게 3가지에 대해 정의해보고 가자.

 

캡슐화

단순하게 생각하자.. 변수와 함수가 함께 존재하는 것. 그것이 캡슐화다.

각기 다른 클래스에 변수 와 함수를 선언해두면 처리하기가 상당히 귀찮아 진다. 의미없는 클래스 선언도 여러가지 해야하고.. 이런것을 뭉쳐둔 클래스. 이것이 캡슐화다.

 

다형성

동일한 이름의 함수를 여러번 정의하여 사용할 수 있는 것이다.

예를 들어 Run이라는 함수가 존재하다면, 동일한 이름으로 생성할 수 없겠지만, 상속을 받아 진행한다면 Override 키워드를 이용해 다시 정의하여 다른 내용으로 사용할 수 있는 것.

 

상속

상속은 부모클래스에서 사용하는 함수를 자식클래스가 사용할 수 있도록 하는 것. 이 기능은 다형성과도 함게 쓰인다고 볼 수 있겠다.

 

그렇다면 예시를 시작해보자..

 

이론보단 예시가 이해가 확 가겠지...

 

캡슐화의 경우 이렇게 쓰일 수 있는 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public class CellPhone
    {
        public int Battery = 100;
 
        public void Use()
        {
            if (Battery > 0)
            {
                Battery--;
                Console.WriteLine("Use!!!");
            }
            else
            {
                Console.WriteLine("Battery End...");
            }
        }
    }
cs

 

휴대폰을 사용하는데 배터리가 있어야 휴대폰을 사용할 것이다. 이렇게 배터리에 대한변수와 사용에 대한 함수가 같이 존재하는 것.. 이것이 캡슐화!

 

다형성

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
 public class CellPhone
    {
        public int Battery = 100;
 
        public void Use()
        {
            if (Battery > 0)
            {
                Battery--;
                Console.WriteLine("Use!!!");
            }
            else
            {
                Console.WriteLine("Battery End...");
            }
        }
    }
    public class HuaweiPhone : CellPhone
    {
        public void Use()
        {
            Console.WriteLine("Broken....");
        }
    }
 
    public class StartClass
    {
        public StartClass()
        {
            HuaweiPhone HHHH = new HuaweiPhone();
            HHHH.Use();
        }
    }
cs

 

Use라는 동일한 이름의 함수를 재정의하여 사용하는 것.

 

이것이 다형성!!

 

상속

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
  public class CellPhone
    {
        public int Battery = 100;
 
        public void Use()
        {
            if (Battery > 0)
            {
                Battery--;
                Console.WriteLine("Use!!!");
            }
            else
            {
                Console.WriteLine("Battery End...");
            }
        }
    }
 
    public class SamsunPhone : CellPhone
    {
        public void Sound()
        {
            Console.WriteLine("Samsung Phone");
        }
    }
 
    public class ApplePhone : CellPhone
    {
        public void Sound()
        {
            Console.WriteLine("Apple Phone");
        }
    }
 
    public class StartClass
    {
        public StartClass()
        {
            SamsunPhone SSSS = new SamsunPhone();
            SSSS.Use();
            SSSS.Sound();
 
            ApplePhone AAAA = new ApplePhone();
            AAAA.Use();
            AAAA.Sound();
        }
    }
cs

 

삼성폰과 애플폰은 Use라는 함수가 존재하지 않는다. 

하지만 위와같이 선언 후 Use함수와 Battery 변수에 접근할 수 가 있다.

이와 같은 기능이 상속..! 부모클래스의 정보를 가져다 쓸수있는!

 

이렇게 아주 가아아안단하게 알아봤다..

어려울게 없다... 단순하게 생각하면 된다!!

 

사실은 상속에 대한 기능 중 Interface를 알아보려다가... 상속에 대한 기본적인 것도 모르면 안될 것같아서...

 

이거먼저 적어 본다..!!

반응형