OOP(Object-Oriented Programming) 객체 지향 프로그래밍
객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 객체가 프로그래밍의 중심이 된다.
Object(객체)란?
https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)
컴퓨터과학에서 객체는 클래스에서 정의한 것을 토대로 메모리에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며, 변수, 자료 구조, 함수가 될 수 있다. 프로그래밍 언어는 변수를 이용해 객체에 접근하므로 객체와 변수라는 용어는 종종 함께 사용된다. 그러나 메모리가 할당되기 전까지 객체는 존재하지 않는다.
객체란 간단히 이야기하자면 실생활에서 우리가 인식할 수 있는 사물로 이해할 수 있다.
이와 같은 객체를 만들어 내가 위한 틀과 같은 개념이 바로 클래스이다.
"세상의 모든 것은 객체이다. TV, 의자, 집, 카메라, 사람 등..."
"클래스는 붕어빵 틀과 같다."
처음 C++을 공부하면서 가장 많이 들었던 말이다. 아직까지 완벽히 이해가 되지는 않지만 느낌은 알 것 같다.
Class(클래스)의 개념
Class(클래스)란?
클래스는 c의 연장선으로 생각한다면 구조체의 업그레이드 버전이라고 생각할 수 있다.
C에서와는 달리 C++에서 구조체는 멤버로 함수를 포함할 수 있다.
C++에서 구조체와 클래스의 차이는 기본 접근 제어의 차이일 뿐, 나머지는 거의 비슷하다.
C++에서의 구조체와 클래스
C++에서 접근제어 지시자는 아래와 같다.
- public : 어디서든 접근 허용
- private : 클래스 내에서만 접근 허용
- protected : 상속관계에 놓여있을 때, 유도 클래스에서의 접근허용
구조체(struct)의 경우 접근제어 지시자를 따로 선언하지 않는다면 모든 변수와 함수는 public으로 선언된다.
클래스(class)의 경우 접근제어 지시자를 따로 선언하지 않는다면 모든 변수와 함수는 private로 선언된다.
OOP의 특징
객체 지향 프로그래밍이 가지는 특징은 다음과 같다.
- 추상화(abstraction)
- 캡슐화(encapsulation)
- 정보 은닉(data hiding)
- 상속성(inheritance)
- 다형성(polymorphism)
인스턴스(instance)
클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체를 선언해야한다.
이렇게 선언된 해당 클래스 타입의 객체를 인스턴스(instance)라고 하며, 메모리에 대입된 객체를 의미한다.
클래스의 선언
클래스란 추상화(abstraction)를 사용자 정의 타입으로 구현한 것이라고 할 수 있다.
C++에서 클래스는 다음과 같이 정의하고 사용한다.
class [Class_Name]:
{
접근제어 지시자:
멤버변수 타입 멤버변수 이름
...
멤버함수의 원형
...
접근제어 지시자:
멤버변수 타입 멤버변수 이름
...
멤버함수의 원형
...
};
[Class_Name] 객체참조변수이름; // 클래스 선언
객체참조변수이름.멤버함수(); // 클래스 멤버함수 호출