객체지향프로그래밍
객체 지향 프로그래은 현실에 존재하는 사물과 대상,
그리고 그에 다른 행동을 그대로 실체화시키는 형태의 프로그래밍이다.
#객체
객체 = 변수들과 참고 자료들로 이루어진 소프트웨어 덩어리
추상화, abstsration = 객체를 현실 세계로 소환하는 과정
- Instance variable: 객체의 변수
- Instance method: 객체의 함수
인스턴스 변수들은 외부로부터 보호되어 인스턴스 함수를 통해 사용가능 (ex. class 에서 private 기본값)
캡슐화, Encapsulation : 직접 인스턴스 변수의 값을 바꿀 수 없고 항상 인스턴스 메소드를 통해 간접적 조절
* C++언어는 템플릿을 이용하여 generic 한 프로그램 작성이 가능하며 함수형 프로그래밍을 할 수 있고, 기존 C스타일로 저라 지향적인 프로그래밍도 가능하기에 멀티 패러다임 언어로 정의하는 것이 명확하다.
#클래스,class
- 구조체
구조체는 연관 있는 데이터를 묶을 수 있는 문법적 장치
C++에서는 C와 달리 typedef 없이 struct 생략 가능
구조체 내 함수를 정의하여 구조체 이름 생략하여 사용 (= 함수를 인라인으로 처리하다)
or
구조체 내 함수의 원형선언 and 함수 정의는 구조체 밖에서 실행
구조체 안에 enum 상수 선언하여 구조체안에서만 사용하는 매크로변수를 enum으로 한데 묶어버림
- 클래스와 객체
C++에서 구조체는 클래스의 일종
키워드 struct 대신 class 사용!
클래스는 기본적으로(별도의 선언을 하지 않으면) 클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근가능
→ 클래스 정의는 각각의 변수 및 함수 접근 허용범위를 별도로 선언
# 접근제어 지시자(접근제어 레이블): 콜론과 함께 사용
- public : 어디서든 접근허용, 구조체에서 default
- protected : 상속관계에 놓여있을 때, 유도 클래스에서의 접근허용
- private : 클래스 내(클래스 내에 정의된 함수)에서만 접근허용, 클래스에서 default
+) 레이블
: 접근제어 지시자 뒤에는 세미콜론이 아닌 콜론이 등장, 이는 접근제어 지시자가 특정 위치정보를 알리는 레이블이기 때문
(또 다른 예시로 swith문에서 case도 레이블이기 때문에 콜론이 등장 )
- 접근 제어 지시사 A가 선언되면, 그 이후에 등장하는 변수나 함수는 A에 해당하는 범위 내에서 접근 가능
- 새로운 접근제어 지시사 B가 선언되면, 그 이후에 등장하는 변수나 함수는 B에 해당하는 범위 내에서 접근 가능
- 함수의 정의를 클래스 밖으로 빼도, 클래스 일부이기 때문에, 함수 내에서는 private으로 선언된 변수에 접근 가능
- 키워드 struct 를 이용해서 정의한 구조체(클래스)에 선언된 변수와 함수에 별도의 접근제어 지시자를 선언하지 않으면, 모든 변수와 함수는 public으로 자동선언됨
- 키워드 class를 이용해서 정의한 클래스에 선언된 변수와 함수에 별도의 접근제어 지시자를 선언하지 않으면, 모든 변수와 함수는 private로 자동선언됨
객체(object) : 클래스 내 변수를 의미함
멤버변수: 클래스를 구성하는(클래스 내에 선언된) 변수
멤버함수: 클래스를 구성하는(클래스 내에 선언된) 함수