728x90

Study/TIL(Today I Learned) 270

24.09.19 C#, CS

C#using System;usingC#의 키워드 중 하나다.SystemC# 코드에 기본적을 필요한 클래스를 담고 있는 네임스페이스다.;(세미콜론)컴파일러에게 문장의 끝을 알려준다.using static어떤 데이터 형식의 정적 멤버를 데이터 형식의 이름을 명시하지 않고 참조하겠다.전역 using(global using)소스파일 한 곳에서만 네임스페이스를 참조하면 프로젝트 내 모든 파일에서 별도의 using문 없이 해당 네임스페이스를 참조할 수 있도록 한다.파일 범위 네임스페이스namespace 선언 뒤에 {} 대신 ;(세미콜론)을 붙이면 그 파일의 모든 코드는 해당 네임스페이스 소속으로 들어간다.Static void Main(string[] args){}이 메소드는 프로그램의 진입점(Entry Point..

24.09.12 C++, CSAPP

C++lower_bound, upper_bound이진 탐색으로 원소를 탐색하는 함수 제공.찾으려는 key값보다 같거나 큰 숫자가 배열 몇 번째에서 처음 등장 하는지 찾기위한 함오름차순 정렬되어 있어야 한다.#include #include using namespace std;int main() { int arr[6] = { 1,2,3,4,5,6 }; cout lower_bound(6) : 5return 0;}lower_bound의 반환형은 iterator이므로 실제로 몇 번째 인덱스인지 알고 싶다면, 위 코드와 같이 lower_bound값에서 배열 첫 번째 주소를 가리키는 배열의 이름을 빼 주면 된다.벡터의 경우 arr.begin()을 빼면 된다.Vector Container자동으로 메모리가 할당되는 배..

24.09.11 C++, CSAPP

C++C++ 입출력 성능 향상ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);c++에서 ios::sync_with_stdio, cin.tie, cout.tie를 사용하는 주된 이유는 입출력 성능을 향상시키기 위해서 이다.ios::sync_with_stdio(false);이 함수는 c++ 표준 입출력 스트림(cin, cout)과 c 표준 입출력 버퍼(stdin, stdout)의 동기화를 해제한다.기본적으로 c++ 표준 입출력은 c의 표준 입출력과 동기화되어 있어서 입출력 작업 시 버퍼를 공유하고 동기화하는 과정에서 오버헤드가 발생한다.ios::sync_with_stdio(false);를 호출하면 c++과 c의 입출력 버퍼가 분리되어 동기화 오베헤드가 사..

24.09.06 CSAPP, CS

CSAPP9.9.8 가용블록의 분할할당기가 크기가 맞는 가용 블록을 찾은 후에 가용 블록의 어느정도를 할당할지에 대해 정책적 결정을 내려야 한다. 한 가지 옵션은 이 가용 블록 전체를 사용하는 것이다. 비록 간단하고 빠르지만, 큰 단점은 내부 단편화가 생긴다는 것이다. 만일 배치 정책으로 인해 크기가 잘 맞는다면, 일부 추가적인 내부 단편화는 수용할 수도 있다.그렇지만 크기가 잘 안맞는다면, 할당기는 대개 가용 블록을 두 부분으로 나누게 된다. 첫 번째 부분은 할당한 블록이 되고, 새로운 가용 블록이 된다.9.9.9 추가적인 힙 메모리 획득하기할당기가 요청한 블록을 찾을 수 없다면, 메모리에서 물리적으로 인접한 가용 블록들을 합쳐서(연결해서) 더 큰 가용 블록을 만들어 본다. 이렇게 해도 충분히 큰 블록..

24.09.05 CSAPP복습 ,C++

CSAPP8.1.2 예외의 종류예외상황은 네 가지 종류로 구분 할 수 있다.인터럽트트랩오류 Fault중단 abort인터럽트인터럽트는 프로세서 외부에 있는 입출력 디바이스로부터 시그널의 결과로 비동기적으로 발생한다. 하드웨어 인터럽트는 비동기적이며, 즉 특정 인스트럭션을 실행해서 발생하는 것이 아니라는 의미에서 그렇다. 하드웨어 인터럽트를 위한 예외 핸들러는 종종 인터럽트 핸들러 라고 부른다.네트워크 어댑터, 디스크 컨트롤러, 타이머 칩 같은 입출력 디바이스들은 프로세서 칩의 핀에 시그널을 보내서 인터럽트를 발생시키고, 인터럽트를 발생시킨 디바이스를 식별하는 예외번호를 시스템 버스에 보낸다.현재의 인스트럭션이 실행을 완료한 후에, 프로세서는 인터럽트 핀이 high로 올라갔다는 것을 발견하고 시스템 버스에서..

