반응형
객체(Object)

C++에서 객체는 클래스의 인스턴스입니다. 클래스는 객체를 생성하기 위한 템플릿이며,

객체는 클래스의 실제 구현체입니다. 클래스는 객체의 동작과 상태를 정의하는데 사용된다.

 

객체는 데이터와 해당 데이터를 조작하는 멤버함수(메서드)를 포함한다.

데이터는 객체의 상태를 나타내는 멤버 변수로서, 객체의 정보를 저장한다.

멤버 함수는 객체의 동작을 정의하고 해당 데이터를 조작하는 로직을 포함한다.

 

 

 

객체의 특징

1. 캡슐화(Encapsulation) :

객체는 데이터와 해당 데이터를 조작하는 동작(메서드)을 하나의 단위로 묶어 캡슐화하여

기능들을 쉽게 사용할 수 있게 해준다.캡슐화를 통해 객체 내부의 데이터와 동작을 외부에서의

직접적인 접근을 제한시킬 수 있으며, 외부에서는 객체의 메서드를 통해 데이터에 접근하고

조작할 수 있지만, 내부의 구체적인 구현은 감추어진다. 이는 정보 은닉(Information Hiding)이라고도 한다.

객체의 내부 상태를 캡슐화함으로써 데이터의 무결성을 보장하게 된다.

 

 

2. 상속성(Inheritance) : 

객체는 상속을 통해 다른 객체로부터 속성과 동작을 상속받을 수 있다.

상속은 기존의 클래스를 기반으로 새로운 클래스를 생성하고, 기존 클래스의 특성을

그대로 이어받아 새로운 클래스를 확장하는 기능이다. 상속을 통해 코드의 재사용성을 높이고

클래스 간의 계층 구조를 형성하여 객체를 보다 쉽게 구조화할 수 있다.

 

3. 다형성(Polymorphism) : 

다형성은 객체가 여러 가지 형태를 가질 수 있는 능력을 말한다.

동일한 메서드 이름을 사용하지만, 서로 다른 객체에 대해 다른 동작을

수행할 수 있다. 이는 오버로딩(Overloading)과 오버라이딩(Overriding)을

통해 구현된다. 다형성을 통해 여러 객체를 하나의 일반화된

타입으로 다룰 수 있으며,  이는 코드의 유연성과 확장성을 높이는데 도움을 준다.

 

4. 추상화(Abstraction) : 

객체는 복잡한 시스템을 단순화하여 필요한 부분만 추상화하여 표현할 수 있다.

필수적인 특성과 동작에만 초점을 맞추고 불필요한 세부사항을 숨기는 것이다.

이를 통해 객체는 필요한 정보와 동작에만 집중할 수 있도록 도와준다.

 

5. 메시지 패싱(Message Passing) : 

객체는 다른 객체와 메시지(정보)를 주고받을 수 있다.

객체는 메시지를 전달받으면 해당하는 동작을 수행하거나 다른 객체에게 메시지를

전달할 수 있습니다. 이를 통해 객체 간의 상호작용과 정보 교환을 가능하게 한다.

이러한 상호작용은 객체 간의 결합도를 낮추고 모듈화를 촉짐함으로

코드의 유연성과 재사용성을 높인다.

 

 

 

객체 지향 프로그래밍

C++에서 객체는 다른 객체로부터 상속을 받을 수 있으며, 다형성과 같은 객체지향

프로그래밍의 개념을 지원해준다. 객체 지향 프로그래밍은 프로그램들을 객체들의

집합으로 모델링하여 문제를 해결하는 방법이다. 객체지향 프로그래밍을 사용하면

코드의 재사용성, 유지보수성, 확장성(추가, 삭제) 등을 향상시킬 수 있다.

 

반응형

 

반응형

'C++' 카테고리의 다른 글

