반응형

1. 클래스의 기초(클래스 = 하나의 꾸러미), 클래스의 전신은 구조체

변수 -> 배열 -> 구조체 -> 클래스
결국 여러개의 데이타를 하나로 묶는 자료구조

구조체는 변수들을 하나로 묶는 자료구조였다.
그러나, 클래스는 변수뿐만이아니라 함수또한 같이 묶을수 있는 자료구조다.
구조체는 저장하기위한 목적이였지만
클래스는 저장과 처리 이 두가지를 할 수 있다. 즉, 하나의 작은 프로그램이 된다.
구조체는 보안성이 없지만
클래스는 보안성이 있다.(딱 막아놓고 필요한애들만 접근 가능)

클래스 -> 객체..
객체들이 모이면 프로그램이 된다.

즉, 클래스는 하나의 프로그램의 단위명세서라 할 수 있다.

-------------------------------
구조체 :

struct 태그명 {
     :
   변수들
     :
};
-------------------------------
class :

class 태그명 {
      :
  변수들       - 속성
  함수들       - method
      :
};     (객체)
class 태그명 변수;
-------------------------------

public : 접근가능
private : 접근불가

class는 public이나 private를 빼고 선언하게 되면 기본으로 private로 선언이 되며
외부에서는 사용이 금지된다. 그러한 보안성을 갖고 있다.

클래스로 하나로 묶기때문에 캡슐화가 가능해지며
private로 접근을 통제하기 때문에 보안성이 생긴다.

private로 접근을 할 수 있게 해주는 역할을 가진것이
바로 method다.

class CMEM
{
   private: // 이러한 명시를 해주지 않으면 기본적으로 private로 명시된다.
            // private로 명시가 되면 외부에서 접근이 불가능해진다.
       char name[30]; // 멤버변수 : 클래스 안에 있는 변수
       int age;
  
   public:  // public으로 명시해줘야만 외부에서 접근이 가능해진다.
       void setVar(char *n, int a) { // 멤버함수 : 클래스 안에 있는 함수
       strcpy(name, n);
       age = a;
 }
 void prn() {
  cout << "이름 : " << name << ", 나이 : " << age << endl;
 }

   
※ c++ 의 구조체는 클래스와 동일하다.
   단, 차이점이 있다면 구조체는 기본값이 public인 반면 클래스는 private다.
       예제에서는 이해를 돕기위해 c언어에서의 구조체를 얘기한다.

※ 예제에서는 private에는 변수를 넣고 public에는 함수만 넣는다 이렇게
   오해할 수 있지만 사실은 누구나 접근 가능한것에는 public으로 해줘도 무관하다.


2. 상수멤버함수

c++에서 상수라는 말이 나오면 무조건 const다.

이 멤버함수에서는 어떤한 변경을 할 수 없고 그저 읽거나 출력만 할 수 있다.
이렇게 하는 이유는
이 멤버함수가 가진 기능만을 제대로 동작할 수 있도록 하는 일종의
안정장치라고 할 수 있다.

class .... {
   void func() const {
             :
}

이렇게 상수멤버함수로 만들게되면 변경할 수가 없다. 특별한 기능이
있다기보다 이렇게 변경을 하지 못하게 함으로써 프로그래밍을 더
안전하게 할 수 있는 안전장치 역할을 하게 된다.

void write() const {
  year = 2009;// 상수멤버함수로 선언해줌으로써 변수를 바꿀수 없게됐다.
  set(); // 값을 변경할 수 있는 즉 일반멤버함수 조차도 호출할 수 없다.
 // 상수멤버함수는 상수멤버함수만 호출할 수 있다.
  cout << "Title : " << title << endl;
  cout << "Year  : " << year << endl;
 }

3. 클래스의 간결화 : 클래스를 간결하게 만드는것

클래스
 선언  ->  정의  -> 실행

클래스를 선언만 하고 정의에 실제 기능들을 포함시킨뒤 그 기능을 쓸때는 정의에서 불러오는식으로
해서 클래스를 간결하게 할 수 있다.

코드형식 : void Master::set(char *t = "디폴트", int y=2000) {

Master의 함수라는것을 알수있게
반드시 Master::set() 이렇게 명시를 해줘야만 한다.(Master는 class에게 부여한 임시명칭)

클래스 안에 있는 멤버함수는 기본적으로 inline 함수가 된다.
그래서 웬만하면 길게 소스를 작성하면 안된다.
그러나 클래스의 간결화로 함수를 밖으로 빼내었을 경우
자동적으로 inline 함수가 되지 않음으로
함수 앞에 inline 이라고 명시를 해줘야만 한다.

반응형

+ Recent posts