오늘은 Class에 대해 배웠다.
출처 : https://momoslog.tistory.com/4
- 운전자를 예로 들어 설명하면 우리가 차를 운전하는데 차의 세부 사항까지 깊게 알고 운전하지 않는다. 차를 운전하는 방법은 차종, 모델을 떠나 자동차라면 공통적인 운전방법이 있다. 엑셀을 밟으면 속도가 올라가고 브레이크를 밟으면 속도가 줄어든다. 우리가 브레이크와 엑셀의 작동원리를 몰라도 자동차는 운전하는데 문제가 없다.
- 클래스를 사용하는 이유
- 사용성이 떨어진다.
사용자가 알아야 할 정보가 많아지기 때문에 고려해야 할 예외가 증가한다.
- 구현 난이도가 증가한다.
사용 시, 발생할 수 있는 예외를 모두 고려해야 하기 때문에 코드가 복잡해진다.
즉, 제품을 만들 때에는 필수적인 기능을 제외하고 세부 사항을 숨기는 것이 사용자나 개발자에게 모두 좋다.class
- 세부 데이터는 멤버 변수로 관리한다.
- 멤버 함수에서 필요한 정보라든지, 클래스 자체에서 내부 연산시 필요한 정보는 멤버 변수로 관리한다. 보통 멤버 변수는 외부에서 접근하지 못하게 하는 경우가 많다.
- 필요한 동작만 공개, 세부 데이터는 숨기는 방식이 변화에 유연하게 대처 할 수 있다.
- 일반적으로 멤버 함수(동작)와, 멤버 변수(데이터)로 구성된다.
+----------------+
| 클 래 스(Class) |
+----------------+
| 멤버 변수(상태) | ← 객체의 특성/속성
+----------------+
| 멤버 함수(행동) | ← 객체가 할 수 있는 동작
+----------------+
클래스 내부에서 멤버 함수의 본문까지 직접 정의할 수 있고, 내부에는 멤버 함수의 선언만 작성하고, 클래스 외부에서 구현하는 방법이 있다.
- 클래스는 접근 제어자를 통해 클래스에 데이터를 넣는다. private이 가장 제한적이고, public이 가장 넓은 개념, 지정하지 않으면 기본값은 private이다.
- 클래스는 일종의 사용자 정의 타입이며, 이 타입으로 생성된 실제 메모리에 할당된 객체를 인스턴스라고 한다.
- 클래스는 상속을 통해 기본 클래스(Animal)의 특성을 파생 클래스(Dog, Cat)가 물려받을 수 있다. Dog 클래스는 Animal의 eat() 메소드를 상속받아 사용할 수 있다.
- 상속 관계에서 같은 이름의 메소드가 다르게 동작하도록 할 수 있다. virtual 키워드를 통해 구현되며 코드의 유연성과 확장성을 높여준다.
Class를 통해 공통의 데이터를 묶어 여러 객체를 만들 수 있다는 것으로 이해가 됐다. 이것으로 언리얼게임에서 여러 몬스터와 캐릭터를 만들 수 있는 것 같았다.
C++ 문법 복습, 2번째 과제 수행