[C++] 접근지정자 - (public/private/protected)

목차

  1. 접근지정자란?
  2. 접근 지정자 종류들
  3. 접근지정자 사용해보기 with 코드

1. 접근 지정자란?

객체지향에는 캡슐화라는 단어가 존재합니다. 속성과 메소드들을 묶어서 캡슐에 가둔다는 것인데, 이때 이 캡슐을 얼마나 보여줄지를 나타내는 것접근지정자입니다.

객체지향은 캡슐화가 굉장히 중요한 요소입니다. 


2. 접근 지정자 종류들

public : 모든 접근을 허용한다.
private : 자기 클래스 내부의 메서드에서만 접근 허용
protected : 자기 클래스 내부 또는 상속받은 자식 클래스에서 접근 허용

public은 말그대로  클래스내의 속성과 메소드를 외부에서의 접근을 허용하겠다는 지정자입니다.

private는 자기 클래스내에서 메소드로의 접근만을 허용하겠다는 지정자입니다.

protectied: 자기 클래스 내부 또는 상속받은 자식클래스에서의 접근만을 허용하겠다는 지정자입니다. 


3. 접근지정자 사용해보기

Student.h

#pragma once
#include <string>
#include <iostream>

using namespace std;

class student {
private:
	string name;
	int ID;
	int grade;

public:
	void setName(string name) {
		this->name = name;
	}
	void setID(int id) {
		this->ID = id;
	}
	void setGrade(int grade) {
		this->grade = grade;
	}



	void print_info() {
		cout << "이름: " << name << "\n학번: " << ID << "\n학년: " << grade << "\n";
	}
};

C++코드입니다. 여기서 속성에는 private로 접근지정자를 해주었고, 메소드는 public으로 접근지정자를 해주었습니다.

저 접근지정자를 해석해보면

Name, ID, grade는 클래스내의 메소드를 통해서만 접근할 수 있고, SetName(), SetID(), SetGrade()는 모든접근을 허용하겠다는 의미입니다.

 

Main.cpp

#include "Student.h"

int main(void) {
	student student;

	student.setName("홍길동");
	student.setID(1234567);
	student.setGrade(3);

	student.print_info();
	return 0;
}

메인함수에서는 Student의 속성들을 메소드로 설정해주는 코드입니다.

위 설명에서 속성은 클래스내의 메소드로 접근할 수 있다고 하였고, 그 메소드들은 public으로 외부에서의 접근이 허용이 됩니다.

속성으로 직접적으로 접근이 안되기때문에 메소드로 간접적인 접근을 하는 것입니다.


제가 Protected는 거의 써보질 않아 메소드를 Protected로 지정하면 어떻게 되는지 예시만 보여드리겠습니다.

Student.h - 메소드를 protected로 지정할경우

#pragma once
#include <string>
#include <iostream>

using namespace std;

class student {
private:
	string name;
	int ID;
	int grade;

protected:
	void setName(string name) {
		this->name = name;
	}
	void setID(int id) {
		this->ID = id;
	}
	void setGrade(int grade) {
		this->grade = grade;
	}

	void print_info() {
		cout << "이름: " << name << "\n학번: " << ID << "\n학년: " << grade << "\n";
	}
};

이렇게 코드에 빨간줄이 생기게 됩니다.

코딩을 하면 자동완성을 시켜주는 부분에 접근이 가능한 메소드나 속성들이 뜰겁니다. 하지만 접근을 하지 못하게되어 protected로 바뀐 메소드들에 빨간줄이 생기게 됩니다.

접근지정자를 바꾸지 않는한 main함수에서는 Student의 속성과 메소드에 접근할 방법은 없습니다. 

 

 

+ 접근지정자를 지정해주시지 않으면 Private로 자동지정됩니다.

'C++ > 객체지향' 카테고리의 다른 글

[C++] 상속과 다형성  (0) 2023.11.05
[C++] 생성자와 소멸자  (0) 2023.11.04
[C++] 객체 - 객체지향 첫시작  (1) 2023.10.23