article thumbnail image
Published 2024. 3. 8. 22:27

1. 설명에 들어가기 전 후기

42Seoul 프로젝트에 관한 포스팅을 하는것은 굉장히 오랜만인것 같다

사실 00번부터 09까지 있는 cpp module를 다 통과하면 그때 한번에 cpp module에 관한 글을 쓰려 했는데 이제서야 기나긴 CPP Module이 끝이 보이기 시작한다

 04까지 끝내고 다른 과제들도 하다 오느라 이전의 나의 결심은 사실 변명 거리에 불과하다는 것은 알고있지만..... CPP Module이 끝나가는 기념으로 CPP Module 포스팅을 하려고 한다

사실 42Seoul의 CPP Module을 하기 전에 C++를 어느정도 다뤄봤어서 자신만만했지만, 역시 나는 우매함의 봉우리 위에 있었다

CPP Module을 통해 C++의 개념들을 훑고, 구현하고 응용할 수 있었던 좋은 과제이다 (98 버전이라는 것만 빼면...)

 


참고로 CPP Module의 코드 설명은 생략하고 각 module에서 익혀야 하는 개념에 대해서만 다룰 예정이다!

 

2. 개념

2.1. OOP(Object-Oriented Programming, 객체 지향 프로그래밍)

실제 세계를 모델링 하여 소프트웨어를 개발하는 방법

물이 위에서 아래로 흐르는 것 처럼 순차적으로 처리하는 절차 지향과 달리, 객체 지향은 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하며 객체간의 상호작용을 통해 개발

 

2.1.1. OOP의 특징

1. 캡슐화(Encapsulation)

한 객체가 특정한 하나의 목적을 위해 필요한 데이터나 메소드를 하나로 묶고, 외부에 감춰서 은닉하는 것

데이터는 외부에서 직접 접근 할 수 없고, 함수를 통해서만 접근해야 함

캡슐화는 객체의 응집도와 독립성을 높임

 

2. 상속 (Inheritance)

상위 클래스에서 기존 메소드와 변수를 가져와, 필요한 기능을 더 추가하거나 재정의하여 코드의 중복을 줄이고 재사용성을 늘릴 수 있는 방법

 

3. 추상화 (Abstraction)

공통의 속성이나 기능을 묶어 이름을 붙이는 것

 

4. 다형성 (Polymorphism)

상속을 통해 기능을 확장, 변경하여 여러 형태의 객체로 재구성되는 것

Overriding, Overloading을 통해 다형성 확보 가능

 

*Overriding: 상위 클래스에 동일한 이름을 가진 함수를 하위 클래스에서 재정의 하는 것

*Overloading: 하나의 클래스 안에 이름은 같지만 함수의 인자가 다른 함수들이 여러개 있는 것

 

 

2.2. namespace

C에서는 식별자의 이름은 같을 수 없지만 C++에서는 식별자의 이름이 같을 수 있음

같은 이름을 가진 식별자가 있을 경우 어떤 namespace에 있는 식별자인지 알려주어 구별 

 

2.3. Class

객체 지향 프로그래밍에서 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 틀

C에서의 구조체와 비슷하지만, 다른점은 접근 제어 지시자가 포함된 것

 

2.3.1. 접근 제어 지시자

  • public: 어디서든 접근 가능
  • private: 클래스 내부에서만 접근 가능
  • protected: 클래스 내부와 상속 받은 클래스 내부에서만 접근 가능

 

 

2.4. 인스턴스

메모리 공간에 구현된 실체

객체는 선언하는 것이고, 인스턴스는 실체화하는 것

 

2.5. 생성자와 소멸자

생성자는 객체의 생성과 동시에 멤버 변수를 초기화 해주는 함수

소멸자는 객체 소멸시 호출되는 함수

 

객체를 생성하고 소멸할 때 마다 생성자와 소멸자가 컴파일러에 의해 자동으로 호출됨

 

생성자와 소멸자의 이름은 해당 클래스의 이름과 같아야 함 (단, 소멸자는 앞에 ~가 붙음)

'42 Seoul' 카테고리의 다른 글

[42 Seoul] CPP Module 02  (0) 2024.03.11
[42Seoul] CPP Module 01  (0) 2024.03.09
[42Seoul] Philosophers  (0) 2023.05.04
[42 Seoul] minishell  (0) 2023.03.17
[42 Seoul] push swap  (0) 2023.02.24
복사했습니다!