Qaupot Blog
Software Engineering, Trip

201. Class 선언과 접근 권한

🕐 Fri, 14 Feb 2014 09:00:00 GMT 🕓 Thu, 26 Aug 2021 12:55:00 GMT

Class

Class 는 같은 집단에 속하는 속성 및 행동을 정의합니다.

  • 프로그래밍적으로는 C 에서의 struct 와 비슷한 사용자 정의 데이터 타입입니다.
#include <iostream>

class Number
{
public :
    int number;
    int getNumber();
};

int Number::getNumber()
{
    return number;
}

int main(int argc, char** argv)
{
    Number number;
    number.number = 1;

    // C style standard print
    printf("%d", number.getNumber());

    // C++ style standard print
    std::cout << number.getNumber();

    return 0;
}

C에서 struct 는 멤버 변수만을 가질 수 있었지만, C++ 에서의 Class 는 멤버 함수를 가질 수 있습니다.

class 클래스 이름
{
 멤버 변수 혹은 멤버 함수
};

클래스 내의 멤버들은 모두 동일 범위에 놓여있는 것으로 간주됩니다.

  • 멤버함수 getNumber 는 멤버 number 를 자유롭게 사용할 수 있습니다.

선언과 구현을 분리할 경우에는 Scope(::)를 사용하여 범위를 표기합니다.

int Number::getNumber()
{
    return number;
}

위 예제의 경우, Number 클래스의 getNumber 함수라는 의미를 가집니다.

다시 정리하면, 아래와 같습니다.

반환형 Scope명::멤버명
{
    구현내용
}

멤버 접근 권한

class Number
{
public :
    int number;
    int getNumber();
};

모든 클래스의 멤버들은 접근권한이 지정되어야 합니다. 권한은 아래와 같습니다.

  • public
  • private
  • protected

접근권한을 표기한 지점으로 부터 이하의 멤버들은 같은 권한으로 지정됩니다.

  • 지정하지 않을 경우 class 의 모든 멤버 권한은 private 입니다.
class Number
{
public :
  int number;
  int getNumber();
private :
  int privNumber;
public :
  int pubNumber;
};

클래스 내에서 필요한 만큼 접근 권한을 지정할 수 있습니다.

public

public 권한은 멤버를 클래스 외부에 완전히 공개하겠다는 의미입니다. .연산자를 통해 외부에서 직접 이 멤버를 사용할 수 있습니다.

class Number
{
public :
    int number;
    int getNumber();
};

number 와 getNumber 는 public 접근 권한으로 지정되었습니다.

Number number;
number.number = 1;

// C style standard print
printf("%d", number.getNumber());

. 연산자를 통해 직접 접근할 수 있습니다.

private

private 권한은 이 멤버를 클래스 외부에 공개하지 않겠다는 의미입니다.

class Number
{
private :
    int number;
    int getNumber();
};

number 와 getNumber 는 클래스 외부에서 호출될 수 없습니다.

int Number::getNumber()
{
    return number;
}

그러나 getNumber 함수에서 사용하는 number 는 같은 클래스 내의 변수이기 때문에 호출할 수 있습니다.

protected

protected 는 기본적으로는 private 와 동일하지만, 상속 시 부모 클래스의 protected 멤버들을 자식 클래스에 한해 접근할 수 있습니다.

구조체 (struct)의 확장

C++ 에서 구조체는 모든 멤버가 public 접근 권한을 가지는 class 로 취급됩니다. 따라서 C 에서는 가지지 못 했던 멤버 함수를 struct 도 가질 수 있습니다.

이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 라이선스를 따릅니다.

This blog is personal blog. published posts may contain some errors, but author doing efforts to clear errors.
If post have not notice of license, it under creative commons Attribution-NonCommercial-NoDerivatives 4.0.