기본적으로 우리가 이러한 프로그램을 짰다고 가정해보자. main문에서 uniform initialize를 이용해 초기화를 하는 방법이 있고, 각 member별로 초기화하는 방식도 있다. 근데 여기서 struct를 class로 바꾸면 어떤 일이 발생할까?
이러한 문제가 발생한다. class로 만들어버리면 class안에 있는 것은 자신만 건들 수 있고, 나머지는 건들지마! 라고 하는 식이 되어버리는 것이다. 따라서 main문은 class에 접근할 수 없어서 complier가 저기에 접근할 수 없는데 어떻게 해야돼? 라고 오류를 내보내고 있는 것이다.
이를 해결하는 방법은 public:
을 사용하는 것이다.
여기서 access specifier에는 public, private, protected가 있는데, protected는 나중에 설명하도록 하겠다.
우선 public을 사용하면 아래의 main문에서도 사용할 수 있도록 설정해주는 기능이라는 것을 알 것이고, pivate는 public을 사용하지 않을 때의 default 상태라는 것을 알면된다. 즉, 아까처럼 public:을 사용하지 않고 main문이 접근하지 못하는 경우가 private상태이다.
이제부턴 코드의 길이가 조금씩 길어지는 문제가 발생한다.
좀 설명할게 많긴 한데,,, 보통 구현을 할때 변수 쪽을 보면 private로 구현되어 있고, function은 public으로 구현되어 있다. 쉽게 접근하지 말라는 뜻이므로, 우리가 접근하기 위해서는 함수를 사용하여 구현하는 방식이 정말 일반적이다. 대부분의 오픈소소를 보면 이와 같은 형식으로 구현되는 것이 많으므로 이처럼 코드를 작성하는 방식을 알아두는 것이 좋다.
또한, set을 만들었으면 get함수도 만들어 return 하는 방식으로 프로그램을 구성한다. m_day로 직접 접근하는 방식이 아니라 getDay()를 통해 접근하는 방식을 선호한다.
그리고 get함수를 사용할 때에는 변수 값을 바꾸지 못하게 const를 사용하고 바꾸려면 무조건 set함수를 거치도록 하는 방식이 좋은 프로그래밍이다.
이런 방법을 캡슐화라고 한다.