반응형

C++의 가장 큰 특징을 흔히 객체지향언어 라고 표현한다.

 

객체는 어떠한 상태나 특징값을 말한다.

 

예를 들어 자동차 객체의 경우 속성(특징값)은 차종, 색상, 기어, 연비  등이 될 것이다.

자동차 객체의 상태는 출발하기, 멈추기, 감속하기, 가속하기 등이 될 것이다.

 

객체는 어떠한 상태나 특징값을 갖고있다.

 

예를 들어 자동차 객체의 경우 속성(특징값)은 차종, 색상, 기어, 연비 등이 될 것이다.

자동차 객체의 상태는 출발하기, 멈추기, 감속하기, 가속하기 등이 될 것이다.

객체에 값을 보내주는 과정 즉 멤버함수를 호출하는 과정을 "메시지를 전달한다" 고 표현한다.

 

그리고 같은 종류의 객체는 다양하게 존재할 수 있다.

즉 위의 과정에서 객체를 자동차에 비유하였고 상태와 속성을 갖는다고 얘기하였다.

하지만 자동차는 이 세상에 다양하게 존재한다.

경차, 승용차, 승합차, 트럭, 버스...

따라서 이러한 자동차를 모두 만들 수 있는 자동차의 설계도면을 클래스라고 볼 수 있을 것이다.

 

다르게 설명해보면 자동차라는 클래스 안에 승용차, 경차, 승합차 등의 객체가 존재한다고 볼 수 있을 것이다.

 

구조체화 클래스가 헷갈릴 수 있다.

 

영상처리를 할때 사용된 iplimage 구조체를 예를 들자.

iplimage 구조체에는 이미지의 픽셀값을 받아오는 변수, 사이즈를 받아오는 변수, 채널을 받아오는 변수들이

포함되어 있었다.

다시말해 구조체를 통해 속성(특징값) 들을 받아올 수 있었다.

하지만 클래스는 여기에 함수(상태) 가 더해지게 된다.

 

 

#include <iostream>
#include <string>
using namespace std;

class Car{
public:
	int speed;
    int gear;
    string color;
    
    void speedUp(){
    speed += 10;
    }
    
    void speedDown(){
    speed -= 10;
    }
};

int main()
{
	Car myCar;
    
    myCar.speed=100;
    myCar.gear=3;
    myCar.color="red";
    
    myCar.speedUp();
    myCar.speedDown();
    
    return 0;
}

 

위의 내용을 보면 Car이라는 클래스를 만들어 주었고 myCar이라는 객체를 만들어주었다.

그리고 이에 따라 Car의 속성(speed, gear, color)을 지정해주었고 상태또한 멤버함수 호출을 통해 진행하였다.

 

그리고 클래스 내의 변수에 대하여 접근제어를 설정해 주게 되는데 클래스의 멤버변수나 멤버함수에 대하여

Public 으로 설정할지, private으로 설정할지를 결정하는 과정이다.

 

public으로 설정된 멤버변수나 함수는 외부에서 접근이 가능하지만 private의 경우 클래스 내부에서만 접근이 가능하다.

하지만 외부에서도 private 멤어변수를 설정할 수 있도록 할 수 있는데 이때 사용되는 것이 접근자와 설정자이다.

 

 

class Car{
private:
	int speed;
    int gear;
    string color;
    
public:
	int getSpeed(){
    return speed;
    }
    
    void setSpeed(int s){
    speed=s;
    }
    .
    .
    .
}

위의 내용을 확인해보면  private멤버로 speed와 gear을 설정해주지만

public멤버함수로 speed값을 설정해주고 값을 받아오는 과정을 진행할 수 있다.

 

그럼 왜 이렇게 설정자와 접근자로 나누는가.

 

가장 중요한 이유는 정보 은릭으로 클래스의 인터페이스와 구현 부분을 분리하는 것이 좋기 때문이다.

예를들어 gear의 변수를 advanced_gear 로 이름을 변경하고자 할때

접근자를 사용하지 않았다면 모든 gear를 수정해야하지만 접근자를 사용하여 getGear() 을 사용하여 기어의 값을 받아오도록 코딩이 되어있다면 이 부분만 수정해주면 될 것이다.

반응형

'C++' 카테고리의 다른 글

TCP/IP 통신으로 이미지 파일 전송  (0) 2020.10.12
C++ 내부정의, 외부정의, 헤더파일  (0) 2020.01.09

+ Recent posts