분류 전체보기 251

보안 팀이 보안 도구를 구매할 때 저지르는 가장 큰 실수

보안 팀이 보안 도구를 구매할 때 저지르는 가장 큰 실수는 무엇일까? 아마드 사데딘은 '도구 구매를 프로그램 관리로 혼동하는 것'이라고 말한다. 도구는 프로그램 관리를 위한 일부일 뿐이지, 도구가 프로그램을 관리하는 주체가 아니라는 말이다.따라서 도구 자체에 초점을 맞춰서는 안 되고, 보안 프로그램이 조직에게 무엇을 의미하는지, 무엇을 달성하려고 하는지에 초점을 맞춰야 한다.1. 사이버 보안 도구에 대한 오해와 한계사실 보안 도구는 굉장히 매력적이다. UTM, ESM, SIEM에서부터 시작하여 이미 오래 전부터 보안 도구들은 많은 것을 패키징하고 있다. 피부를 관리하기 위해 제품을 덕지덕지 바르는 게 귀찮은 사람들을 위해 올인원 제품을 내세웠더니, 올인원 제품을 사용하기만 하면서 그걸로 피부가 만사 OK..

C++ 람다식(Lambda expression) 총정리

1. 람다식의 개념이름이 필요 없는 짧은 코드 조각에 사용할 수 있는 인라인 함수를 허용하기 위해 Lambda expression이 도입됐다. 가장 간단한 형태로 람다 식을 다음과 같이 정의할 수 있다. [ capture clause ] (parameters) -> return-type   {       definition of method    }  일반적으로 람다 식의 리턴 타입은 컴파일러 자체에서 평가하므로 명시적으로 지정할 필요는 없다. 또한 the -> return-type 부분은 무시할 수 있다. 그러나 조건문과 같이 복잡한 경우에는 컴파일러가 리턴 타입을 결정할 수 없으며, 명시적인 지정이 필요하다.표준 함수를 사용한 람다 식의 다양한 용도는 다음과 같다:// C++ program to d..

C++ 2024.04.25

C++사용자 정의 예외

우리는 클래스에 예외 처리를 사용할 수도 있다. 심지어 사용자 정의 클래스 유형의 예외를 던질 수도 있다. try 블록 내에 demo 클래스 유형의 예외를 던지는 경우 작성할 수 있다. throw demo();단일 클래스로 예외 처리를 구현하는 프로그램 예시:#include  using namespace std; class demo { }; int main() {      try {           throw demo();      }      catch (demo d) {         cout "Caught exception of demo class \n";      } } 출력:Caught exception of demo class 위 프로그램에서는 빈 클래스를 선언했다. try 블록에서 우리는..

C++ 2024.04.25

C++ 스택 풀기(Stack Unwinding)

1. 스택 풀기의 개념Stack Unwinding은 실행 시간에 함수 호출 스택에서 함수 항목을 제거하는 프로세스다. 로컬 개체는 구성된 역순으로 파괴된다.스택 풀기는 일반적으로 예외 처리와 관련이 있다. C++에서 예외가 발생하면, 함수 호출 스택에서 예외 처리기를 선형으로 검색하고, 예외 처리기가 있는 함수 이전의 모든 항목을 함수 호출 스택에서 제거한다. 따라서 예외 처리는 동일한 함수(예외가 던져지는 곳)에서 예외를 처리하지 않으면, 스택 풀기를 포함하는 것이다. 기본적으로 스택 풀기는 런타임에 구성된 모든 자동 개체에 대해 (예외가 던져질 때마다) 파괴자를 호출하는 프로세스다.예시:// CPP Program to demonstrate Stack Unwinding  #include   usin..

C++ 2024.04.24

C++ 클래스를 이용한 예외 처리

이번 글에서 우리는 클래스를 이용한 예외 처리를 알아보도록 한다. Problem Statement① 데이터 멤버 a와 b를 갖는 클래스 Number를 만든다.② 반복 함수를 작성하여 두 숫자의 GCD(Greatest Common Divisor)를 찾는다.③ 주어진 수가 소수인지 아닌지 확인하기 위해 반복 함수를 작성한다. 만약 참이라고 판명나면, 클래스 MyPrimeException에 예외를 부여한다. ④ 자신만의 MyPrimeException 클래스를 정의한다. Solution① 두 개의 데이터 멤버가 있는 Number라는 이름의 클래스를 a와 b로 정의한다. ② 두 개의 멤버 함수를 다음과 같이 정의한다.   ⑴ int gcd(): 두 숫자의 HCF(Highest Common Factor)..

