본문 바로가기
C++/기초(두들낙서)

[C++기초] 클래스 개념소개,접근제어 지시자,구조체와 클래스의 차이점

by Meaning_ 2022. 1. 12.
728x90
반응형

클래스란?

클래스의 가장 기본적인 기능이 자료저장과 자료처리이다. 

즉, 클래스(타입)는 특정한 용도를 수행하기 위한 변수와 함수를 모아 둔 틀이다.

객체(오브젝트)는 그 틀을 이용하여 찍어낸 객체이다. (변수,메모리 상의 공간을 의미)

 

 

TV구조체를 만들어봤다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
 
using namespace std;
 
struct TV {
    bool powerOn;
    int channel;
    int volume;
};
 
int main() {
    TV lg;
    lg.powerOn = true;
    lg.channel = 10;
    lg.volume = 50
}
cs

 

TV 볼륨이 너무 크지 않게 조절하는 함수를 만들어볼거다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
 
using namespace std;
 
struct TV {
    bool powerOn;
    int channel;
    int volume;
    void setvolume(int vol) {
        if (vol >= 0 && vol <= 100) {
            volume = vol;
        }
    }
};
 
int main() {
    TV lg;
    lg.powerOn = true;
    lg.channel = 10;
    lg.setvolume(50);
 
 
}
cs

 

setvolume이라는 함수를 이용해 볼륨을 조절할 수 있다. 하지만 프로그래머가 setvolume이라는 함수의 존재를 까먹고 lg.volume을 쓴다면 볼륨 범위 밖의 볼륨을 선언할 수도 있다. 그래서 lg.volume을 못쓰게 하려 하는데 C++에서 이런 기능을 제공해주는게 접근제어 지시자이다.

setvolume 함수 내에서는 볼륨을 바꿀 수 있는데 밖에서는 volume에 접근을 불가능하게 하는 것이다. 

 

접근제어 지시자 

private,protected,public이 있다.

 

위의 예시처럼 채널과 볼륨이 외부에 의해서 접근되지 않도록 접근제어자를 이용해 코드를 바꿔보았다.

 

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
#include<iostream>
 
using namespace std;
 
struct TV {
    private:
        bool powerOn;
        int channel;
        int volume;
 
    
    public:
        void on() {
            powerOn = true;
            cout << "TV를 켰습니다." << endl;
        }
        void off() {
            powerOn = false;
            cout << "TV를 껐습니다." << endl;
        }
        void setChannel(int cnl) {
            if (cnl >= 1 && cnl <= 99) {
                channel = cnl;
            }
        }
        void setvolume(int vol) {
            if (vol >= 0 && vol <= 100) {
                volume = vol;
        }
    }
};
 
int main() {
    TV lg;
    lg.on();
    lg.setChannel(10);
    lg.setvolume(50);
 
 
}
cs

 

public으로 선언한 함수들을 통해서 채널을 바꾸고, 볼륨을 켤 수 있게 만들어보았다. 

 

이런식으로 안에 내부적인 속성들을 보호하고,외부사용자들에게 속성들에 접근할 수 있는 인터페이스를

만들어주는 것을 "캡슐화"라고 한다.

 

 

구조체와 클래스의 차이점 

struct는

private 으로 묶여있는 변수들이 private이 없다면 접근제어 지시자의 디폴트가 public이다.

그래서 접근이 제한되어야 하는 경우, struct에서는 항상 private을 써줘야 한다.

하지만 class의 경우 private을 써주지 않아도 접근제어 지시자의 디폴트가 private이다.

 

 

 

728x90
반응형

댓글