Unity3d C# toolba 사용해보기

C#에서 클래스( Class ) 란 무엇인가?


안녕하세요 C# 프로그램의 클래스에 대해 알아보고자 합니다. 그동안에는 크게 어려운 내용이 없어서 그냥 술술 책을 넘겨왔었는데..

객체 지향프로그램 그것도   java나  C#같은 언어에서 클래스를 잘 이해하지 못한다면 프로그램을 아예 짤 수 없을 지경이 되는 것이죠..

저는 그동안에 델파이를 갖고 개발을 해왔었는데 델파이도 물론 객체 지향 언어는 맞습니다.

하지만 그런 특징적인 것들을 잘 모른 체 그동안 수년간 개발을 해 왔습니다.  ㅜㅜ 이번을 기회로 해서 정말 열심히 기초를 다지는 기회가 되었으면 좋겠습니다.

진행에 앞서.. 용어가 너무 햇 갈려서 정리를 해야 할 것 같습니다. 말을 하나로 통일을 하던가 해야지 햇갈리기만 하네요..ㅜㅜ 용어를 완벽하게 이해 못하고 진행하면.. 객체 지향 프로그램은 소귀에 경읽기 될 것 같습니다.

(혹시 라도 잘못된 것이 있다면 지적해주세요.. 뇌자극C#책을 기반으로 나름대로 정리하긴 했습니다만...)

C# 객체지향



학교다닐때 붕어빵과 붕어빵틀이라는 것을 비유를 해서 배웠던 기억이 나는데요.. 뇌자극 C# 5.0에서도 역시나 아니나 다를까 같은 표현을 쓰셨네요..

클래스 = 붕어빵틀
객체    = 붕어빵 (인스턴스)


형 틀을 이용해서 찍어 내는 것이죠.. 그래서 효율 적인 프로그래밍을 하는 것이 가능합니다.

그래서.. 클래스를 하나 생성해 놓고.. 이것을 해당하는 클래스 타입으로 선언해서 쓰시면 됩니다. 찍어서 쓰는 것이죠..(객체를 생성한다고 합니다...)

class Apple
{
  public string Color;
  public string Size;
}

......

App a1 = new Apple();        -->  a1 이라는 Apple 타입의 객체를 생성 하였습니다.
a1.Color = "red";
a1.Size   = "10";

ConsolWritLine("{0} , {1}", a1.Color , a1.Size );


위처럼 진행을 하면..

결과가 Red , 10 이라는 것이 찍히겠죠....

위와 같이 Apple이라는 클래스를 갖고 객체를 생성하려고 할 때..  new Apple() 이런식으로 코딩을 하였는데  Apple() 이런 표현이되는 것을 생성자라고 합니다. 특별한 메소드라고 하네요..    


C# Class Example1




위의 예제는 뇌자극C# 5.0에 나와있는 예제를 한번 코딩하여서 돌려봤습니다.

Cat이라는 클래스를 만들어놨는데..  new Cat() 을 이용하여.. 객체를 만들어서 값을 넣어봤거든요..
kitty와 nero라는 객체를 만들어서 값이 잘 찍히는 지 확인하는 예제입니다.

이것의 기본구조네요.. 여기 까지는 그럭저럭 잘 이해가 됩니다.

static(정적) 필드와 메소드에 대한 이야기가 나오네요..

static는 프로그램에서 정적이다 라고 표현을 하는데요..
C#에서는 그리고 Class안에 선언이된 정적 필드의 경우 접근하는 방법이 달라집니다. 말이좀 어려운 것 같습니다.

예를 들어..   아래처럼 class A 안에 public으로 선언이 된 필드 a1,a2가 있는데 이것에 접근하려면.. 객체를 생성해서 접근을 해야 하지만..

class A
{
  public int a1;
  public int a2;
}
class MainApp
{
       static void Main(string[] args)
       {
A sub = new A();
sub.a1 = 10;
sub.a2 = 20;
        }
     ........
}


아래 화면과 같이 static 이라는 것을 붙여 정적으로 한정 시켜 주면....  객체를 생성하지 않아도 해당 클래스의 필드(변수)에 접근이 가능 하다는 거죠..
아직은 초반이라 이런 것이 되는구나.. 정도만 알 것 같은 데요.. 전역 변수와 같이 써먹을 수 있을 것 같기도 하고요..

class A
{
  public static int a1;
  public static int a2;
}
class MainApp
{
       static void Main(string[] args)
       {
A.a1 = 10;
A.a2 = 20;
        }
     ........
}


정적 메소드역시 마찬가지 일 거라 생각이 듭니다.
그래서 객체를 생성하지 않아도 접근할 수 있는 메소드라고 생각이 드네요..

class A
{
   public static void A00()
   {
       // ....
   }
}

......

A.A00();    <--이런식으로   (인스턴스)를 만들지 않고 접근이 가능합니다.


아래는 정적 필드를 선언하여서 카운트가 어떻게 올라 가는지 확인하는 프로그램입니다.
Global이라는 Class안에..  static 으로 Count필드를 선언 하였고 초기화 하였는 데요..

static이기 때문에 객체를 생성하지 않고 바로 필드로 접근하는 식으로 이것안에 메소드를 만들었습니다.

그리고 main클래스 안에서 Count를 위해 new class() 이렇게 생성하며 접근 하였습니다.

결과적으로 4번 호출하였기 때문에 아래와 같이 4라는 count가 찍히게 되었네요..


C# Class Example static




일단 이정도로 정리하고 이어서 가야겠습니다. 아직도 class에 대한 내용이 많네요 감사합니다.





댓글