2024. 6. 26. 23:55ㆍC++
컴퓨터 언어를 공부하면서 가장 많이 들었던 질문은 객체와 클래스의 차이였다. C를 공부할 때는 이 질문을 들으면 객체와 클래스가 뭐지? 먹는건가? 였고, 가끔 C++에 대해 공부할 때 이 질문을 들으면 클래스는 붕어빵 틀이고 객체는 붕어빵이다!!! 였고, Unity엔진을 사용하면서 C#을 공부할 때 이 질문에 대해서 비로소 답다운 답을 내놓을 수 있었다.
클래스는 객체의 특징을 정의한 설계도라고 표현할 수 있고, 객체는 클래스를 인스턴스화 시켜서 만들어진 하나의 인스턴스를 뜻한다.
별다른 설명이 필요하지 않은 일반적인 C 예제이다. 여기서 코드를 보면 제작자와 사용자가 마치 갑,을 관계같다고 생각한다.
사용자는 제작자가 만든 자료구조(구조체)의 멤버 및 구성을 알고있어야하며, 자료구조에 담긴 정보를 출력하고 싶다면 사용자 스스로 직접 멤버에 접근해야하며 적절한 출력 방법도 선언해야한다.
만일 제작자가 자료구조를 변경한다면 사용자는 제작자의 코드와 관련된 자신의 코드를 몽땅 수정해야하는 불상사도 발생할 수 있다.
우리는 코드를 작성할 때 사용자의 편의성을 극대화해야한다. 왜냐하면 제작자는 1명이지만, 제작자의 코드를 사용하는 사용자는 여러명일 경우가 많기 때문이다.
그렇다면 다수의 사용자를 조금이라도 배려하는 제작자의 코드는 어때야할까?
이 코드에서 확인할 수 있는 점은 사용자가 제작자 코드의 구성을 알지 않아도 손쉽게 코드를 사용할 수 있으며, 제작자의 코드가 변경하여도 age와 name의 변수가 바뀌지 않는 한 사용자는 PrintData함수를 사용할 수 있다는 점이다.
제작자가 PrintData 함수를 사용자에게 제공함으로써 출력을 위한 구체적인 방법을 사용자가 알 필요가 없다. 이러한 기능을 하는 함수를 인터페이스 함수라고 부른다.
자동차로 비유하자면, 모든 자동차는 핸들, 브레이크, 액셀과 같은 보편적인 인터페이스를 제공한다. 제작자가 자동차 내부 구조를 변경했다한들 운전 방법을 새로 배워야할 필요는 없다.
PrintData함수를 만약 구조체 안에 넣으면 어떻게 될까?
C언어에서는 구현할 수 없지만 C++에서는 이 것이 바로 클래스이다.
C++에서 일반적으로 사용하는 클래스의 기본 구조이다. 10~12번 행 코드는 USERDATA 클래스의 멤버 함수인 Print() 함수를 선언 및 정의한 것이다. 여기서 중요한 점은 age와 name은 Print()함수 내부에 선언된 지역 변수가 아닌 Print() 함수가 속한 클래스의 멤버변수라는 점이다.