++
이전의 C++과 비교하면 모던 C++에서는 어떤 것이 달라졌는지,
사실 많은 변화가 있었음은 알지만
그럼에도 불구하고 필자는 해당 기능들을 잘 알지 못한다.
때문에 게시글과 같이 성장하고자
매일 C++에 관련된 포스팅을 하고자 함을 기반으로
필자의 학습에 초점을 두어 작성되는
작성된 게시글이기에
독자 위주의 게시글이라기 보다는,
필자의 독서 기록용 게시글이 취지에 더욱 맞음을 인지해주고 읽어주길 바란다.
++
[ 프로그래밍 패러다임(Programming Paradigm) ]
프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고
코드를 어떻게 작성할 지 결정하는 역할을 한다.
새로운 프로그래밍 패러다임을 통해서는 새로운 방식으로 생각하는 법을 배우게 되고,
이를 바탕으로 코드를 작성하게 된다.
- 명령형 프로그래밍: 무엇(What)을 할 것인지 나타내기보다 어떻게(How) 할 건지를 설명하는 방식
- 절차지향 프로그래밍: 수행되어야 할 순차적인 처리 과정을 포함하는 방식 (C, C++)
- 객체지향 프로그래밍: 객체들의 집합으로 프로그램의 상호작용을 표현 (C++, Java, C#)
- 선언형 프로그래밍: 어떻게 할건지(How)를 나타내기보다 무엇(What)을 할 건지를 설명하는 방식
- 함수형 프로그래밍: 순수 함수를 조합하고 소프트웨어를 만드는 방식 (클로저, 하스켈, 리스프)
null 포인터
모던 C++의 또 다른 새로운 기능은 nullptr인데,
이 키워드는 null 포인터를 가리키기 위해 사용됐던 NULL 매크로를 대체한다.
이제 NULL 매크로를 사용할 때, 0을 지칭하는 것인지 아니면
null 포인터를 지칭하는 것인지 모호했던 경우를 피할 수 있다.
다음 두 개의 함수 서명을 보자.
void funct(const char*);
void funct(int)
첫 번째 함수는 매개변수가 포인터 타입이고 두 번째 함수는 정수이다.
이제 다음과 같이 함수를 호출한다고 가정해보자.
funct(NULL);
원래 의도는 매개변수가 포인터인 첫 번째 함수를 호출하는 것이다.
하지만 함수 호출에 사용된 인수 NULL은 사실 숫자 0으로 정의된 매크로이므로
원래 의도와 다르게 정수를 매개변수로 받는 두 번째 함수가 호출이 된다.
모던 C++에서는 확실하게 null 포인터를 가리키고 싶다면 다음과 같이 쓸 수 있다.
funct(nullptr);
컴파일러는 이제 null 포인터를 매개변수로 받았기 때문에 원래 의도대로 첫 번째 함수를 실행한다.
더 이상 모호함은 없으며 예상하지 못한 문제도 피할 수 있다.
'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글
STL - 제네릭 프로그래밍과 템플릿 (3) | 2024.02.06 |
---|---|
정적 멤버와 상수 멤버 (0) | 2024.02.05 |
모던 C++ 함수형 프로그래밍 decltype (0) | 2023.12.16 |
모던 C++ 함수형 프로그래밍 auto (0) | 2023.12.16 |
상황에 맞는 키워드 (Context-Sensitive Keywords) (0) | 2023.11.21 |