네임스페이스(namespace)  (0) 2023.05.30
입출력  (0) 2023.05.30
제네릭 프로그래밍  (0) 2023.05.30
함수 오버로딩(Function Overloading) & 함수 오버라이딩(Function Overriding)  (0) 2023.05.30
구조체  (0) 2023.05.30
반응형
제네릭 프로그래밍이란?

제네릭 프로그래밍(Generic Programming)은 프로그래밍 언어의 기능을 활용하여

일반화된 알고리즘과 자료 구조를 작성하는 방법론입니다.

 

제네릭 프로그래밍은 특정한 데이터 타입에 종속되지 않고, 다양한 데이터 타입에 대해

재사용 가능한 코드를 작성하는 것을 목표로 합니다.

 

제네릭 프로그래밍은 데이터 타입에 대해서 독립적인 알고리즘과 자료 구조를 작성하기

위해 템플릿(Templete)이라는 개념을 활용한다. 템플릿은 일반적인 형태의 알고리즘

또는 자료 구조를 정의하고, 템플릿 매개변수를 통해 데이터 타입에 의존적인 부분을

일반화합니다. 이를 통해 특정 데이터 타입에 종속되지 않고 다양한 타입에 대해

동작하는 코드를 작성할 수 있는 장점이 있습니다.

 

 

 

제네릭 프로그래밍 장점

1. 코드 재사용성 : 

제네릭 코드는 다양한 데이터 타입에 대해 재사용될 수 있으며,

프로그래머는 비슷한 기능을 수행하는 여러 버전의 코드를

작성하지 않고 코드를 재사용 가능하다.

 

2. 타입 안전성 : 

제네릭 코드는 컴파일러가 데이터 타입 일치 여부를 검사하기에

타입 관련 오류를 미리 방지할 수 있다. 따라서 런타임에 발생할 수 있는

데이터 타입 관련 오류를 사전에 방지할 수 있다.

 

3. 일반성과 확장성 : 

제네릭 코드는 일반적인 형태로 작성되기에 다양한 상황에 적용 가능하다.

또한, 새로운 타입이 추가되더라도 기존의 제네릭 코드를 수정하지 않고도

확장이 가능하다.

 

 

C++의 템플릿은 제네릭 프로그래밍을 구현하는 데에 사용되는 강력한 도구이다.

C++ 에서  템플릿을 활용하여 제네릭 알고리즘과 자료 구조를 작성할 수 있으며,

이를 통해 데이터 타입에 독립적이고 재사용 가능한 코드를 개발할 수 있다.

 

반응형

 

반응형

'C++' 카테고리의 다른 글

입출력  (0) 2023.05.30
객체에 대한 이해  (0) 2023.05.30
함수 오버로딩(Function Overloading) & 함수 오버라이딩(Function Overriding)  (0) 2023.05.30
구조체  (0) 2023.05.30
인라인 함수  (0) 2023.05.30
반응형
함수 오버로딩(Function Overloading)

함수 오버로딩은 같은 이름의 함수를 여러 개 정의하는 것을 말한다.

오버로딩은 매개변수의 타입, 개수 또는 순서를 다르게 하여 동일한

이름으로 함수를 정의하는 것을 가능하게 한다.

 

함수 오버로딩은 다형성(Polymorphism)의 한 형태로 볼 수 있다.

이는 개발자가 같은 동작을 수행하는 함수들을 논리적으로 그룹화하고

통일된 이름을 부여할 수 있도록 해준다.

 

매개변수의 선언이 다르면 동일한 이름의 함수도 정의 가능하다.

 

반환형의 차이는 함수 오버로딩의 조건을 만족시키지 않는다.

매개변수의 형이 다른것은 만족된다.

 

함수 오버로딩은 매개변수의 타입, 개수, 순서 등이 달라야 구분이 가능하다.

반환 타입만 다른 경우에는 함수 오버로딩이 적용되지 않는다.

 

아래의 코드는 함수 오버로딩의 예시이다.

#include <iostream>

class Animal 
{
public:
    void makeSound() 
    {
        std::cout << "Animal makes a sound." << std::endl;
    }

