본문 바로가기

C++

객체지향이란?

객체 지향 프로그래밍?

만들고자 기능을 추상화시켜 속성(atrribute)과 행위(action)를 가지는 변수(variable)와 함수(method)로 구성된

객체를 만들고 그 객체를 이용하여 기능을 구현하는 것을 의미한다. 

 

장점

- 객체화를 시키기 때문에 유연하고 변경이 쉬운편이다.

- 수정할 부분이 있다면 해당 부분만을 찾아 변경하면된다. 이때 5원칙 중 '단일 책임 원칙'이 들어간다고 볼 수 있다.

 

단점

- 지나치게 객체화를 시키면 분석하기가 쉽지 않다.  (복잡해진다.)


클래스(class) 추상화 개념
객체(object) 클래스 객체화
메소드(method) 연산 
메시지(message) 메소드(method)를 호출

추상화(Abstraction)

- 실체화의 개념을 추상화 시킬 때 공통의 속성이나 기능을 묶는 것을 추상화라 한다.

- 예를 들어 연필, 지우개, 볼펜, 샤프심 이런 객체들을 하나의 공통적인 개념으로 묶을 때 크게보면 '필기구' 라는

  의미로 묶을 수 있으며 이를 추상화라고 한다.

 

정보은닉(Data hiding)과 캡슐화(Encapsulation) 

- 외부에서 내부 데이터에 직접 접근을 방지하고 사용할 수 있는 함수(Function)부분만 보이도록 하여

  데이터의 직접적으로 접근을 방지하고 사용할 수 있는 인터페이스만 제공함으로써 안전성을 보장할 수 있다.

 

상속(Inheritance)

- 상위 클래스(부모)의 기능을 응용하여 하위 클래스(자식)에서 추가적으로 새로운 기능을 제작할 수 있다.

  상속의 가장 큰 이점은 소스코드의 재사용성에 있다. (매번 같은 코드를 구현할 필요가 없다.)

- 다중 상속의 경우네는 상속 관계를 정확하게 인지하지 못하면 문제가 발생할 수 있으므로 사용을 지양하지만

  사용해야할 상황이 온다면 정확하게 인지하고 사용해야 한다.

 

다형성(Polymorphism)

- 객체의 메소드를 여러가지 개념으로 사용할 수 있다.

  상속 관계에서 가상 함수(Virtual Function)를 이용하여 오버라이딩(Overriding) 기능을 사용할 수 있다.

  * 오버라이딩(Overriding) : 같은 이름의 메소드가 여러 클래스에서 다른기능을 하는 행동

- 객체지향에서만 사용되는 의미는 아니지만! 오버로딩(Overloading) 개념도 다형성에 포함될 수 있다.

- 순수 가상 함수(Pure Virtual Functions)를 이용하여 추상 클래스(Abstract Class)를 구현할 수 있다.