컴퓨터프로그래밍/C#

C# - 클래스, 객체지향의 개념잡기

zelkova 2016. 11. 24. 14:53

<목차로 돌아가기>

  객체의 이해


객체는 
사람, 개, 비행기, 바다, 공기 등등  세상의 모든것을 지칭할 수 있습니다. 

객체의 특성으로는 상태, 행동, 독자성으로 정리가 가능합니다.



저번 메소드 포스팅에서 아래의 내용을 다뤘습니다. 그래도 아래를 이해하면 객체지향에 접근하기 쉽기 때문에 다시한번 넣어봤습니다. 사실은 양늘릴려고 ㅋㅋㅋ


C#을 시작하고 나서 프로그램을 접할때 인터페이스? 클래스? 메소드? 


도대체 어떤 차이점이 있는거지? 라고 고민한 경험이 있었습니다.


갑자기 나온 용어에 어렵게 생각하지 않으셔도됩니다.


인터페이스 : 자동차

클래스 : 소형차, 중형차, 상용차(트럭)

메소드 :  시동걸다. 가속한다. 멈추다. 후진한다.


인터페이스안에 클래스가 포함되고 클래스안에 메소드가 포함됩니다.


※ C# 소스와 인터페이스는 같지 않습니다. C# != 인터페이스


자동차라는 인터페이스는 소형차, 중형차, 상용차의 공통적인 부분을 다루고


소형차 클래스는 공통적인 부분에 소형차의 특징을 추가하고

중형차 클래스는 공통적인 부분에 중형차의 특징을 추가하고

상용차 클래스는 공통적인 부분에 상용차의 특징을 추가합니다.


위에서 소형차클래스대로 완성된 소형차에 맞는 시동메소드를 장착합니다.

위에서 소형차클래스대로 완성된 소형차에 맞는 가속메소드를 장착합니다.

위에서 소형차클래스대로 완성된 소형차에 맞는 정지메소드를 장착합니다.

위에서 소형차클래스대로 완성된 소형차에 맞는 후진메소드를 장착합니다.


위에서 중형차클래스대로 완성된 소형차에 맞는 시동메소드를 장착합니다.

위에서 중형차클래스대로 완성된 소형차에 맞는 가속메소드를 장착합니다.

위에서 중형차클래스대로 완성된 소형차에 맞는 정지메소드를 장착합니다.

위에서 중형차클래스대로 완성된 소형차에 맞는 후진메소드를 장착합니다.


위에서 상용차클래스대로 완성된 소형차에 맞는 시동메소드를 장착합니다.

위에서 상용차클래스대로 완성된 소형차에 맞는 가속메소드를 장착합니다.

위에서 상용차클래스대로 완성된 소형차에 맞는 정지메소드를 장착합니다.

위에서 상용차클래스대로 완성된 소형차에 맞는 후진메소드를 장착합니다.


자세히 들어가면 위의내용과 조금 차이가 있으나 큰 맥락은 위와 같습니다.

이런식으로 상태, 행동, 독자성이라는 특성으로 객체를 정의해서 프로그램화하는것이 바로 객체지향 방법론입니다.



  객체지향 프로그래밍 방법론


추상화(Abstraction)

   중요한 것과 중요하지 않은 것이 무엇인지 결정하고 중요하지 않은 부문을 무시
   해서 중요한것에만 
초점을 맞추어 관리하는 개념이다.

캡슐화(Encapsulation)

   블랙박스와 비슷한 개념으로 내부는 모르더라도 외부에 노출된 입력 부문과
   출력부분을 통하여 
기능이 작동하는 것을 말한다.
   
   예를들어 자판기 캔커피를 뽑을때 돈전이들어간뒤, 몇원짜리 동전인지
   파악하고, 동전의 가격의
커피선택 버튼에 불이 들어오게 하고, 누르면
   어쩌고저쩌고 이런걸 모두 알필요가 없다.
   
   사용자는 동전을 넣고 버튼을 누른뒤 커피를 받으면 끝나는 것이다.