C++ 2024.04.24

C++ 예외 처리(Exception Handling) 총정리

1. 예외 처리(Exception Handling)의 개념 C++에서 '예외'는 프로그램이 실행하는 동안 발생하는 런타임 이상이나 비정상적인 상태다. 이러한 예외를 처리하는 과정을 예외 처리라고 한다. 예외 처리 메커니즘을 사용하면 예외가 발생한 프로그램의 한 부분의 제어를 코드의 다른 부분으로 전달할 수 있다. 2. 예외의 유형 예외에는 2가지 유형이 존재한다. ① 동기: 입력 데이터의 오류로 인해 문제가 발생하거나, 프로그램이 현재 작업 중인 데이터 유형을 처리할 수 있는 장비가 없을 때 발생하는 예외다. ex) 숫자를 0으로 나누는 것 ② 비동기: 디스크 고장, 키보드 인터럽트 등 프로그램이 통제할 수 없는 예외다. 3. 예외 처리를 위한 내장 기능 C++는 예외 처리를 위한 내장 기능을 제공한다...

C++ 2024.04.23

C++에서 가상 함수(Virtual function)은 private이 가능할까?

가상 함수는 C++에 액세스 제어 기능이 있으므로 private 함수일 수는 있지만 가시성 제어 기능은 없다. 앞선 글에서 말한 바와 같이, 가상 함수는 파생 클래스에 의해 재정의될 수 있지만 모든 상황에서는 기본 클래스 내에서만 호출된다. 예시: // C++ program to demonstrate how a // virtual function can be private #include class base { public: // default base constructor base() { std::cout

C++ 2024.04.19

C++ RTTI(Run-Time Type Information) 총정리

1. RTTI의 개념 C++에서 RTTI(Run-time type information)는 런타임에 개체의 데이터 유형에 대한 정보를 노출하는 메커니즘으로, 하나 이상의 가상 기능을 가진 클래스에만 사용할 수 있다. 이를 통해 프로그램 실행 중에 객체의 유형을 결정할 수 있다. '런타임 캐스트' 라는 개념이 있는데, 이것은 캐스트가 유효한지 검사하는 것이다. 포인터나 참조를 사용하여 객체의 런타임 유형을 확인하는 가장 간단한 접근 방식이라 할 수 있다. 이는 기본 클래스에서 파생된 유형으로 포인터를 캐스팅해야 할 때 특히 유용하다. 클래스의 상속 계층 구조를 다룰 때 일반적으로 객체의 캐스팅이 필요하다. 이런 캐스트에는 두 가지 유형이 존재한다. ① 업캐스팅: 파생된 클래스 객체의 포인터 또는 참조를 기..

C++ 2024.04.19

C++ 정적 함수의 가상화 여부 총정리

1. 정적 함수의 가상화 가능성 C++에서 클래스의 정적 멤버 함수는 가상일 수 없다. 가상 함수는 클래스의 인스턴스에 대한 포인터 또는 참조가 있을 때 호출된다. 정적 함수는 클래스의 인스턴스에 연결되지는 않지만, 클래스에 연결된다. C++에는 포인터 대 클래스가 없으므로 정적 함수를 가상으로 호출할 수 있는 시나리오는 없다. 예를 들어, 아래 프로그램은 컴파일 오류가 나타난다: // CPP Program to demonstrate Virtual member functions // cannot be static #include using namespace std; class Test { public: virtual static void fun() {} }; 출력: prog.cpp:9:29: error:..

C++ 2024.04.15

C++ 순수 가상 함수와 추상 클래스 총정리

1. 순수 가상 함수와 추상 클래스의 개념 기본 클래스에서는 모든 함수의 구현을 알 수 없기 때문에 모든 함수의 구현을 제공할 수 없는 경우가 있다. 이러한 클래스를 추상 클래스라고 한다. 예를 들어 Shape을 기본 클래스라고 하자. Shape에서 함수 draw()의 구현을 제공할 수는 없지만, 파생된 모든 클래스에는 draw()의 구현이 있어야 한다는 것을 알고 있다. 마찬가지로 Animal 클래스에는 move()의 구현이 없지만(모든 동물이 움직인다고 가정할 때), 모든 동물은 움직이는 방법을 알고 있어야 한다. 우리는 추상 클래스의 객체를 만들 수 없다. C++의 순수 가상 함수(또는 추상 함수)는 구현할 수 있는 가상 함수이지만, 파생 클래스에서 해당 함수를 재정의해야 하며, 그렇지 않으면 파생..

C++ 2024.04.15
728x90