[C언어] 5.연산자응용
C언어 학습 노트 : 5. 연산자 응용#
1. sizeof 연산자#
sizeof는 피연산자의 크기를 바이트 단위로 반환한다.- 대부분의 경우 컴파일 타임에 계산되므로 CPU 부하가 발생하지 않는다.
- 단, 가변 길이 배열(VLA) 의 경우 런타임에 계산이 수행될 수 있다.
sizeof(자료형)형태뿐 아니라sizeof 변수형태로도 사용할 수 있다.- 유지보수성을 높여주는 대표적인 연산자이므로 적극 활용하는 것이 좋다.
2. 상등 연산과 부등 연산 (부동소수점 비교)#
- 부동소수점(float, double)은 근사값으로 저장되므로
==,!=비교는 신뢰할 수 없다. - 따라서 직접적인 상등/부등 연산은 권장되지 않는다.
- 대소 비교(
>=,<=)는 가능하나, 여전히 정밀도 문제를 고려해야 한다. - 일반적으로는 허용 오차(epsilon) 방식을 사용한다.
#include <math.h>
if (fabs(a - b) < 1e-6) {
// a와 b는 사실상 같은 값으로 본다
}
3. 논리 연산자와 Short Circuit#
논리 연산에서는 필요하지 않은 연산을 생략하는 단락 평가(short circuit) 가 수행된다.
- OR (
||) 연산: 왼쪽 피연산자가 참이면 오른쪽을 계산하지 않는다. - AND (
&&) 연산: 왼쪽 피연산자가 거짓이면 오른쪽을 계산하지 않는다.
- OR (
연산은 왼쪽에서 오른쪽 순서로 평가된다.
따라서 조건식 나열 시 순서가 중요하다.
- 연산 속도가 빠른 조건을 앞에 둔다.
- 참/거짓이 빨리 판별되는 조건을 앞에 둔다.
이는 프로그램의 성능에 직접적인 영향을 준다.
4. 삼항 연산자#
형식:
조건식 ? 값1 : 값2;간단한 조건 분기에서는 코드가 간결해지는 장점이 있다.
단점으로는 가독성이 떨어질 수 있고, 컴파일러 최적화에 따라
if문과 성능 차이는 거의 없지만 경우에 따라 어셈블리가 더 복잡해질 수 있다.따라서 “무조건 삼항 연산자가 더 좋다”는 것은 옳지 않으며, 상황에 따라 선택하는 것이 바람직하다.
5. 프로그래밍 품질의 기준#
- 비교 횟수 최소화
- 유지보수성 확보
- 확장성 보장
- 메모리 사용 최적화
예시:
if대신 삼항 연산자를 무조건 쓰는 것은 좋은 습관이 아니다.- 장점: 코드 간결화
- 단점: 가독성 저하, 경우에 따라 최적화 결과가 달라질 수 있음
학습 포인트 정리#
sizeof는 대부분 컴파일 타임에 계산되지만, 가변 길이 배열에서는 런타임에 계산될 수 있다.- 부동소수점 비교에서
==,!=은 피해야 하며, 허용 오차 방식(epsilon 비교)을 사용하는 것이 일반적이다. - 논리 연산자는 단락 평가(short circuit)를 수행하므로 조건식 순서를 잘 구성해야 성능에 이득이 있다.
- 삼항 연산자는 간결성의 장점이 있으나, 무조건 좋은 것은 아니며 가독성과 상황을 고려해야 한다.
- 좋은 프로그래밍은 단순히 코드 길이가 아니라 유지보수성과 확장성을 함께 고려해야 한다.