C++, Java, Python 언어의 특징(1)

김우진·2021년 1월 4일
1

목차

  1. C++ 언어의 특징
  2. Java 언어의 특징
  3. Python 언어의 특징

1. C++ 언어의 특징

1) C 언어로 작성된 프로그램과의 호환성을 유지

  • C 언어의 문법적 체계를 계승

2) 객체지향적 개념 도입

  • 캡슐화, 상속, 다형성 등의 객체 지향적 개념을 도입

3) 실행 시간의 효율성 저하를 최소화

  • 인라인 함수 도입 등 함수 호출로 인한 시간 저하 방지

1-1. 추가된 기능

1) inline function

  • 클래스 선언을 통한 멤버함수(getter, setter, print) 등 함수들이 많이 만들어짐
  • 함수 호출 : 함수 호출 -> 호출한 주소 스택에 저장 -> 함수의 매개변수 스택에 저장 -> 함수 실행
  • 함수 종료 : 함수 종료 -> 리턴 값 저장 -> 호출한 주소로 복귀
  • overhead 현상 발생
  • 선언 방법
    ➔ inline <함수형> <함수명> <매개변수>
  • 컴파일 과정에서 inline 함수 부분이 치환되어 해당 함수로 들어가게
  • 함수 호출과 종료의 과정을 거치지 않아 속도가 향상됨

2) overloading

  • 같은 이름의 함수를 여러개 정의
  • 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출
  • 매개변수는 같지만 리턴 타입이 다르면 오류가 발생

3) overriding

  • 상위 클래스가 가지고 있는 메소드가 하위 클래스로 상속되었을 때, 하위 클래스에서 메소드를 재정의해서 사용

4) default parameter

  • 매개변수에 값이 전달되지 않는 경우, default 값이 전달되도록 함수를 선언할 수 있음

5) reference variable

int a = 5;
int& b = a;
  • 변수에 alias를 설정해 같은 공간을 사용할 수 있도록 함

6) call by reference

void swap(int &a, int &b)
{
	int temp = a;
   	a = b;
   	b = temp;
}
  • 위와 같이 참조 변수를 매개변수로 하여 call by reference를 할 수 있음

7) new와 delete 연산자

  • 정적 메모리 할당 : 정적 변수와 전역 변수에 대해 발생
  • 자동 메모리 할당 : 함수 매개 변수와 지역 변수에 대해 발생
  • 동적 메모리 할당*
	int *a = new int;
	int *b = new int(5);
    	*a = 5;
	if(!a)
		delete a;
    	if(!b)
		delete b;

8) operator overloading

  • 기존의 연산자에 새로운 연산을 정의할 수 있게 된다.
  • 클래스를 활용한 새로운 연산을 만들 수 있음

9) generics

  • template을 활용하여 함수나 클래스를 데이터 타입에 의존하지 않고 일반화 시킬 수 있음
template<typename T1>
void PrintTemplate(T1 a)
{
	cout << a << endl;
}

10) virtual function

정적 바인딩

class Vehicle
{
	public:
		void ride() { cout << "탈 것을 탄다." << endl; }
};
class Car : public Vehicle
{
	public:
    		void ride() { cout << "차를 탄다." << endl; }
};
int main(void)
{
	Vehicle *v;
    Vehicle ve;
    Car c;
    v = &ve;
    v->show();
    v = &c;
    v->show();
}
  • 둘 다 "탈 것을 탄다." 출력

동적 바인딩

class Vehicle
{
	public:
		virtual void ride() { cout << "탈 것을 탄다." << endl; }
};
class Car : public Vehicle
{
	public:
    		virtual void ride() { cout << "차를 탄다." << endl; }
}
int main(void)
{
	Vehicle *v;
	Vehicle ve;
	Car c;
	v = &ve;
	v->show();
	v = &c;
	v->show();
}
  • "탈 것을 탄다.", "차를 탄다."가 순차적으로 출력
  • 순수 가상함수 ➔ 반드시 재정의 되어야 함
virtual void ride() = 0 {}
  • 하나 이상의 순수 가상함수를 포함하는 클래스를 추상 클래스라 함

1-2. OOP 특징

1) encapsulation

  • 데이터를 외부의 접근으로부터 보호
  • class를 사용(멤버 변수들과 멤버 함수들로 구성)
  • 주로 getter, setter를 사용하여 멤버 변수에 간접적으로 접근

2) inheritacne

  • 부모 클래스로부터 멤버 변수, 멤버 함수들을 상속받음
  • 구현된 코드의 재사용성을 높여서 소프트웨어의 생산성을 높임
  • 선언 방법
    ➔ class <클래스명> : <접근제한자> <클래스명>

3) polymorphism

  • 하나의 기능을 서로 다르게 작동시켜야되는 경우 사용
  • 같은 동물일지라도 개의 울음소리와 소의 울음소리는 다름
  • overloading과 overriding이 존재
profile
programmer

0개의 댓글