안녕하세요! 공대남입니다. C언어부터 공부하시고 C++를 하시는 분들은 클래스를 처음 접하실 것 입니다.

(객체지향언어를 처음 하신다면) 객체지향언어에서는 클래스와 객체가 중요한 개념입니다.

오늘은 클래스의 정의에 대해 알아보고 구조체와 어떤 차이점이 있는지 알아보겠습니다.

차례

1. 클래스의 정의

2. 접근제어 지시자

3. 구조체와 클래스의 차이점

1. 클래스의 정의

클래스의 정의를 설명하기 앞서 간단한 구조체의 코드를 예를 보겠습니다.

2차원 좌표계 데이터를 구조체를 통해서 만들었습니다. 메인함수에서 p1을 선언하고 구조체를 초기화해주면 됩니다.

구조체와 클래스 둘 다 연관 있는 데이터를 묶을 수 있는 문법적 장치입니다.

여기서 클래스로 바꾸고싶다면, struct를 지우고 class를 써주면 됩니다.

그런데 그대로 컴파일을 한다면 오류가 발생합니다.

그러면 둘 다 데이터를 묶는 문법적 장치이고 선언하는 법도 같은데 왜 이런 오류가 발생할까요?

그 이유는 바로 접근법의 차이입니다. 이 차이가 클래스와 구조체의 차이입니다.

이 차이는 접근제어 지시자를 설명하며 구체적으로 설명하겠습니다.

-

2. 접근제어 지시자

C++ 접근제어 지시자는 다음과 같이 총 세가지가 존재합니다.

public : 어디서든 접근허용

protected : 상속관계에 놓여있을 때, 유도 클래스에서의 접근허용

private : 클래스 내(클래스 내에 정의된 함수)에서만 접근허용

다음과 같이 정의 됩니다. 그럼 여기서 위에서 왜 오류가 났는지 설명이 됩니다.

구조체의 경우 접근제어 지시자를 따로 선언하지 않는다면 모든 변수와 함수는 public으로 선언됩니다.

그래서 어디서든 접근이 가능해서 main함수에서의 초기화가 가능했습니다.

반면, class의 경우 접근제어 지시자를 따로 선언하지 않는다면 모든 변수와 함수는 private로 선언됩니다.

그렇기 때문에 main함수에서 초기화가 불가능했습니다.

 그래서 다음과 같이 코딩을 해보겠습니다.

좌표 x, y의 데이터를 private로 선언합니다. main에서 이 객체로 직접적으로 접근이 불가능합니다.

그리고 초기화 함수를 class 안에 public으로 정의합니다.

이 클래스의 함수를 public으로 정의했기 때문에 메인함수에서 접근이 가능합니다.

Init() 이라는 함수는 Point2D라는 클래스 안에 있기 때문에 좌표 x, y 의 데이터의 접근이 가능합니다.

그렇기 때문에 메인함수에서 클래스 함수를 호출하여 초기화가 가능합니다.

-

3. 구조체와 클래스의 차이점

마무리로 정리하자면 클래스와 구조체의 역할은 큰 차이는 없습니다.

둘 다 객체를 묶는 문법적인 역할을 합니다. 이 둘을 가르는 차이는 선언에 따른 차이 입니다.

즉, 구조체는 접근제어 지시자를 선언하지않으면 public 으로

클래스는 private로 선언된다는 것 입니다.

+ Recent posts