공부 56

Abstract Factory 패턴

Abstract Factory 패턴은 생성 패턴(Creational Pattern)의 하나로, 서로 관련있거나 의존하는 객체들의 그룹을 생성하기 위한 인터페이스를 제공하면서, 구체적인 클래스를 지정하지 않는 디자인 패턴입니다. 이 패턴의 목적은 클라이언트 코드가 생성할 객체의 구체적인 타입과 분리되도록 하는 것입니다. 이를 통해 클라이언트 코드의 유연성과 재사용성을 높일 수 있습니다. Abstract Factory 패턴의 구성 요소 Abstract Factory: 추상 팩토리는 구체 팩토리가 구현해야 하는 인터페이스를 정의합니다. 이 인터페이스는 다양한 타입의 추상 제품을 생성하는 메소드를 선언합니다. Concrete Factory: 구체 팩토리는 추상 팩토리 인터페이스를 구현하는 클래스로, 특정 제품 ..

디자인 패턴 분류와 종류

디자인 패턴은 반복적으로 발생하는 문제들을 해결하기 위한 일반적인 해법으로, 소프트웨어 설계 시 재사용 가능한 형태로 구성됩니다. 디자인 패턴은 크게 생성(Creational), 구조(Structural), 행동(Behavioral) 패턴의 세 가지 주요 카테고리로 분류됩니다. 각 카테고리에는 여러 패턴이 포함되며, 이들은 소프트웨어 설계에서 특정 상황에 맞는 최적의 방법을 제공합니다. 1. 생성 패턴 (Creational Patterns) 생성 패턴은 객체 생성에 관련된 패턴으로, 객체의 생성 과정을 더 유연하게 만들어줍니다. Singleton (싱글톤): 클래스의 인스턴스가 하나만 생성되고, 전역적으로 접근 가능하도록 하는 패턴입니다. Factory Method (팩토리 메소드): 객체 생성을 서브클..

옵저버 패턴

옵저버 패턴(Observer Pattern) 옵저버 패턴(Observer Pattern)은 행동 디자인 패턴 중 하나로, 객체의 상태 변화를 관찰하고 이러한 변화에 대해 하나 이상의 관찀자에게 자동으로 알림을 보내는 패턴입니다. 이 패턴은 주로 분산 이벤트 처리 시스템, GUI 툴, 리액티브 프로그래밍에서 널리 사용됩니다. C/C++ 언어를 사용하는 리눅스 환경에서도 옵저버 패턴을 구현할 수 있으며, 이는 이벤트 기반의 프로그래밍 모델을 구축할 때 유용합니다. 옵저버 패턴의 주요 구성 요소는 다음과 같습니다: Subject (주제): 관찰 대상 객체로, 여러 관찰자(Observer) 객체를 자신의 리스트에 유지하고, 자신의 상태 변화를 이들 관찰자에게 알립니다. Observer (관찰자): 주제의 상태 ..

브릿지 패턴

브릿지 패턴(Bridge Pattern) 브릿지 패턴(Bridge Pattern)은 구조적인 디자인 패턴 중 하나로, 추상화와 구현을 분리하여 서로 독립적으로 변화할 수 있도록 합니다. 이 패턴은 두 계층 사이의 '다리' 역할을 하여, 클라이언트 코드가 구현 부분에 직접적으로 의존하지 않도록 하며, 확장성과 유연성을 향상시킵니다. 브릿지 패턴은 크게 두 가지 구성 요소로 나뉩니다: 추상화(Abstraction)와 구현(Implementor)입니다. 추상화(Abstraction) 추상화는 고수준의 제어 논리를 정의합니다. 이것은 클라이언트가 사용하는 인터페이스로, 구현 부분에 대한 참조를 포함하여 구현 부분의 메서드를 호출합니다. 구현(Implementor) 구현 인터페이스는 추상화에서 정의된 메서드의 실..

Factory

팩토리 패턴은 객체 생성을 위한 인터페이스를 정의하고, 하위 클래스가 어떤 클래스의 인스턴스를 생성할지 결정하게 하는 디자인 패턴입니다. 이를 통해 객체 생성을 서브클래스에 위임함으로써, 클라이언트 코드와 인스턴스를 만들어야 하는 구체적인 클래스 간의 결합도를 낮출 수 있습니다. 팩토리 패턴은 크게 두 가지로 나뉩니다: 팩토리 메서드 패턴과 추상 팩토리 패턴입니다. 여기서는 더 간단한 팩토리 메서드 패턴의 예제를 소개하겠습니다. 팩토리 메서드 패턴 예제 이 예제에서는 단순한 차량 공장을 모델링합니다. Vehicle 인터페이스와 이를 구현하는 두 개의 구체 클래스 Car와 Bike를 정의합니다. 그리고 VehicleFactory 클래스에서는 Vehicle 객체를 생성하는 팩토리 메서드 createVehic..

싱글톤 패턴

