728x90
C++
객체지향과 C++
- C++은 객체지향 언어는 아니고 멀티 패러다임이다.(객체지향과 절차지향 두가지를 전부 지원하기 때문이다.)
절차적 프로그래밍과 객체지향 프로그래밍의 차이
- 절차적 프로그래밍(Procedural Programming)
- 프로그램 설계 시 기능 구현을 위해 프로시저(함수)를 중점으로 사용하여 구조/로직을 설계하는 방법
- 객체지향(Object-Oriented Programming(OOP))
- 프로그램 설계 시 프로그램을 수 많은 객체로 나누고 이 객체들의 상호작용으로 서술하는 방법
객체지향의 장점
- 코드 재사용 용이
- 높은 확장성
- 유지보수성이 뛰어남
객체지향의 특징
캡슐화(Encapsulation)
- 데이터를 보호하고 객체의 내부 상태를 은닉하며, 외부로부터의 직접적인 접근을 제한하는 것을 말한다.
- 데이터와 그 데이터를 처리하는 메소드를 하나의 단위(클래스)로 묶어서 외부에 노출되지 않도록 하는 것이다.
- 캡슐화의 주요 개념
- 데이터 은닉
- 객체의 내부 상태(필드, 변수)를 외부에서 직접 접근하지 못하도록 하고, 접근자 메소드와 설정자 메소드를 통해서만 접근할 수 있도록 한다.
- 접근 제한자
- 접근 제한자를 사용하여 클래스의 멤버(필드와 메소드)에 대한 접근 수준을 지정한다.
- 데이터 은닉
- 캡슐화의 장점
- 보안 강화 : 데이터가 외부로부터 보호되어 잘못된 접근이나 수정으로부터 안전하다.
- 유지보수성 향상 : 데이터와 메소드가 하나의 단위로 관리되므로 코드 수정 시 영향을 최소화할 수 있다.
- 재사용성 증가 : 캡슐화된 객체는 독립적으로 동작하며, 다른 코드에서도 재사용하기 용이하다.
- 결합도 감소 : 객체 간의 상호 의존성을 줄여 시스템의 복잡성을 낮추고, 모듈화된 설계를 가능하게 한다.
상속(Inheritance)
- 상속은 기존 클래스(부모 클래스 또는 상위 클래스)의 속성과 메소드를 새로운 클래스(자식 클래스 또는 하위 클래스)가 물려받는 것을 말한다.
- 코드의 재사용성을 높이고, 계층 구조를 형성할 수 있다.
다형성(Polymorphism)
- 다형성은 동일한 메소드나 연산자가 다른 객체에서 다르게 동작하도록 하는 능력이다.
- 메소드 오버로딩이나 메소드 오버라이딩으로 구현할 수 있다.
- 오버로딩 : 같은 이름의 메소드를 매개변수나 타입에 따라 다르게 정의
- 오버라이딩 : 상위 클래스의 메소드를 하위 클래스에서 재정의
추상화(Abstraction)
- 추상화는 복잡한 시스템에서 중요한 부분을 간추려 내어 모델링하는 과정이다.
- 구체적은 구현을 숨기고, 필요한 기능만을 노출하여 복잡성을 줄이고, 코드의 이해와 사용을 용이하게 한다.
- 인터페이스와 추상클래스
- 인터페이스와 추상 클래스를 통해 객체의 설계와 구현을 분리한다.
클래스
- 사용자 정의 자료형이다.
- C++에서 객체를 구현하기 위해 사용하는 방법이다.
- 객체의 상태/특성을 정의하는 일종의 설계도(청사진, Blueprint)이며, 객체화 했을 때(인스턴스화) 객체가 된다.
인스턴스(객체)
- 클래스를 기반으로 만들어져 실제로 메모리에 할당된 것
바이트 패딩의 이유
- 메모리 정렬을 최적화하여 메모리 접근 성능을 향상시키기 위해서이다.
- CPU가 메모리에 접근할 때 효율적으로 데이터를 읽고 쓸 수 있도록 하기 위함이다.
728x90
'Study > TIL(Today I Learned)' 카테고리의 다른 글
24.06.13 C++ (0) | 2024.06.13 |
---|---|
24.06.12 C++ (0) | 2024.06.12 |
24.06.10 복습 (1) | 2024.06.10 |
24.06.09 복습 (0) | 2024.06.10 |
24.06.08 복습 (0) | 2024.06.10 |