    void makeSound(std::string sound) 
    {
        std::cout << "Animal makes a " << sound << " sound." << std::endl;
    }
};

int main() 
{
    Animal animal;
    animal.makeSound();               // "Animal makes a sound."
    animal.makeSound("roar");         // "Animal makes a roar sound."

    return 0;
}

 

 

 

매개변수의 디폴트 값

함수의 매개변수에서 값을 초기화해놓아서 함수를 실행할때 함수에

매개변수 값을 할당해 주지 않으면 자동으로 초기화해놓은 값이 할당된다.

 

함수를 선언부와 구현부를 나눌때는 선언부에 디폴트값을 넣어줘야한다.

 

매개변수 디폴트 값을 부분적으로 초기화할때 맨 우측의

매개변수에서부터  순차적으로 할당해줘야한다.

 

 

 

함수 오버라이딩(Function Overriding)

함수 오버라이딩은 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서

재정의 하는 것을 말한다. 이는 자식 클래스가 부모 클래스의 동작을 변경하거나

확장할 수 있도록 해준다.

 

함수 오버라이딩은 다형성의 한 예로 볼 수 있다.

부모 클래스의 메서드를 호출하는 코드가 있을 때, 실제로 실행되는 메서드는

객체의 타입에 따라 결정된다. 따라서, 자식 클래스에서 오버라이딩한 메서드가

호출 될 수 있다.

 

함수 오버라이딩을 위해서는 부모 클래스와 자식 클래스 간에 상속 관계가 성립해야 한다.

자식 클래스에서 오버라이딩하려는 메서드는 부모 클래스에서 정의되어 있어야 한다.

오버라이딩 메서드는 부모 클래스의 메서드의 이름, 매개변수, 타입, 반환 타입과 동일해야 한다.

 

아래의 코드는 오버라이딩의 예시이다.

#include <iostream>

class Animal 
{
public:
    void makeSound() 
    {
        std::cout << "Animal makes a sound." << std::endl;
    }

    void move() 
    {
        std::cout << "Animal moves." << std::endl;
    }
};

class Dog : public Animal 
{
public:
    void makeSound() 
    {
        std::cout << "Dog barks." << std::endl;
    }

    void move() 
    {
        std::cout << "Dog runs." << std::endl;
    }
};

class Cat : public Animal 
{
public:
    void makeSound() 
    {
        std::cout << "Cat meows." << std::endl;
    }

    void move() 
    {
        std::cout << "Cat jumps." << std::endl;
    }
};

int main() 
{
    Animal animal;
    Dog dog;
    Cat cat;

    animal.makeSound();  // "Animal makes a sound."
    animal.move();       // "Animal moves."

    dog.makeSound();     // "Dog barks."
    dog.move();          // "Dog runs."

    cat.makeSound();     // "Cat meows."
    cat.move();          // "Cat jumps."

    Animal* animalPtr = &dog;
    animalPtr->makeSound();  // "Dog barks."
    animalPtr->move();       // "Animal moves."

    return 0;
}

 

반응형

 

반응형

'C++' 카테고리의 다른 글

객체에 대한 이해  (0) 2023.05.30
제네릭 프로그래밍  (0) 2023.05.30
구조체  (0) 2023.05.30
인라인 함수  (0) 2023.05.30
강한 타입 검사  (0) 2023.05.30
반응형
C++에서의 구조체

C++에서 구조체(struct)는 관련된 여러 데이터를 그룹화하여 사용하는 사용자 정의 데이터 형식이다.

구조체를 사용하여 여러 형태의 변수를 하나의 단위로 그룹화하고, 관련이 있는 해당 멤버 변수들끼리의

연산을 수행할 수 있습니다.

 

구조체는 C++의 클래스와 유사하지만, 일반적으로 멤버 변수만을 가지고 있으며, 멤버 함수(메서드)또한

가질수 있지만, 멤버 함수까지 사용하는 경우에는 구조체(struct)대신 클래스(class)를 사용하는 경향이 있습니다.

