객체 지향 프로그래밍:
클래스와 객체:
표준 라이브러리:
메모리 관리:
연산자 오버로딩:
요약하면, C++은 C의 기능을 계승하면서 객체 지향 프로그래밍과 다양한 새로운 기능을 도입한 언어입니다. C++은 높은 수준의 추상화와 유연성을 제공하여 프로그래머에게 더 많은 도구와 선택지를 제공합니다.
c언어의 문법적 규칙을 그대로 계승하였으며 아래와 같은 기능들이 추가되었다.
인라인 함수
함수 중복
디폴트 매개 변수
참조
참조에 의한 호출
new, delete 연산자
연산자 재정의
제너릭 함수와 클래스
객체 지향 프로그래밍(OOP, Object-Oriented Programming)은 프로그램을 객체들의 집합으로 바라보고 객체들 간의 상호 작용을 중심으로 프로그래밍하는 패러다임입니다. 여기에서 "객체"는 데이터와 그 데이터를 조작하는 메서드(함수)로 이루어진 하나의 독립적인 단위를 나타냅니다.
캡슐화 (Encapsulation):
상속 (Inheritance):
다형성 (Polymorphism):
추상화 (Abstraction):
클래스와 객체:
객체 지향 프로그래밍은 복잡한 소프트웨어를 구조화하고 관리하는 데에 매우 효과적이며, 대규모 소프트웨어 개발에서 널리 사용되고 있습니다. Java, C++, Python, C#과 같은 언어들은 객체 지향 프로그래밍을 지원하고 있습니다.
파이썬과 C++은 모두 객체지향 언어입니다.
파이썬은 인터프리터 언어로 소스 코드를 한줄씩 읽어 명령을 처리하기 때문에 컴파일러 언어보다 실행 속도가 상대적으로 느립니다.
C++은 컴파일러 언어이며 코드를 한 번에 어셈블리 언어로 번역한 후 한 번에 실행하는 방식을 채택하고 있어 일반적으로 높은 성능을 보입니다.
둘 다 다형성을 보여즈는 예로,
오버로딩 : 같은 이름의 함수가 매개변수의 개수/타입이 다르면 다른 함수로 인식되는 것
void add(int a, int b){..}
void add(float a, float b, float c){..}
오버라이딩 : 상속 관계에서 부모의 클래스에 구현된 함수를 자식 클래시에서 동일한 이름으로 다르게 구현하는 것
class animal
{
public:
void cry(){cout<<"엉엉"<<endl;}
}
class dog : public animal
{
public:
void cry(){cout<<"먕먕"<<endl;
}
class cat : public animal
{
public:
void cry(){cout<<"냥냥"<<endl;
}
C++은 객체지향언어로, 다음 네 가지 특징을 가지고 있습니다.
다형성 (Polymorphism): 객체가 여러 가지 타입을 가질 수 있는 특성으로, 동일한 모양의 코드가 다른 행위를 할 수 있도록 합니다.
캡슐화 (Encapsulation): 비슷한 속성과 메소드를 하나의 클래스로 묶어서 외부에서의 접근을 제어하는 것을 의미합니다. 이는 정보 은닉을 통해 클래스 내부를 외부에 공개하지 않아 외부에서 클래스를 마음대로 수정하는 일을 방지합니다.
상속 (Inheritance): 부모 클래스의 메소드와 필드를 자식 클래스에서 그대로 물려받는 것으로, 코드의 재사용성을 높이고 클래스의 재사용과 확장을 용이하게 합니다.
추상화 (Abstraction): 여러 객체에서 공통적이고 중요한 부분을 추출하여 하나의 분류로 만드는 개념으로, 클래스를 통해 관심 있는 특성을 추상화하여 표현합니다.
전처리 → 컴파일러 → 어셈블러 → 링커
컴퓨터는 0과 1로만 이루어져있기 때문에 컴퓨터가 이해할 수 있도록 만들어 주어야 한다. 이런 과정을 빌드라고 한다.
전처리(preprocessing) : 코드의 주석을 제거, define을 치환
컴파일러(compiler) : 어셈블리 파일로 변환, 어셈블리는 CPU 명령어 조합 (어휘 분석, 구문 분석, 의미 분석)
어셈블러(assembler) : 오브젝트 파일로 변환, 오브젝트 코드는 0과 1로 이루어진 코드
링커(linker) : 오브젝트 파일들을 묶어서 실행 코드 파일로 변환, 운영체제가 로딩할 수 있도록 주소 정보를 할당한 파일을 만들어 낸다. 번역된 파일을 하나로 연결해 실행가능한 파일로 만들어준다.