C++의 OOP란, 객체Object 가 중심이 되서 프로그래밍하는 패러다임.
C++ 는 여러가지 패러다임을 제공해 주는 멀티 패러다임 언어이다.
1) procedural
2) functional
3) OOP - ( Object-Oriented Programming )
4) generic
를 모두 지원해 준다. 그 중에서도 OOP가 중심이 되는 언어가 C++이다.
또 다른 OOP 중심 언어는, java, C#, python 이 있다.
C++의 OOP는 class를 중심으로 구현하게 되므로,
먼저 object와 class가 어떻게 다른지 이해해야 한다.
1. class와 object의 차이
class: definition.
-Cat
object: 메모리에 공간을 차지하고 있는 객체 하나하나를 지칭.
-kitty, nabi
즉 OOP, 객체 지향 프로그래밍이란 이런 객체들을 중심으로 프로그램을 하나하나 만들어간다는 의미.
kitty.speak();
nabi.speak();
이런 식으로!
2. C++를 OOP중심의 언어로 만들어 주는 4가지 특성
1) 추상화 Abstraction / generalization / modeling
: class 라는 개념 자체가 추상화.
복잡한 고양이라는 개념을 프로그램을 위해서 2개(speak, mAge)만 추려서 나타낸 것, 즉 이 모델링 자체가 추상화.
2) 캡슐화 Encapsulation
: 캡슐화를 통해서 data를 내부에 적어놓고 외부에서 접근이 불가능하게 만듦.
C++에서는 private 이라는 특성을 통해서 만들어 내고 있다.
ex)
고양이의 나이를 세팅해 주고 싶다면 void setAge(int age), 나이를 가져오고 싶다면 getAge()
자바 스타일로 get, set을 통해서 캡슐화 인터페이스를 만들어 주는 방법.
또 다른 방법은 get set 대신 그냥 age로 표현하고 만들어 주는 방법도 있다. (취향이나 회사의 기준에 따라 다름)
3) 상속성 Inheritance
: 상위 클래스를 상속받는 새로운 클래스에 대한 정의 가능.
ex)
: 고양이 object kitty를 정의해주면, 고양이 kitty는 speak() 할 수도, cute() 할 수도 있다.
4) 다형성 Polymorphism
: C++에는 2가지의 다형성이 있다.
1) Function overloading
: speak() 함수가 2개가 있고 두 함수의 파라미터(매개변수)가 다르다면 같은 이름을 가진 2가지의 함수를 정의할 수 있다.
다형적인 함수를 컴파일 시간에 바인딩 시켜주기 때문에 static polymorphism 이라고도 한다.
2) Function overloading
: 고양이 class가 동물 class에서 상속받았다고 가정하고 override/virtual 키워드를 붙여줌으로서 좀 더 다이내믹하게 다형성을 구현할 수 있다.
<주의사항>
OOP가 목적이 되어서는 안된다!
C++를 써서 읽기 편하고 이해하기 편하고 수정하기 편한, 유지보수하기 쉬운 코드를 짜는 것이 목적이다.
OOP를 정확하게 따르는 프로그램을 짜는 것은 목적이 아니다.
프로그램을 통해서 가치를 창출하는 것이 목적이고 거기에 더해서 퍼포먼스까지 보장해 주어야 하기 때문에 C++를 사용하는 것이다.
OOP는 활용하기 위한 것이다.
'모던C++ > OOP' 카테고리의 다른 글
5. function overloading, operator overloading (0) | 2022.08.07 |
---|---|
4. 복사, 이동 생성자 - Copy/move constructor (1) | 2022.08.06 |
3. Member Init List - Class Constructor, Destructor (0) | 2022.08.05 |
2. Static 스태틱 멤버 (0) | 2022.08.04 |