본문 바로가기

컴퓨터 언어

[C++] OOP - 캡슐화, 상속

OOP(Object-Oriented Programming) - 객체 지향 프로그래밍이란 프로그램 설계방법론이자 개념의 일종이다.

프로그램의 기본 단위 구성을 서로 상호작용 하는 객체로 하는 방식인데 이에 대비되는 개념으로 프로그램의 순차적인 처리를 위주로 설계하는 방법론인 절차 지향 프로그래밍이라는 개념이 있다.

 

이러한 객체 지향의 등장 배경으로는 물리적인 하드웨어의 발전이 시간이 흐름에 따라 빠르게 진행되었으며 그에 비례하여 소프트웨어의 중요성이 빠르게 올라왔다는 점이다. 이에 따라 기존에 사용하던 절차지향의 방식으로는 복잡한 구조에 대한 설계가 힘들어 객체지향의 방식이 대안으로 등장하였다.

 

이러한 객체 지향이 절차 지향에 비교하여 가질 수 있는 장점과 단점을 살펴 보자면,

 

[장점]

1) 객체 단위로 관리하고 코드를 구성하기 때문에 유지보수가 쉬워지고 디버깅에 유리하다.

 

2) 기존 클래스를 재사용하여 새로운 클래스를 작성하는 상속을 통해 코드의 중복을 줄이고 재사용성을 높일 수 있다. 또한 기존 클래스의 특성을 물려 받으면서도 새로운 기능을 추가하거나 기존 기능을 변경할 수 있다는 점에서 유연성과 확장성 또한 제공한다.

 

3) 잘 설계된 클래스와 인터페이스로 제작된 객체의 사용은 생산성을 향상시킬 수 있다.

 

[단점]

1) 올바른 객체 지향 설계를 위해서는 적절한 클래스 구조와 상호작용이 필요한데, 이를 위해서는 철저한 계획과 설계가 필요하며 잘못된 설계는 유지보수의 어려움을 야기할 수 있다. 따라서 설계에 시간이 많이 소요되고 신중해야한다는 단점이 있다.

 

2) 객체 간의 통신 및 메시지 전달 등으로 인해 오버헤드 ( 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 )가 발생할 수 있기 때문에 절차 지향프로그래밍보다 메모리 사용량이 더 많고 실행 속도 또한 상대적으로 느릴 수 있다.

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

객체 지향의 4가지 특징

 

객체 지향 프로그래밍은 4가지 기둥이라고 불리는 특징을 가지는데 각각 캡슐화, 상속, 다형성, 추상화 라고 부른다.

 

오늘은 캡슐화와 상속에 대해서 정리해보고자 한다.

 

1) 캡슐화

캡슐화란 객체의 상태를 보호하기 위해 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶는 것을 뜻한다.

여기서 객체의 상태와 기능을 멤버라고 표현하며 이를 통해 객체의 내부 구현 사항을 외부에서 접근할 수 없도록 보호하고, 안정성을 높이는데 중요한 역할을 한다.

현실 세계에 비유하자면 객체가 가지는 정보와 행동을 묶어 구현하는 것으로 이를 통해 객체간의 상호작용을 표현할 수 있다고 보면 된다.

 

캡슐화의 특징을 보자면,

1) 객체 구성에 있어서 객체의 데이터를 외부로부터 숨기고 구분하여, 객체 내부의 메서드를 통해서만 데이터로의 접근을 허용하는 정보 은닉이 있다.

2) 이러한 외부의 무분별한 접근을 막음으로써 객체의 상태를 보호, 데이터의 무결성을 유지하여 안정성 보장이 이루어진다.

3) 객체의 복잡한 내부 동작을 숨기고, 필요한 부분 즉 외부에서 사용하기 위한 인터페이스만을 노출하고 제공한다.

이를 통해 객체를 단순화하게 되고 캡슐화된 클래스는 내부적으로 어떻게 구현되었는지 몰라도 사용할 수 있다.

 

 

2) 상속

상속이란 기존 클래스인 부모 클래스의 모든 속성과 함수를 새로운 클래스인 자식 클래스가 물려받는 것을 의미한다. 이는 자식 클래스가 부모 클래스의 모든 특성을 가지며 추가적인 속성이나 함수를 정의할 수 있도록 하는 것을 뜻한다.
 ( is-a 관계 : 부모클래스가 자식클래스를 포함하는 상위개념일 경우 상속관계가 적합함)

 

상속의 특징으로는,

1) 상속을 통해 부모 클래스의 내용을 물려받음으로써 기존 클래스의 코드를 재사용할 수 있으므로 중복 코드를 피하고 코드의 양을 줄일 수 있다.

2) 자식 클래스를 부모 클래스의 특성을 기반으로 다양한 기능을 추가하여 확장할 수 있는 확장성을 가지게 된다.

3) 상속을 반복적으로 적용함으로써 계층적인 클래스 구조를 형성할 수 있다. 이를 통해 객체 간의 관계를 명확히 정의할 수 있게 된다. 이러한 계층적인 클래스 구조는 현실 세계의 개념을 모델링하는데 도움을 주게 되고 더 상위 수준의 개념과 하위 수준의 개념을 정의하여 문제를 더 잘 이해하고 모델링할 수 있다.

'컴퓨터 언어' 카테고리의 다른 글

[C#] 델리게이트와 이벤트  (0) 2023.11.10
[C#] 인터페이스  (0) 2023.11.07
[C#] 구조체와 클래스  (0) 2023.11.06
[C++] 다형성, 추상성  (0) 2023.11.04
[C++] 반복문과 연습  (0) 2023.10.31