일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 고려대학교
- 파이썬
- 삼성
- 물걸레자동세척로봇청소기
- 하이퍼바이저
- 갤럭시탭S8울트라
- 가상화
- 구글 앱 엔진
- 동아리
- SSM
- 패턴 인식
- 나르왈프레오
- 패턴인식
- Bidirectional Associative Memory
- BAM
- NarwalFreo
- 증강현실
- 멤버십
- 삼성전자 소프트웨어멤버십 SSM
- 인공지능
- Google App Engine
- 신경망
- Python
- 물걸레로봇청소기추천
- Neural Network
- 빅데이터
- Friendship
- 삼성소프트웨어멤버십
- hopfield network
- 신경회로망
- Today
- Total
정보공간_1
[2기 대구 최진원] C++ - Better C 본문
안녕하세요.
대구 멤버십 21-1기 최진원입니다.
요즘 멤버십회원 분들은 평가 준비에 바쁘실 텐데요, 이럴 때 일수록 기본이 참 중요하다는 것을 알게 됩니다. 그래서 저는 ‘C++ Language’ 에 대해서 글을 쓰게 되었습니다. C++ Language는 C Language와 함께 아주 기본적이고 중요한 Language인데요. 이번 기회에 함께 C++ Language를 정리해보도록 하죠.
먼저 객체지향적인 C++ Language 는 절차지향적인 C Language 와 분명 비슷하지만 다릅니다. 우선 객체 지향에 대해서 먼저 알아보고 시작을 하겠습니다.
OOP(객체지향)의 특징으로는 Encapsulation, Information Hiding, Abstraction, Inheritance 그리고 Polymorphism을 들 수 있습니다.
그럼 오늘의 주제 ‘Better C’ 에 대해 알아보겠습니다.
1. 함수 오버로딩(Function Overloading)
위의 예제에서 function 함수가 두 번이나 선언이 되었죠. C 컴파일러는 함수를 호출할 때 ‘함수의 이름’ 정보만 가지고 찾기 때문에 위의 경우를 허용하지 않습니다.
하지만 C++ 컴파일러는 ‘함수의 이름 + 매개 변수의 정보’을 참조하여 함수를 찾기 때문에 위의 경우를 허용합니다. 이렇게 함수의 이름은 같지만 매개 변수의 타입이나 개수가 다른 함수를 여러개 선언하는 것을 함수 오버로딩이라고 합니다.
그렇다면 이와 같이 리턴 타입이 다르면 어떻게 될까요?
함수의 이름이 같고 리턴 타입이 달라 언뜻 보기에는 오버로딩처럼 보일 수 있지만 함수의 이름이 같더라도 리턴 타입만으로는 알 수 없기 때문에 오버로딩이라고 말할 수 없습니다.
그 외에 다른 예로 다음과 같은 예제들이 있습니다.
2. Default Argument Values
전달되지 않는 인자를 대신하기 위한 기본 값이 설정되어 있는 변수입니다.
위의 예제와 같이 default 변수를 선언해 놓음으로 인자를 전달하지 않아도 지정된 값으로 초기화를 해줄 수 있습니다. Default Argument Values 사용시에 주의해야 할 점이 있다면 앞에서 설명드렸던 1. 함수 오버로딩입니다.
위와 같이 function함수를 호출하면서 인자를 전달하지 않게 되면 기본 매개 변수가 사용된 첫 번째 function 함수와 두 번째 function 함수 모두 호출이 가능하게 되어 버리고, 에러를 발생시키게 되므로 조심해야 합니다.
3. Tag of Struct
위 그림의 C Style과 C++ Sytle의 구조체 선언 코드를 보면 C++ Language에서 enum, struct, union 의 tag가 type name으로 사용된다는 것을 알 수 있습니다.
4. Const
const 키워드는 변수를 상수화 하는 것 인데, 같은 코드라도 위치에 따라 다른 의미를 나타내고 있습니다.
위의 예제에서 에러가 발생을 한다면 몇 번째 Line에서 발생을 할까요?
2: const int* p; 에서 const 는 int* p 의 값을 상수화 시키게 됩니다. 그래서 4번 라인에서와 같이 p의 값을 변경을 하게 될 경우 에러를 발생시키게 됩니다.
그럼 다음과 같이 p 앞에 const 키워드가 붙게 되면 어떻게 될까요?
이러한 경우, const 키워드 다음에 나오는 p 를 상수화 시키게 됩니다. 그래서 4번 라인에서 에러가 발생하게 되죠.
그렇다면 다음과 같은 경우는 예측할 수 있겠죠?
const 키워드가 int* 와 p 앞에 있기 때문에, p, *p 값 모두를 상수화 시켜 3, 4 라인 모두 에러가 발생하게 됩니다. 또한 const 멤버 변수의 초기화는 선언 때 이루어 져야 한다고 알고 계실 것입니다.
그렇다면 아래 예제의 결과를 예측할 수 있겠죠?
결과는 Compile Error입니다. 객체의 생성은 메모리 할당을 하고, 생성자 호출 순으로 이루어 집니다. 위의 예제의 경우, 메모리 공간을 할당하면서 이미 val 값이 쓰레기 값으로 초기화가 되었고 그 값을 바꾸려고 하기 때문에 에러가 나타나게 됩니다. 이러한 문제로 인해 값을 변경할 수 없게 되는데요. 이러한 경우 멤버 MIL(Member Initializer List)로 해결을 할 수 있습니다.
5. Reference
Reference는 메모리 공간에 이름을 하나 더 추가해주는 행위로 별명이라고도 합니다.
위의 예제의 결과 a와 b는 같은 값 5가 있는 주소를 함께 공유하고 있습니다. 그리고 다음의 예제와 같이 call-by-reference의 역할을 하게 됩니다.
이렇게 reference를 이용하게 되면 포인터 연산이 필요없게 되므로 보다 안정적으로 사용할 수 있게 됩니다. 하지만 호출시 call-by-value와 혼동이 될 수 있다는 단점도 함께 가지고 있으니 주의해야겠죠?
Reference를 사용할 때 주의해야 할 점이 있다면
위와 같이 초기화하지 않았거나, 상수를 사용할 수 없다는 점입니다.
6. new & delete
C의 malloc() / free() 함수 대신 아래와 같이 C++에서는 new, delete 연산자를 사용하게 됩니다.
7. Reference
- Kang, Byung-Wook, Introduction to C++, YeungNam Univ. SE Lab, 2005
- 윤성우, C++ 프로그래밍, FREELEC, 2004
C++ 언어는 C 언어를 포함합니다. 그렇기 때문에 C언어로 작성된 대부분의 프로그램이 C++컴파일러로도 컴파일이 가능하죠. 그래서 이번 포스팅에서는 기본적인 특성 몇 가지를 살펴보았는데요. 가볍게 읽고 확실히 알 수 있었으면 합니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[2기 전주 심경원] UART 통신을 이용한 프로세서 제어 (0) | 2012.08.19 |
---|---|
[2기 대구 김길종] The Empty Base Class Optimization (EBCO) (0) | 2012.08.18 |
[2기 강남 권도일]손 영역 추적을 위한 루카스 카나데 템플릿 매칭 알고리즘에 대해 (0) | 2012.08.18 |
[2기 부산 최은진] NaCl(Native Client) 소개 (1) | 2012.08.18 |
[2기 강북 송석호] OSGi(Open Services Gateway initiative)란? (0) | 2012.08.18 |