1115

최민수·2023년 11월 15일
0

객체 지향의 3가지 주요 특징은 캡슐화, 상속, 다형성입니다. 이를 C++ 언어를 통해 설명드리겠습니다.

  1. 캡슐화(Encapsulation): 캡슐화는 데이터와 함수를 하나로 묶는 기법입니다. C++에서는 클래스를 통해 캡슐화를 구현합니다. 클래스 내부의 데이터와 함수는 외부에서 직접 접근할 수 없으며, 이를 통해 데이터 보호와 캡슐화를 실현합니다.
    예를 들어,
class Box {
   public:
      double length;   // Length of a box
      double breadth;  // Breadth of a box
      double height;   // Height of a box
};

위 코드에서 Box 클래스는 length, breadth, height라는 데이터와 이를 조작할 수 있는 함수들을 하나로 묶어 캡슐화합니다.

  1. 상속(Inheritance): 상속은 기존의 클래스에서 일부를 추가하거나 변경하여 새로운 클래스를 생성하는 것입니다. C++에서는 ':' 기호를 통해 상속을 구현합니다.
    예를 들어,
class Rectangle: public Shape {
   public:
      int getArea() {
         return (width * height);
      }
};

위 코드에서 Rectangle 클래스는 Shape 클래스를 상속받아, Shape 클래스의 속성 및 메서드에 접근할 수 있습니다.

  1. 다형성(Polymorphism): 다형성은 하나의 인터페이스나 클래스가 다양한 형태로 동작하는 것을 의미합니다. C++에서는 함수 오버로딩과 가상 함수를 통해 다형성을 구현합니다.
    예를 들어,
class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0, int b=0) {
         width = a;
         height = b;
      }
      virtual int area() {
         cout << "Parent class area :" <<endl;
         return 0;
      }
};
class Rectangle: public Shape {
   public:
      Rectangle( int a=0, int b=0):Shape(a, b) { }
      int area () { 
         cout << "Rectangle class area :" <<endl;
         return (width * height); 
      }
};

위 코드에서 Rectangle 클래스는 Shape 클래스의 area() 함수를 오버라이딩하여 동일한 이름의 함수가 다양한 형태로 동작하도록 하였습니다.

이렇게 객체 지향 언어의 3가지 주요 특징을 C++ 코드 예시를 통해 설명드렸습니다. 추가적인 질문이 있으시면 언제든지 말씀해주세요.


다형성(Polymorphism)은 객체 지향 프로그래밍의 중요한 개념 중 하나로, 동일한 이름의 메소드가 다른 동작을 수행하는 것을 의미합니다. C++에서는 주로 가상 함수를 통해 이를 구현합니다.

다형성을 이해하려면 먼저 가상 함수(virtual function)에 대해 알아야 합니다. 가상 함수는 부모 클래스에서 선언되고, 자식 클래스에서 재정의(override) 될 수 있는 함수입니다.

예를 들어 아래와 같은 코드가 있다고 가정해봅시다.

class Animal {
public:
    virtual void makeSound() {
        std::cout << "The Animal makes sound \n";
    }
};

class Dog : public Animal {
public:
    void makeSound() {
        std::cout << "The Dog barks \n";
    }
};

class Cat : public Animal {
public:
    void makeSound() {
        std::cout << "The Cat meows \n";
    }
};

위 코드에서 Animal이라는 부모 클래스에 makeSound라는 가상 함수가 있고, Dog와 Cat이라는 자식 클래스에서 이를 재정의하고 있습니다. 이제 다형성을 사용하여 동일한 코드로 다양한 동작을 수행해봅시다.

int main() {
    Animal* myAnimal = new Animal;
    Animal* myDog = new Dog;
    Animal* myCat = new Cat;

    myAnimal->makeSound(); // Outputs: The Animal makes sound
    myDog->makeSound();    // Outputs: The Dog barks
    myCat->makeSound();    // Outputs: The Cat meows

    return 0;
}

