목록개인 공부 (21)
초보 코린이의 성장 일지
Byte Padding 설명 바이트 패딩(byte padding)은 구조체(struct)나 클래스(class)의 멤버 변수들이 메모리에 배치될 때, 메모리 정렬(align)을 위해 추가적인 바이트가 삽입되는 현상을 말한다. 구조체나 클래스에 바이트를 추가해 CPU 접근에 부하를 덜어주는 기법이다. CPU가 32비트에서는 한번에 4바이트. 64비트에서는 한번에 8바이트를 읽을 수 있다. #include using namespace std; struct TestStruct { char a; // 1바이트 int b; // 4바이트 char c; // 1바이트 float d; // 4바이트 }; class TestClass { short a; // 2바이트 char b; // 1바이트 int c; // 4바이..
Casts 설명 데이터 형식을 다른 데이터 형식으로 변환하는 작업 Casts의 종류 1. 정적 캐스트(static_cast) 자료형을 변경하기 위해 사용. 컴파일 시간에 형변환이 가능한지 검사한다. 클래스가 잘못된 캐스팅 시 런타임 중 유효성 검사를 하지 않는다. 상위계층에서 하위계층, 하위계층에서 상위계층 둘다 데이터 타입 변환은 가능하다. 하위계층 데이터 타입 변환에는 안전하지 않으므로, 상속 관계에 있는 클래스 간의 캐스팅을 수행할 때는 dynamic_cast를 사용하는게 좋은 방법이다. 포인터 간의 변화에도 사용할 수 있다. 부모 클래스에서 자식 클래스로 캐스팅하려고 할 때, static_cast는 컴파일러에게 허용하도록 지시하지만, 실제로 캐스팅이 안전한지는 확인하지 않는다. #include u..
짐벌락 1. 두 축이 한축으로 합쳐지면서 한축에 대한 계산이 불가능해지는 현상 오일러 - 3차원 공간 좌표계의 회전 1. x, y, z를 순서대로 해당 축들을 개별적으로 계산하는 방법 2. 한꺼번에 축들이 돌아가는걸 계산할 수 없다. 3. 회전축을 순서대로 계산하기 때문에 짐벌락 현상 발생. 4. 각 축이 순서대로 계산되기 때문에 우리가 아는 x축으로 회전을 했을 경우 수평하게 회전하는것이 아닌 다른 축의 계산된 값이 개입되서 회전하게 되므로 사선으로 회전을 하게 된다. 쿼터니언 (사원수) 1. x, y, z축들을 한꺼번에 계산할 수 있는 방법 2. 짐벌락 현상이 해결된다. 3. 180도 기준으로 계산했을 경우, 180도를 넘게된다면 기준점에서 제일 가까운 곳으로 회전을 한다. 이를 해결하려면 180도가..
Static 장점 및 설명 - 함수 외부에서 선언된 static 변수를 전역 변수라고 부르며, 생명주기는 프로그램이 시작될 때 생성 및 초기화되고(초기화는 한번만) 종료될때까지 그 상태 그대로 유지된다. 그 이후 종료되면 소멸한다. - 지역 변수에 static을 붙이게 되면 자동 주기에서 정적 주기로 변경된다. - 지역 변수인 static 변수는 함수내에 범위가 종료된 이후에도 해당 값을 유지한다. - 고정된 메모리를 사용하기 때문에 메모리 측면에서 낭비가 덜하므로 효율적일수 있다. - 객체를 생성하지 않고 사용가능 하기 때문에 속도가 빠르다. - 어떠한 타입이든 모든 객체들이 알고 있고 공유할 수 있어야 하는 멤버 변수에 static를 붙인다. - 멤버 변수는 클래스 내에서 선언만 가능하고 정의는 불가..
malloc - 라이브러리 추가 stdlib.h를 해줘야 사용 가능. - 함수의 일종 - 오버로딩 불가능 - 동적할당 할때 sizeof()와 형변환 캐스팅이 필요하다. - POD 타입만 크기 할당이 가능 (char, int, float 등) - 반환 값 void* - 할당 실패시 error를 throw 한다 - 생성자 호출 기능이 없고, 동적할당만 가능하며, 초기값을 지정해 줄 수 없다. - realloc를 사용해 메모리 크기를 조정할 수 있다. - 사용이 끝나고 해제할때 free 사용 new - 라이브러리 별도 추가 없이 사용 가능. - 연산자 - 연산자 오버로딩 가능 - 형변환 없이 사용 가능 - 컴파일때 메모리를 할당하는게 아닌, 실행시간 동안에 메모리를 할당해준다. - 반환 값 해당 타입의 포인터..
extern - 어딘가에 선언되어 있는 전역변수를 가져다 사용하기 위한 키워드 - 즉 전역변수를 공유할 수 있게된다. - extern 외부에 전역변수가 있다는 표시, 정의되어 있지 않는 상태에서 부르려고 한다면 링크 에러가 발생한다. - 외부에서 사용하기 위해 extern 키워드를 사용했다면, 내부에서 사용하는게 아닌 외부에서 선언되어야 한다. - 반복적으로 같은 이름을 사용하게 될때 (중복선언) - A라는 곳에서 int a라는 변수를 선언 및 사용, B라는 곳에서 a라는 변수를 사용하기(참조) 위해 B에서 extern int a; 를 하게되면 전역변수 a를 사용할수 있게된다. - A라는 곳에서 선언만 한 상태라면 B라는 곳에서 정의를 할 수 있지만, A라는 곳에서 선언과 정의 둘다 했다면 B라는 곳에서..
C++ - 객체 지향 프로그래밍 언어 (멀티패러다임 언어) - 코드를 어셈블리어로 컴파일한다. - 수동으로 관리하기 때문에 속도가 빠르다. - 동적할당으로 만든 변수 및 &를 사용하여 변수 참조이 가능하고 참조 타입으로 분류된다. - 수동적으로 New를 사용하여 동적할당, 사용이 끝나면 Delete로 수동적인 해제를 해줘야한다. - 메모리 관리 수동 처리, 대신 메모리를 직접 관리해야 하므로 메모리 누수 문제가 발생할 수 있다. - 수동적인 특성을 고려하여, 포인터를 사용할 수 있다. - 게임, 서버에 사용이 적합하다. (언리얼) C# - 컴포넌트 지향 프로그래밍 언어 - 코드를 가상 머신(.NET)를 이용해 IL(Intermidiate Language)로 중간언어로 파일생성, CLR (공용 언어 런타임..
인터프리터 - 인터프리터는 자체 실행 기능이 없기 때문에, exe를 만드는 곳만 컴파일러 언어를 사용하고, 대부분 코드를 인터프리터 언어로 결합하는 경우가 많다. - 실행이 시작되면 소스 코드를 한 줄씩 기계어로 번역하는 방식을 사용한다. - 컴파일러는 문제가 발생하면, 소스 코드를 다시 컴파일하고 문제를 하나씩 찾아가며 해결해야하지만, 인터프리터는 소스코드만을 수정해서 실행시키면 끝이나기 때문에 과정이 간편하다 - 메모리를 사용하지 않는다. - 오류 발생시마다 전체를 컴파일해 확인할 필요가 없으므로, 디버깅할때 편하며 효율적이다. - 속도는 컴파일러보다 느린 단점이 있다. - 코드 유출될 확률이 크다. 컴파일러 - 실행파일을 만들어 놓고 계속 사용하기 때문에 한번만 생성해 놓는다면, 런타임 상황일때는 ..
정의 - 컴포넌트 기반 개발이란 재사용이 가능한 컴포넌트의 개발 또는 상용 컴포넌트들을 조합하여 재사용함으로써 생산성과 품질을 높이고, 시스템 유지 보수 비용을 최소화할 수 있는 개발 방법론이다. 또는 컴포넌트 기반 개발방법론이라 부른다. 특징 - 컴포넌트 기반으로 개발 - 아키텍처 중심의 소프트웨어를 설계 - 재사용을 고려하여 컴포넌트를 설계, 컴포넌트를 기반으로 시스템 개발 방법 (CBSD)를 제공한다. - 표준화된 UML을 통한 프로세스를 제공, 유스케이스 다이어그램, 시퀀스 다이어그램, 컴포넌트 다이어그램, 클래스 다이어그램 - Iteration을 통해 반복 점진적 개발 프로세스를 제공, 라이프사이클을 지원하는 일관성 있는 모델링 등장 배경 - 변화에 따른 소프트웨어 대형화, 복잡화 현상 발생 -..
모듈화 (Modularization) - 소프트웨어를 각 기능별로 나누는 것 - 프로그램을 효율적으로 관리될 수 있도록 시스템을 분해, 추상화 함으로써 제품의 성능을 향상시키고, 수정 및 재사용, 유지관리를 용이하게 하는 방법 - 각각의 모듈은 주어진 기능만을 독립적으로 수항하며, 다른 모듈과 적게 연관되어야 한다. 모듈 - 기능별로 나눠진 모듈들의 결과 결합도 - 서로 다른 모듈 간에 상호 의존하는 정도 또는 연관된 관계를 뜻한다. - 자료 결합도, 스탬프 결합도, 제어 결합도, 외부 결합도, 공통 결합도, 내용 결합도 - 모듈의 변화의 영향과 의존성을 낮추고 재사용성을 높이기 위해 결합도를 낮게 유지시키는 것이 좋다. 결합도가 높은 클래스 특징 - 모듈 연관성이 없다. - 복장성 감소 결합도 낮은 클..