본문 바로가기
[ C++ ]/- C++ 실습연습

C++ [클래스_01, Class, 객체, 멤버변수, 멤버함수, 접근지정자]

by MRG 2021. 7. 20.
728x90
반응형

▣ 안녕하세요. 이번장에서는 클래스를 공부해보겠습니다.

클래스는 C언어에 구조체 형식과 매우 비슷합니다.

쉽게 이야기해서 구조체 또한 변수, 배열, 함수를 구조화시켜서 한꺼번에 관리하기 위해 만든 구조입니다.

즉 클래스는 메모리를 하나에 객체화로 구조화 시켜 관리하기 위함입니다. 

이해를 돕기 위해 코드를 하나하나 작성하면서 공부해보겠습니다. 

 

728x90

 

▣ 클래스는 선언하려면 C언어에서의 struct 구조체와 동일하게 class 키워드로 선언을 합니다.

자료형 타입이라고 생각하시면 편하실 겁니다. 

class를 작성한 다음 옆에 클래스에 이름을 치고 {} 괄호로 클래스에 범위를 지정해주세요.

구조체와 함수에 형식과 동일합니다.

그런 다음 public: 접근지정자로 외부에서 접근할 수 있게 지정을 해줍니다.

이게 있어야 외부에서 클래스 안에 있는 멤버 변수를 접근할 수 있게 됩니다.

이건 뒷부분에서 더 알아보겠습니다.

string, int, float 멤버변수를 선언했습니다.

그럼 class가 선언되었습니다.

이제 이 class에 틀로 메모리를 찍어서 사용할 수 있습니다. 

 

▣ 우리가 main에서 변수를 만들고 사용할때 자료형(타입)을 쓰고 이름을 쓰는 것처럼

class를 객체로 인스턴스화 객체화 시켜서 사용하려면 처음에 타입을 class에 이름으로 

그리고 변수에 이름을 넣어주시면 class를 변수 이름 game 1으로 사용할 수 있게 됩니다. 

class에 있는 멤버변수를 사용하려면 구조체와 동일하게. 점으로 멤버에 접근합니다.

멤버를 접근해서 값을 대입해준다음에 값을 출력해보면 제대로 출력되는 걸 확인할 수 있습니다.

 

▣ 같은 Game 클래스에 game2라는 변수로 또 다른 걸 정의하고 따로 값을 대입하면 다른 값들이 각각 

출력되는 걸 확인할 수 있습니다. 

다시 말해 Game이라는 클래스를 각각에 객체로 만들어 사용할 수 있습니다.

객체라는 건 쉽게 말해 메모리에 틀을 잡아서 그걸 찍어서 사용한다라고 생각하시면 됩니다.

그래서 붕어빵 비유가 나오는 겁니다.

클래스라는 건 붕어빵 틀이고 game 1, game 2 객체들은 틀로 만든 직접 만든 붕어빵 그 자체라고 생각하시면 됩니다.

 

▣ 이번에는 class에 public이 아닌 private를 사용해보겠습니다.

이것도 접근지정자입니다. 하지만 이건 해당 클래스에 있는 내부 멤버 함수만 접근이 가능하고 

외부에서는 접근이 안되는 접근 지정자입니다. 

그래서 private으로 지정을 한 gameScore는 접근을 하려고 해도 접근하지 못합니다. 

이 부분은 나중에 계속 활용하며 공부하도록 하겠습니다. 

 

▣ 이번에는 클래스내부에 멤버 함수를 만들어보겠습니다.

클래스 내부에 함수를 정의하면 그게 멤버 함수입니다. 

함수를 만들고 매개변수로 값을 받고 그걸 출력하는 함수를 만들고,

game 1으로 접근하여 매개변수 값을 하나씩 입력하면 이렇게 어떤 매개변수 값을 입력해야 할지 정보가 나옵니다. 

 

▣ 그 매개변수에 값에 맞게 매개변수 값을 넣어 함수를 호출을 각각 해보면 

값이 다르게 출력되는걸 확인할 수 있습니다.

이로 인해 코드도 짧아지고 하나에 클래스에 틀로 여러로 사용할 수 도 있습니다. 

 

▣ 그리고 멤버함수 안에 if문을 용해서 값을 제한해서 매개변수 값을 받게 할 수도 있습니다.

그럼 외부에서 잘못된 값을 넣더라도 멤버 함수에 있는 조건문을 통해 걸러지게 됩니다. 

 

▣ 또 하나를 생각해보면 클래스안에 여러 함수가 있는 그 이름이 같아 함수 오버 로딩으로 사용할 수도 있지만,

매개변수도 아에 같은 상황이 있을 수 있습니다. 그럴 때 namespace를 사용하시면 됩니다. 

이처럼 결국 코딩을 한다는건 메모리를 어떻게 다루냐에 차이입니다. 

그러니 하나하나 이름에 연연하지 마시고 하나하나 코드를 따라가시면서 공부해주세요.

 

728x90
반응형

댓글