개요
OOP는 프로그램 설계 방법의 하나이다.
- 추상화
- 캡슐화
- 다형성
- 상속
- 코드의 재활용
객체 지향 프로그래밍은 위의 기능들을 지원한다.
c에 OOP기능을 추가한 c++을 사용하는 가장 큰 이유중의 하나. 클래스에 대해 알아보겠다.
클래스
추상화란 정보를 사용자 인터페이스로 표현하는 것이다.
데이터 객체에 필요한 메모리의 크기를 결정하고 메모리를 어떻게 해석할지 결정하고 수행할 수 있는 연산을 결정한다.
클래스는 추상화를 사용자 정의 데이터형으로 변환해 주는 c++의 수단이다.
클래스는 데이터 표현과 데이터를 메서드들을 하나의 패키지 안에 결합한다.
클래스 설계는 public 인터페이스와 세부적인 구현을 분리한다.
public 인터페이스는 설계의 추상화를 나타낸다.
private을 이용해서 데이터은닉과 세부적인 구현들을 따로 결합하여 추상화와 분리하는 것을 캡슐화라고 한다.
클래스 안에서는 private이 디폴트이기 때문에 적지 않아도 된다.
접근제어
- public : 특정 클래스의 객체를 사용하는 프로그램은 그 객체의 public 부분에는 직접 접근할 수 있다.
- private : friend 혹은 public 멤버 함수를 통해서만 접근가능
- protected : 상속 받은 자식들만 접근 가능
멤버 함수
멤버 함수를 정의할 때 그 멤버 함수가 어느 클래스에 속하는지를 나타내기 위해 ::를 사용해야한다.
클래스의 메서드는 private 부분에만 접근할 수 있다.
void Stock::update(double price)
라고 써야하며 Stock클래스 안에 있는 update 함수라고 이해한다.
생성자와 소멸자
데이터들이 private 접근 제어를 가지고 있어 프로그램이 데이터 멤버에 직접 접근할 수 없기 때문에 멤버함수를 이용한다.
생성자의 이름은 클래스의 이름과 같다. 객체를 선언할 때 프로그램이 자동으로 생성자를 호출한다.
m_를 private멤버 이름 앞에 붙이는 것이 관례.
디폴트 생성자를 사용자가 제공해야한다.
소멸자는 컴파일러가 알아서 인스턴스를 없애준다. 사용자가 명시적으로 사용하면 안된다.
this 포인터
클래스의 각 멤버함수가 두개의 객체를 동시에 처리할 때 this를 쓴다.
모든 클래스 메서드들은 그 메서드를 호출하는 객체의 주소로 설정되는 하나의 this 포인터를 갖는다.
자기 자신의 멤버에 접근한다는 것을 명시적으로 할 때 사용한다.
즉 this는 그 객체의 주소이다.