티스토리 뷰

Language/C++ 언어

C++과 C의 차이 -2

데브훈96 2020. 2. 11. 13:21

안녕하세요, IT디자이너입니다. 

 

이번에느 C++과 C언어의 차이 두번째 포스팅을 하겠습니다.

 

1. auto 예약어

첫번째로 auto라는 예약어를 소개해드리겠습니다. C언어에서의 auto란 지역변수 기억 분류 지정자입니다. 

즉, 스택에 저장되도록 지정하는 것인데요, 

 

C언어를 공부하셨다면 전역변수,지역변수에 따라서 저장되는 메모리공간이 다르다는 것을 알고 계실겁니다.

 

지역변수 선언시 사용하지 않아도 똑같이 컴파일이 자동으로 auto 예약어를 지정하여 컴파일하게 됩니다.

 

하지만, C++에서는 전혀 다른 기능을 수행하게 되는데요 바로 인스턴스의 초깃값에 따라서 자동으로 데이터타입이 

설정될 수 있도록 하는 기능을합니다. 

 

auto str = "정찬훈";  // <- 문자열 데이터 타입

auto num = 1; // <- 정수형 데이터 타입

이렇게 편리하능 기능을 수행하도록 변경되었습니다.

 

2. default 매개변수

디폴트(default) 매개변수는 함수를 정의할 때 매개변수의 값이 정해지지 않으면 default값으로 대체한다는 의미입니다. 

int hap(int num = 1, int num2 = 2){
	return num+num2;
}

int main(){

 std::cout<< hap() << endl; 

}

 

매개변수로 값을 넘기지 않으면 자동적으로 default 값을 사용하겠다는 것인데요, 매개 변수로 값을 지정해준다면 default 값이 아닌 매개 변수로 지정한 값을 사용하게 됩니다.

 

그리고 한가지 규칙이 있습니다. 함수를 정의할 때 default 값은 무조건 우측에 배치하여야 합니다. 

 

int hap(int num = 1, int num2){
	return num+num2;
}

int main(){
	
 int num = 2;   

 std::cout<< hap(num) << endl; 

}

몇번째 정의한 매개변수에 전달할지 알 수 없다는 문제입니다. num 인스턴스를 우측에 배치하였다면 순서대로 num2가 매개변수를 전달받고 전달받지 못한 인스턴스 num은 default 값을 사용하기 때문에 문제가 발생하지 않게 되는 것입니다.

 

 3. 함수의 다중정의와 함수 템플릿

C++에서는 동일한 이름의 함수를 매개변수가 다르게하여 여러개를 정의할 수 있습니다. 

위 사진에 나와있는 코드처럼 매개변수만 다르게하여 동일한 이름의 함수를 정의할 수 있습니다. 하지만, 이러한 함수를 데이터타입 별로 여러개를 정의하는 것은 불편할 수도 있습니다. 

 

그렇기 때문에 C++에서는 함수 "템플릿" 이라는 기능을 사용할 수 있습니다. 일종의 "틀"과 같은 의미입니다.

 

이렇게 함수템플릿을 사용하면은 함수를 정의할 때 미리 어떤 데이터 타입의 매개변수가 전달될지 고려하지 않고 정의할 수 있다는 장점이 있습니다. !!!

 

3. 인라인(inline) 함수

인라인 함수는 함수의 단점을 보안하고 매크로의 장점을 가져온 함수! 입니다. 

 

우리가 일반적으로 사용하는 함수는 컴파일 과정에서 필요시 함수를 호출하여 호출한 함수를 이용해서 연산을 합니다. 하지만 함수를 호출하는 과정 자체가 컴퓨터 입장에서는 다소 리소스를 많이 차지하는 작업중 하나이기에 부담이 될 수 밖에 없습니다. 

 

또한 매크로는 컴파일 전 전치리기에 의해 코드 변환이 된 후 연산을 하여 함수보다 더 빠른 연산을 보여주는데요, 하지만 데이터타입을 명시적으로 지정할 수 없기 때문에 사용자가 불편을 겪을 수 있다는 단점이 있습니다.

 

하지만 인라인 함수는 다릅니다.! 만약 프로그래머가 인라인 함수로 정의 했다면 컴파일 과정에서 컴파일러가 판단하여 인라인 함수로 사용하기 적합하다면 인라인 함수로 변환하여 빠른 연산을 보여줍니다.!

 

하지만, 인라인(inline)함수도 단점이 있습니다. 자주 사용되는 inline 함수는 코드 자체에 코드의 대한 내용을 여러번 삽입되는 현상이 발생되기 때문입니다. 

 

그렇기 때문에 우리가 inline 예약어를 사용한다 하여도, 컴파일러가 판단하여 변환합니다.!

 

4. 네임스페이스(namespace)

이제 마지막으로 네임스페이스에 대한 설명을 드리고 포스팅을 마치도록 하겠습니다.!

 

C++에서는 변수 이름이나 함수의 이름이 동일해도 "소속"이 다르면 사용할 수 있습니다.!!! 그것을 가능하게 하는것이 바로 네임스페이스(namespace) 입니다.

 

이렇게 동일한 식별자여도 네임스페이스(namespace)가 다르면 사용이 가능합니다. 우리가 지금까지 사용했던 std::

또한 네임스페이스이며, std라는 네임스페이스에 :: (범위지정자) 연산을 통해서 cout 그리고 endl 객체를 사용하였던 것입니다.!!

 

또한 using namespace std; 코드를 통해서 std 네임스페이스 사용을 생략하여 사용도 가능합니다. !

 


C언어와 C++의 차이 2번째 포스팅을 마쳤습니다. 이제 본격적으로 C++ 언어에 관한 포스팅을 하도록 하겠습니다. 

 

감사합니다. 

'Language > C++ 언어' 카테고리의 다른 글

C++ 클래스를 활용하는 방법 기초!  (0) 2020.02.13
C++과 C언어의 차이  (0) 2020.02.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함