Study/TIL(Today I Learned)

24.06.11 C++

에린_1 2024. 6. 12. 00:10
728x90

C++

객체지향과 C++

  • C++은 객체지향 언어는 아니고 멀티 패러다임이다.(객체지향과 절차지향 두가지를 전부 지원하기 때문이다.)

절차적 프로그래밍과 객체지향 프로그래밍의 차이

  • 절차적 프로그래밍(Procedural Programming)
    • 프로그램 설계 시 기능 구현을 위해 프로시저(함수)를 중점으로 사용하여 구조/로직을 설계하는 방법
  • 객체지향(Object-Oriented Programming(OOP))
    • 프로그램 설계 시 프로그램을 수 많은 객체로 나누고 이 객체들의 상호작용으로 서술하는 방법

객체지향의 장점

  • 코드 재사용 용이
  • 높은 확장성
  • 유지보수성이 뛰어남

객체지향의 특징

캡슐화(Encapsulation)

  • 데이터를 보호하고 객체의 내부 상태를 은닉하며, 외부로부터의 직접적인 접근을 제한하는 것을 말한다.
  • 데이터와 그 데이터를 처리하는 메소드를 하나의 단위(클래스)로 묶어서 외부에 노출되지 않도록 하는 것이다.
  • 캡슐화의 주요 개념
    • 데이터 은닉
      • 객체의 내부 상태(필드, 변수)를 외부에서 직접 접근하지 못하도록 하고, 접근자 메소드와 설정자 메소드를 통해서만 접근할 수 있도록 한다.
    • 접근 제한자
      • 접근 제한자를 사용하여 클래스의 멤버(필드와 메소드)에 대한 접근 수준을 지정한다.
  • 캡슐화의 장점
    1. 보안 강화 : 데이터가 외부로부터 보호되어 잘못된 접근이나 수정으로부터 안전하다.
    2. 유지보수성 향상 : 데이터와 메소드가 하나의 단위로 관리되므로 코드 수정 시 영향을 최소화할 수 있다.
    3. 재사용성 증가 : 캡슐화된 객체는 독립적으로 동작하며, 다른 코드에서도 재사용하기 용이하다.
    4. 결합도 감소 : 객체 간의 상호 의존성을 줄여 시스템의 복잡성을 낮추고, 모듈화된 설계를 가능하게 한다.

상속(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