구조체는 주로 데이터를 구성하는데 사용되며, 문자열, 정수, 부동수소점 구조체등의 다양한 데이터 형식을

가질 수 있습니다.

 

 

 

C++ 구조체 정의

구조체는 아래의 코드처럼 사용하며, 멤버 함수 안에서 멤버변수를 사용할 수 있다.

구조체는 헤더파일에 분할하는것이 좋다.

struct Rectangle {
    // 멤버 변수
    int width;		// 데이터형식 멤버변수1
    int height;		// 데이터형식 멤버변수2

    int calculateArea() {	// 반환형 멤버함수(매개변수)
        return width * height;
    }
};

 

반응형

 

반응형

'C++' 카테고리의 다른 글

제네릭 프로그래밍  (0) 2023.05.30
함수 오버로딩(Function Overloading) & 함수 오버라이딩(Function Overriding)  (0) 2023.05.30
인라인 함수  (0) 2023.05.30
강한 타입 검사  (0) 2023.05.30
C++ 표준 라이브러리  (1) 2023.05.30
반응형
inline함수

C++에서 인라인 함수(inline function)는 컴파일러에 의해 함수 호출이

발생하는 대신 함수의 내용이 컴파일 전에 호출하는 코드 자체로 대체되는 함수입니다.

이는 함수 호출의 오버헤드를 줄이고 실행 속도를 향상시키는데 도움이 됩니다.

 

함수 호출의 오버헤드는 함수를 호출할 때 추가적으로 발생하는 비용을 의미한다.

 

인라인 함수는 일반 함수와는 다르게 정의 앞에 inline 키워드를 사용하여 선언된다.

inline int add(int a, int b) 
{
    return a + b;
}

 

 

 

인라인 함수 특징

1. 함수 호출 대신 코드 내용의 복사 : 

인라인 함수는 함수 호출 대신 컴파일 전에 호출하는 코드 자체로 대체됩니다.

이는 함수 호출에 따른 오버헤드를 제거하여 실행 속도를 향상시킵니다.

함수 호출 과정에서 발생하는 스택 프레임 설정 및 복귀 주소 저장과 같은 작업을

생략하고, 함수 내용을 직접 실행하는 것을 의미한다.

함수의 크기가 작은 경우에 효과적입니다.

 

2. 컴파일러의 추천 : 

inline 키워드는 프로그래머가 컴파일러에게 함수를 인라인화할 것을 권장하는 힌트이다.

컴파일러는 이 힌트를 고려하여 최적의 판단을 내린다. 실제로 모든 inline 함수가

인라인화 되지는 않을 수 있다.

 

 

 

인라인 함수 정리

인라인 함수는 메크로함수 처럼 사용 가능하며 복잡한 루틴은 안된다.

함수가 인라인화 되어 성능의 향상을 꾀할수 있지만 함수의 정의 방식이

일반함수에 비해서 복잡하다. 따라서 복잡한 함수의 정의에는 한계가 있다.

 

인라인 함수는 함수의 내용이 헤더 파일에 직접 포함되어 다른 소스 파일에서

사용할 수 있어야 한다. 이는 헤더 파일과 소스 파일 간의 관리와 빌드 과정에서

주의가 필요한 요소가 있다. 그렇기에 인라인 함수의 정의방식은 일반함수에 비해서 복잡하다.

 

매크로함수만의 장점은 인라인 함수와 달리 자료형에서 독립적이다.

물론, inline함수 또한 템플릿을 사용하면 자료형에서 독립적일 수 있다.

 

 

반응형
반응형

'C++' 카테고리의 다른 글

함수 오버로딩(Function Overloading) & 함수 오버라이딩(Function Overriding)  (0) 2023.05.30
구조체  (0) 2023.05.30
강한 타입 검사  (0) 2023.05.30
C++ 표준 라이브러리  (1) 2023.05.30
동적 할당  (0) 2023.05.30

+ Recent posts