C++ Practice

Study C++ Developer RoadMap (6)

Srff5123 2025. 2. 26. 21:14
728x90

1.예외 처리(Exception Handling)

C++의 예외 처리는 프로그램의 런타임 실행 중에 발생할 수 있는 오류, 이상 징후 또는 예기치 않은 이벤트를 처리하는 매커니즘이다. 

프로그램이 갑자기 충돌하는 대신 오류가 발생했을 때 계속 실행하거나 정상적으로 종료할 수 있다.

 

 예외 처리를 구현하기 위한 키워드 및 집합으로는

1. try :  예외를 모니터링해야 하는 코드 블록을 정의한다.

2. catch : catch할 예외의 유형과 해당 예외가 발생할 때 실행될 코드 블록을 지정한다.

3,throw : 적잘한 catch 블록에 의해 catch되고 처리될 예외를 throw 한다.

4.noexcept : 예외를 발생시키지 않거나 범위 내에서 예외가 발생하는 경우 프로그램을 종료하는 함수를 지정한다.

 

예시

 

계산 결과가 0인 경우 예외를 발생시키는 함수를 정의한다.

함수에서 블록을 사용하여 결과를 호출하고 출력한다.

예외가 throw가 되면 블록 내에서 catch되어 오류 메세지가 출력된다.

이렇게 하면 0으로나누려고 할 떄 프로그램이 충돌하지 않도록 오류를 정상적으로 처리할 수 있다.

 

1. 표준 예외 사항(Standard Exceptions)

C++는 보다 구체적인 오류 처리를 위한 예외 유형으로 사용할 수 있는 라이브러리 아래에 표준 클래스 집합을 제공한다.

이러한 클래스 중 일부는 다음과 같다

1.  exception : 모든 표준 예외에 대한 기본 클래스이다.

2.  logic_error : 프로그램에서 정적으로 감지할 수 있는 오류를 나타낸다.

3.  runtime_error : 프로그램 실행 중에 발생하는 오류를 나타낸다.

 

예시

 

runtime_error 같은 표준 예외 클래스를 사용하면 기반으로 일관된 방식으로 예외를 처리할 수 있다.

 

2. C++ 언어 개념(Language Concepts in C++)

C++는 몇가지 주요 언어 개념을 제공하는 강력하고 높은 수준의 객체 지향 프로그래밍 언어이다.

 

 

1. C++의 타입 캐스팅(Type Casting in C++)

타입 캐스팅은 한 데이터 타입에서 다른 데이터 타입으로 값을 변환하는 프로세스 이다.

C++에는 4가지의 캐스팅 방법이 있다.

 

1. Static Cast

정수와 부동 소수점과 같은 다른 데이터 타입 간 또는 포인터 타입 간에 변환할 수 있는 C++의 캐스팅 연산자 중 하나이다.

이 타입의 캐스트는 컴파일 타임 검사를 수행하고 지정된 유형 간에 유효한 변환이 불가능한 경우 오류를 제공한다.

일반적으로 C 스타일 캐스트보다 안전하며,

이는 데이터의 안전하지 않은 재해석을 수행하지 않고 더 나은 타입 검사를 허용하기 때문이다.

 

예시

기본 데이터 타입 간 변환

상속 계층에서 다른 객체 타입의 포인터 캐스팅

 

서로 다른 객체 타입 간에 포인터를 캐스팅할 경우 주의 해서 사용해야한다.

포인터는 원래 형식이 대상 형식과 일치하지 않으면 캐스팅 결과가 잘못되거나 예기치 않은 동작이 발생할 수 있다.

 

2.const_cast

변수에 constness를 제거하거나 추가할 수 있는 C++의 캐스팅 타입이다. 즉, 또는 객체를 수정하거나 또는 타입에 대한 포인터 또는 참조를 변경할 수 있다.

이 기능은 변수를 인수로 전달해야 하거나 함수 매개 변수에 const가 아닌 형식이 필요하지만 코드 전체에서 변수가

일정하게 유지되도록 하려는 특정 상황에서 유용하다.

 

실제 변수를 수정하면 정의되지 않은 동작이 발생할 수 있으므로 반드시 필요한 경우에만 이 기능을 사용하는 것이 가장 좋습니다.

 

예시 

 

이 예에서는 먼저 변수를 만들고, 다음 변수의 constness를 제거하고 const가 아닌 포인터에 할당하는 데 사용한다.

이 함수는 하나의 인수로 사용하고 포인터가 가리키는 값을 수정하는데,

이는 원본을 직접 전달한다면 불가능하다.

 

3. dynamic_cast

다형성에 특별히 사용되는 C++의 캐스팅 연산자 유형이다.

기본 클래스의 포인터와 참조를 파생 클래스로 안전하게 변환하고 런타임 중에 변환의 유효성을 확인한다.

변환이 유효하지 않은 경우 (즉, 객체가 대상 유형이 아닌 경우) 정의되지 않은 동작을 생성하는 대신 null 포인터를 반환한다.

따라서 다형성을 사용할 때 잠재적인 충돌 및 오류를 방지할 수 있다.

 

예시

 

객체에 대한 포인터가 포인터()에 할당된다. 

다음 다시 포인터로 다운캐스팅을 시도하여 캐스팅에 성공하면 새 포인터()를 통해 기능에 액세스할 수 있다.

 

4.reinterpret_cast

데이터 표현을 변경하지 않고 포인터 또는 정수의 타입을 변경할 수 있는 C++의 캐스팅 타입이다.

일반적으로 필요한 변환이 너무 낮거나 .static_cast와 같은 다른 캐스팅 방법에서 지원되지 않은 경우에 사용한다.

잘못 사용하면 정의되지 않은 동작과 심각한 문제가 발생할 수 있기에 주의해서 사용해야만 한다.

 

예시

 

포인터의 유형을 변경하여 정수를 문자 배열로 효과적으로 처리하고 각 Byte를 출력 해준다.

 

변환된 포인터를 역참조할 때 주의해야 하며,

동작은 예측 불가능할 수 있으며, 액세스할 의도가 없는 메모리 영역에 액세스가 되는 등의 문제가 발생할 수 있다.

낮은 수준의 변환이 필요한 경우에만 사용한다. 

 

 

참고 자료 : C++ Developer Roadmap

 

C++ Developer Roadmap

Community driven, articles, resources, guides, interview questions, quizzes for C++ development. Learn to become a modern C++ developer by following the steps, skills, resources and guides listed in this roadmap.

roadmap.sh

 

공부한 내용

Exception Handling -> Langueage Concepts -> TypeCasting(static,const,dynamic,reinterpret cast)

728x90