• 클래스(C언어만사용했다면...데이터타입이라고생각을하면쉬움)
    • 고전적인 절차적 프로그래밍에서는 변수에 값을 대입한 후 연산하는 식의 방법으로 프로그래밍하는 것이 일반적이었다. 
    • 그러나 객체지향프로그래밍 언어에서는 객체라는 개념이 절차적 프로그래밍 변수를 대신해서 프로그래밍의 주체가 되어 프로그래밍되는 방법을 취하는데, 객체가 변수와 다른 점은 변수는 값만을 가지는데 비해 객체는 값과 움직임(행위)를 함께 가진다는 것이다.
    • C언어 문법에서는 서로 다른 데이터타입의 자료들을 다루기 위해 구조체라는 자료형을 이용했었다.
    • 객체지항형 프로그래밍에서는 객체를 표현하기 위한 구조로 Class를 제시하는데 이것은 C언어의 구조체와 아주 흡사한 구조로 되어 있으며, 클래스 안에는 값을 표현하기 위한 멤버필드와 행위를 표현하기 위한 멤버 메소드라는 개념을 제시하고 있다.

 

  • 객체생성
    • 클래스 선언만으로는 프록그래밍을 할 수 없고 반드시 객체를 생성해서 프로그래밍하는 형식을 취해야한다. 
    • 에를 들어, 클래스를 하나 선언하면 그 클래스형 객체를 생성해야한다.
    • 절차적 프로그래밍언어에서 주인공이었던 변수는 반드시 선언되어야하는 것을 우리는 잘 알고 있다. 
    • 이때, 변수를 선언하는 방법은 
      자료형 변수명;
    • 이런식으로 선언무을 작성했다. 이 경우를 객체지향형 프로그래밍에 대입한다면 자료형에 해당하는 것이 바로 클래스이고, 변수에 해당하는 것이 바로 객체명이 된다.
    • 다시 말해서, 클래스 그 자체로는 실체는 없고, 개념만 존재하므로 실체에 해당되는 객체를 반드시 생성해 주어야만 한다.
    • 객체를 생성하는 방법은 변수를 선언하듯이
      클래스명 객체명;
    • C#에서는 모든 형식이 클래스이다. 
    • 따라서 int, float, string과 같은 기본 데이터 형식도 생성자를 가지게 된다. 
    • 그러므로 
      int a = new int(); 이런 형식의 코딩이 가능하다. 

 

  • 멤버필드와 멤버메소드의 참조
    • 객체지향형 프로그래밍에서의 절차를 생각해보면...
      • 처음 클래스를 선언한다. (클래스 안에는 멤버필드와 멤버메소드들이 존재한다.)
      • 그 다음 클래스 형 객체를 선언한다.
      • 그렇다면, 멤버필드와 멤버메소드들은 어떤식으로 접근할 것인가? 바로 그 클래스형 객체를 이용해 접근(참조)한다.
      • 어떤 클래스의 멤버필드와 멤버메소드를 참조하는 형식은 다음과 같다.
        객체.멤버필드         객체.멤버메소드

 

  • 생성자와 소멸자
    • 생성자
      • 클래스 내부에 정의된 클래스와 같은 이름을 갖는 멤버함수를 생성자(Constructor)라고 한다. 
      • 생성자는 클래스형 객체가 선언될 때 마다 자동적으로 호출되는 함수이다. 
      • 주로 객체 선언 시 객체 내의 자료를 초기화하는 수단으로 사용된다.
      • 생성자는 클래스와 같은 이름의 멤버메소드로 선언하며 return type을 기술하지 않는다.
      • 생성자는 여러 개로 정의할 수 있다. 
      • 성성자의 접근 지정자는 일반적으로 public으로 선언한다.

    • 소멸자
      • 클래스 이름 앞에 ~(tilder)를 붙인다.
      • 생성자와는 반대로 객체가 선언되어 사용되던 블록이 끝날 때(객체가 소멸될 때)자동적으로 호출되는 함수.
      • 주로 객체가 생성될 때 동적으로 할당한 메모리를 객체 소멸과 함께 해제하고자 할 때 사용된다. 
      • 반환형이 없으며, 실제로 반환도 일어나지 않는다.
      • 매개변수는 void 형이기 때문에 디폴트 매개변수 선언도 불가능하며, 함수의 오버로딩도 불가능하다. 

  • 객체복사하기
    객체를 복사하는 방법에는 얕은 복사와 깊은 복사 두 가지 방법이 존재한다.
    • 얕은 복사
      - 클래스는 처음부터 참조형식이기 때문에 참조만 살짝 복사하는 것을 의미한다.
      - 얕은 복사된 변수에 값을 대입하면 얕은 복사 대상의 변수도 값이 변경된다.
    • 깊은 복사
      - 객체복사 시 값의 내용을 복사 받아 별도의 공간에 저장하는 것을 깊은 복사라고 한다. 복사 대상과 복사된 것은 별도의 저장 공간을 사용한다.
      - C#에서는 자동으로 깊은 복사를 해주는 구문이 없으므로 프로그램으로 구현을 해야한다.

+ Recent posts