모듈화(Modularity)

   모듈화는 기능의 단위를 작게 나눈 것이다.

   예를들어 벽돌집을 지을때 스스로 시멘트를 만들고 벽돌을 만들필요
   없이 시멘트를 사고, 벽돌을 사서 집을 지으면 된다.

   이와같이 벽돌이라는 기능을 가진 프로그램을 다른사람이 만들고
   시멘트라는 기능을 가진 프로그램을 다른사람이 만들고
   나는 조립한다! 

   이렇게 분업을 통하여 효율적으로 복잡한 것을 쉽게 만들 수 있다.

계층성(Hierarchy)

   추상화해서 상위에 위치시키고, 자세하고 특수한 것은 추상화된 부분의 하위에
   위치시키는 체
계를 말한다.
   
   예를들면 위쪽에서 설명한 인터페이스가 이에 해당된다.

   자동차라는 추상적인 개념의 공통점을 정의하고
   그 아래의 작업은 클래스를 통하여 조금더 자세한 분류로 나뉘고
   그 아래의 계층은 세밀한 부분을 통하여 완성시킨다. 


  클래스


객체?, 클래스? 뭔차이냐? 라는 생각이 들수도 있습니다.
위에서 클래스를 다룬것을 볼 수 있습니다.

개체가 자동차라는 추상적 개념이라면

클래스는 조금더 자세한 설계도입니다. 
승용차라는 클래스
중형차라는 클래스
상용차라는 클래스를 위에서 나누어 보았습니다.

백문이 불여일견! 이제 승용차를 추상화하여 클래스를 만들어봅시다.

클래스 만드는 방법
[접근제한자] class 클래스식별자
{
   //필드,메소드, 변수 등등.
}


클래스 사용법
클래스명 클래스식별자 = new 클래스명();
클래스식별자.접근메소드

  1.  using System;
  2.  using System.Collections.Generic;
  3.  using System.Linq;
  4.  using System.Text;
  5.  using System.Threading.Tasks;

  6.  namespace ConsoleApplication1
  7.  {
  8.     class Car
  9.     {
  10.         public string name; // 자동차의 모델명을 나타내는 필드
  11.         public string brand; // 자동차의 상표를 나타내는 필드
  12.         public string owner; // 자동차 소유자 이름을 나타내는 필드

  13.         public void brake() // 브래이크 밟기
  14.         {
  15.             Console.WriteLine("헉! 사람이다. 브래이크 밟아!");
  16.             Console.WriteLine("{0} : 끼이익!\n", name);
  17.         }
  18.     }

  19.     class Program
  20.     {
  21.         static void Main(string[] args)
  22.         {
  23.             Car car = new Car();
  24.             car.name = "쿵.. 퍽!";
  25.             car.brand = "느티나무";
  26.             car.owner = "꼬길동";

  27.             car.brake();
  28.             Console.WriteLine("차의 모델명 : {0}\n자동차의 상표 : 
  29.                                     {1}\n자동차의 소유자 : {2}", 
  30.                                      car.name, car.brand, car.owner);
  31.         }
  32.     }
  33. }

결과)



9행 : Car라는 클래스가 등장합니다. 이 클래스 안을 살펴보면 자동차의 모델명을 나타내는 필드, 브랜드를 나타내는 필드, 소유주의 이름을 나타내는 필드와 브레이크를 밟는 메소드가 존재합니다. 


26행 : Car라는 틀로 car라는 객체를 만들고 있습니다.


27~29행 : 에서 필드의 값을 초기화시키고 있습니다. 


31줄 :  Car 객체 내에 있는 Brake라는 메소드를 호출하고 있습니다. 


32행 : 모델명, 상표, 소유자를 출력시키고 프로그램이 종료됩니다.





반응형

'컴퓨터프로그래밍 > C#' 카테고리의 다른 글

생성자와 소멸자  (0) 2016.11.25
접근제한자와 this  (0) 2016.11.24
C# - 메소드 오버로딩  (0) 2016.11.24
C#_메소드_인자(변수)전달하기  (0) 2016.11.24
C# 변수의 범위  (0) 2016.11.22