24.09.04 CS, C++

C++스마트 포인터스마트 포인터(smart pointer)는 C++에서 동적 메모리 관리를 자동화하기 위해 사용되는 클래스 템플릿이다.스마트 포인터는 객체를 포인터처럼 사용하면서도 메모리 해제를 자동으로 처리하여 메모리 누수(memory leak)를 방지하는 데 도움을 준다. C++11부터 표준 라이브러리에서 제공하는 스마트 포인터에는 std::unique_ptr, std::shared_ptr, std::weak_ptr 등이 있다.1. 스마트 포인터의 필요성C++에서는 동적 메모리를 할당할 때 new 연산자를 사용하고, 할당된 메모리는 delete 연산자로 해제해야 한다. 하지만 메모리 해제를 깜빡하거나 예외가 발생할 경우, 메모리 누수가 발생할 수 있다. 스마트 포인터는 이러한 문제를 해결하기 위해 고..

24.09.03 CS, C++

24.09.03 CS, C++CS추상 팩토리(Abstract Factory)추상 팩토리 패턴은 연관성이 있는 객체 군이 여러개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화 하는 생성 패턴이다. 클라이언트에서 특정 객체를 사용할 때 팩토리 클래스만을 참조하여 특정 객체에 대한 구현부를 감추어 역할과 구현을 분리시킬 수 있다.즉, 추상 팩토리의 핵심은 제품군 집합을 타입 별로 찍어낼 수 있다는 점이 포인트이다. 복잡하게 묶이는 제품군들을 관리와 확장하기 용이하게 패턴화 한 것이 추상 팩토리이다.추상 팩토리 패턴 구조AbstractFactory최상위 공장 클래스. 여러개의 제품들을 생성하는 여러 메소드들을 추상화 한다.ConcreteFact..

24.09.02 CS, 언리얼

CS팩토리 메서드(Factory Method)팩토리 메소드 패턴은 객체 생성을 공장 클래스로 캡슐화 처리하여 대신 생성하게 하는 생성 디자인 패턴이다.즉, 클라이언트에서 직접 new 연산자를 통해 제품 객체를 생성하는 것이 아닌, 제품 객체들을 도맡아 생성하는 공장 클래스를 만들고, 이를 상속하는 서브 공장 클래스의 메서드에서 여러가지 제품 객체 생성을 각각 책임지는 것이다.또한 객체 생성에 필요한 과정을 템플릿처럼 미리 구성해놓고, 객체 생성에 관한 전처리나 후처리를 통해 생성 과정을 다양하게 처리하여 객체를 유연하게 정할 수 있는 특징도 있다.팩토리 메서드 패턴 구조Creator최상위 공장 클래스로서, 팩토리 메서드를 추상화하여 서브 클래스로 하여금 구현하도록 한다.객체 생성 처리 메서드(someOp..

24.08.30 CS, C++

CS상태(State) 패턴상태 패턴은 객체가 특정 상태에 따라 행위를 달리하는 상황에서, 상태를 조건문으로 검사해서 행위를 달리하는 것이 아닌, 상태를 객체화하여 행동을 할 수 있도록 위임하는 패턴을 말한다.객체 지향 프로그래밍에서의 클래스는 꼭 사물/생물 만을 표현하는 고체 형태의 데이터만 표현 할 수 있는게 아니다. 경우에 따라 무형태의 행위/동작도 클래스로 묶어 표현할 수 있다.그래서 상태를 클래스로 표현하면 클래스를 교체해서 상태의 변화를 표현할 수 있고, 객체 내부 상태 변경에 따라 객체의 행동을 상태에 특화된 행동들로 분리해 낼 수 있으며, 새로운 행동을 추가하더라도 다른 행동에 영향을 주지 않는다.여기서 상태란 객체가 가질 수 있는 어떤 조건이나 상황을 의미한다.이처럼 객체가 특정 상태에 따..

728x90