싱글턴(Singleton) 패턴은 객체의 인스턴스가 애플리케이션 내에서 단 하나만 생성되도록 보장하는 디자인 패턴입니다. 이 패턴은 전역 변수를 사용하지 않고 객체에 대한 전역 접근을 제공하며, 동시에 여러 인스턴스의 생성을 방지하여 리소스 사용을 최적화할 수 있습니다. 생성자를 비공개로 만들어 클래스 외부에서 인스턴스를 직접 생성할 수 없게 합니다. 클래스 내에 정적(private static) 멤버 변수로 자기 자신의 유일한 인스턴스를 저장합니다. 공개적인 정적 메서드(getInstance) 를 제공하여 유일한 인스턴스에 접근할 수 있게 합니다. 이 메서드는 내부적으로 인스턴스가 존재하지 않을 경우에만 생성하고, 이미 존재하는 경우에는 기존 인스턴스를 반환합니다. #include class Singl..

[보안 용어] 이니셜 백터(IV)

IV 초기화 벡터(Initialization Vector, IV)는 블록 암호화에서 사용되는 중요한 개념 중 하나입니다. 초기화 벡터는 각 블록의 암호화에 사용되는 고유한 값으로, 암호화 알고리즘이 동일한 평문 블록에 대해 항상 동일한 암호문 블록을 생성하는 것을 방지합니다. CBC 모드에서 초기화 벡터는 첫 번째 블록에 대한 암호화에 사용되며, 이후에는 이전 블록의 암호문이 현재 블록의 평문과 XOR 연산되어 사용됩니다. 초기화 벡터의 역할은 패턴을 방지하고 블록 간 상관관계를 증가시켜 전반적인 보안을 강화하는 것입니다. 중요한 점은 초기화 벡터는 매번 고유한 값을 가져야 하며, 랜덤하고 예측 불가능해야 합니다. 만약 동일한 초기화 벡터가 계속해서 사용된다면, 같은 평문 블록에 대해 항상 동일한 암호문..

공부/보안용어 2024.02.04

[보안 용어] CBC ECB

CBC(Cipher Block Chaining)와 ECB(Electronic Codebook)은 블록 암호화 모드 중 두 가지 다른 방식입니다. ECB (Electronic Codebook): 설명: ECB 모드에서는 평문을 고정된 블록 크기로 나눈 후, 각 블록을 독립적으로 암호화합니다. 동일한 평문 블록은 항상 동일한 암호문 블록으로 매핑됩니다. 장점: 간단하고 병렬 처리에 용이합니다. 단점: 동일한 평문 블록이 동일한 암호문 블록으로 매핑되기 때문에 패턴이 발생할 수 있습니다. 이로 인해 보안에 취약할 수 있습니다. 블록 간 상관관계가 적기 때문에 암호문에서 패턴을 찾기가 상대적으로 쉽습니다. CBC (Cipher Block Chaining): 설명: CBC 모드에서는 이전 블록의 암호문과 현재 블..

공부/보안용어 2024.02.04

[보안 용어] HASH

해시 함수(Hash Function) 해시 함수는 임의의 크기의 데이터를 고정된 크기의 고유한 값, 즉 해시값으로 매핑하는 함수입니다. 주어진 입력에 대해 동일한 해시값이면서 서로 다른 입력에 대해서는 가능한 한 다른 해시값을 생성해야 합니다. 일반적으로 해시 함수는 무결성 검증, 데이터 저장 및 비밀번호 보안 등 다양한 분야에서 사용됩니다. 대표적인 해시 알고리즘 및 특징: MD5 (Message Digest Algorithm 5): 장점:빠른 연산 속도 단점: 충돌 가능성이 높음 보안 취약점이 발견되어 현재는 권장되지 않음 SHA-1 (Secure Hash Algorithm 1): 장점: 빠른 연산 속도, SHA-256 또는 그 이상과 비교하여 상대적으로 간결 단점: 충돌 가능성이 존재하며, 안전한 ..

공부/보안용어 2024.02.04

[보안 용어] 단 방향 암호화

단방향 암호화(One-way Hash Function) 단방향 암호화는 단방향 함수(해시 함수)를 사용하여 데이터를 암호화하는 기술입니다. 이는 주로 암호화된 데이터를 원래의 데이터로 복원할 수 없는 방식으로 동작합니다. 단방향 함수는 한 방향으로만 작동하며, 같은 입력에 대해서 항상 동일한 출력을 생성합니다. 여기서는 주로 해시 함수를 기반으로 한 단방향 암호화를 설명합니다. 단방향 암호화의 특징 불가능한 역전: 단방향 함수를 통한 암호화는 원래 데이터를 복원할 수 없는 특성을 갖습니다. 즉, 암호화된 값을 이용해서는 원래 값을 유추할 수 없습니다. 고정된 출력 길이: 해시 함수는 항상 일정한 길이의 출력을 생성합니다. 입력이 어떤 크기이든 출력은 일정하게 유지됩니다. 충돌 가능성: 서로 다른 입력이 ..

공부/보안용어 2024.02.04
반응형