C++ / OOP / 접근 지정자 / 캡슐화

jaeha_lee·2022년 5월 9일
0
  • OOP
    • 상태를 나타내는 데이터와 상태를 조작하는 함수를 묶어서 타입을 설계
    • 데이터와 함수가 분리 되어 있으면 데이터를 항상 함수 인자로 전달해야 함
    • 즉, 데이터와 함수를 묶어서 타입을 설계 -> 보다 안전하고, 사용하기 쉬운 타입을 설계 가능
  • C의 경우 구조체 안에 함수 넣을 수 없고
  • C++의 경우 구조체 안에 함수를 넣을 수 있다.
	struct Example{
    	int a;
        int b; // int a,b 를 member data라고 부름
        
        int funcA(){
        	return;
        } // 이것을 member function이라고 하며, 다른 언어는 method라고 함.    	
    }
  • 위키피디아 : 객체란, 메모리에 존재하고 이름으로 접근할 수 있는 모든 것

  • 메모리 관점 : 객체를 지역변수로 생성하면, 스택에 멤버 데이터만 객체당 한개 씩 생성
    멤버 함수는 객체의 개수에 상관 없이 코드 메모리에 한 개만.
    즉, strcut Example t1,t2,t3; 라고 선언하면 STACK 영역에 멤버 데이터들이 3개(선언한 개수만큼) 할당되고
    CODE MEMORY 영역에 멤버 함수가 1개(객체 수에 상관 없이) 할당된다.


  • 멤버 데이터의 경우 외부에서 직접 접근하는 것은 옳지 못함
  • 접근 지정자
  • private : 멤버 함수에서만 접근 가능
  • public : 모든 함수에서 접근 가능
  • protected : 멤버 함수와 파생 클래스 멤버 함수에서 접근 가능
	struct Person{
    private:
    	std::string name;
        int age;
    protected: // 이렇게 age 멤버 함수를 접근하기 위해서 멤버 데이터만 가능
    	void setAge(ing value){
        	if(value > 0)
            	age = value;
            else
            	age = 0;
        }
    
    
    
  • 보통 데이터를 private / 함수를 public
  • 구조체의 경우 적지 않으면 default는 public
    => struct 접근 지정자 생략 시 디폴트 public
    => class 접근 지정자 생략 시 디폴트 private
		

0개의 댓글