main 함수에서는 Animal 클래스의 포인터를 사용하여 각각의 객체를 가리킵니다. 이 때, 모두 같은 makeSound 함수를 호출하지만, 가리키고 있는 객체의 타입에 따라 다른 결과를 출력합니다. 이것이 바로 다형성의 기본 개념입니다.

더 궁금한 점이 있으시다면 언제든지 말씀해주세요.




overidding



이름이 같은 함수가 여려가지 있다

#include
int add(int i, int j)
{
return (i + j);
}
double add(double i, double j)
{
return (i + j);
}

int main()
{
std::cout << add(10, 20) << std::endl;
std::cout << add(10.5, 20.3) << std::endl;
return 0;
}
//컴파일러가 가지고있는 매개변수를 자동 호출한다
컴파일러가 실매개변수의입력 자료형에 따라서
자동적으로 해당 함수를 연결해준다.
BUT 매개변수형이 여러개 있으면 overloading을 할 수 없다


기본 매개변수(default parameter)는 함수 호출 시 해당 매개변수를 생략하였을 때 사용될 기본값을 정의하는 기능입니다. 특정 프로그래밍 언어에서는 이를 지원하여 코드의 유연성과 가독성을 높입니다.

다음은 기본 매개변수를 지원하는 몇 가지 프로그래밍 언어입니다:

  1. C++: C++에서는 함수 선언이나 정의에서 매개변수에 기본값을 할당함으로써 기본 매개변수를 설정할 수 있습니다.
void func(int x, int y = 10) { 
  // function body 
}
  1. Python: Python에서는 함수 정의에서 매개변수에 기본값을 할당함으로써 기본 매개변수를 설정할 수 있습니다.
def func(x, y = 10):
  # function body
  1. JavaScript (ES6 이후): JavaScript에서는 함수 정의에서 매개변수에 기본값을 할당함으로써 기본 매개변수를 설정할 수 있습니다.
function func(x, y = 10) {
  // function body
}
  1. PHP: PHP에서도 함수 정의에서 매개변수에 기본값을 할당하여 기본 매개변수를 설정할 수 있습니다.
function func($x, $y = 10) {
  // function body
}
  1. Swift: Swift에서는 함수 정의에서 매개변수에 기본값을 할당하여 기본 매개변수를 설정할 수 있습니다.
func func(x: Int, y: Int = 10) {
  // function body
}

이 외에도 Ruby, Kotlin, Scala 등 대부분의 최신 프로그래밍 언어들은 기본 매개변수를 지원합니다. 기본 매개변수는 각 언어의 문법에 따라 약간씩 다르게 사용될 수 있으며, 해당 언어의 문서나 관련 자료를 참고하는 것이 좋습니다.


별도의 매개변수를 전달하지 않아도 기본적인 값을
전달하도록 함수 원형을 선언할 때 디폴트 값을 지정할 수 있다.

#include
int add(int i=1, int j=2) // 형식매개변수
{
return(i + j);
}
int main()
{
std::cout << add() << ","; // 실매개변수 없음, 3
std::cout << add(10) << ","; // 실매개변수 한 개, 12
std::cout << add(10, 20); // 실매개변수 두개, 30
return 0;
}
int add(int i, int j) {
return (i + j);
}


#include
class Dog {
private:
int age;
public:
Dog(int a = 1) { age = a; }
// 디폴트 매개변수를 갖는 생성자
~Dog();
int getAge();
void setAge(int a);
};
Dog::~Dog()
{
std::cout << "소멸\n";
}
int Dog::getAge()
{
return age;
}
void Dog::setAge(int a)
{
age = a;
}
int main()
{
Dog meri, happy(5);
std::cout << happy.getAge() << "," <<
meri.getAge() << std::endl;
return 0;
}

profile
컴퓨터소프트웨어학과

1개의 댓글

comment-user-thumbnail
2023년 11월 15일

즐겁게 읽었습니다. 유용한 정보 감사합니다.

답글 달기

관련 채용 정보