728x90

언어/C++ 34

클래스(Class)

클래스(Class)키워드 struct를 대신해서 class를 사용하면, 구조체가 아닌 클래스가 된다.클래스는 기본적으로(별도의 선언을 하지 않으면) 클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근이 가능하다.클래스는 정의를 하는 과정에서 각각의 변수 및 함수의 접근 허용범위를 별도로 선언해야 한다. 이것이 struct를 이용해서 정의하는 구조체와 class를 이용해서 정의하는 클래스의 차이점이다.접근제어 지시자(접근제어 레이블)C++의 접근제어 지시자는 다음과 같이 총 세가지가 존재한다.public : 어디서든 접근허용protected : 상속관계에 놓여있을 때, 유도 클래스에서의 접근 허용private : 클래스 내(클래스 내에 정의된 함수)에서만 접근허용접근제어 지시자가 선언되면, 그 ..

언어/C++ 2024.11.26

구조체(Struct)

구조체(Struct)구조체는 연관 있는 데이터를 묶을 수 있는 문법적 장치로 데이터의 표현에 매우 큰 도움을 준다.키워드 struct는 이어서 선언되는 자료형이 구조체를 기반으로 정의된 자료형임을 나타낸다. 그리고 키워드 struct를 생략하려면 별도의 typedef 선언을 추가해야 한다. 하지만 C++에서는 기본 자료형 변수의 선언방식이나 구조체를 기반으로 정의된 자료형의 변수 선언방식에 차이가 없다. 즉 C++에서는 별도의 typedef 선언 없이도 다음과 같이 변수를 선언할 수 있다.C++에서 구조체는 클래스의 일종으로 간주된다.구조체 함수구조체 안에 함수가 정의되어 있으면 함수를 인라인으로 처리하라는 의미가 더불어 내포된다.반면 함수를 구조체 밖으로 빼내면(함수 자체는 내부, 구현을 외부), 이러..

언어/C++ 2024.11.24

참조자(Reference)

참조자(Reference)이미 선언된 변수의 앞에 & 연산자가 오면 주소 값의 반환을 명령하는 뜻이 되지만, 새로 선언되는 변수의 이름 앞에 등장하면, 이는 참조자의 선언을 뜻하는 게 된다.참조자는 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름이다.함수 내에서 선언된 지역적(local) 참조자는 지역변수와 마찬가지로 함수를 빠져나가면 소멸이 된다.참조자 수에는 제한이 없다. 한 개의 변수에 여러 개의 참조자를 선언하는 것도 가능하다.참조자의 선언 가능 범위참조는 변수에 대해서만 선언이 가능하고, 선언됨과 동시에 누군가를 참조해야 한다.상수를 대상으로 참조자를 선언할 수는 없고, 미리 참조자를 선언했다가, 후에 누군가를 참조하는 것은 불가능하며, 참조의 대상을 바꾸는 것도 불가능하다.참조자가 상수..

언어/C++ 2024.11.24

인라인(inline) 함수

인라인(inline) 함수함수 호출의 오버헤드를 줄이기 위해, 컴파일러가 함수 호출을 실제 함수 코드로 대체하도록 제안하는 함수이다.C++에서 inline 키워드를 사용하여 선언한다.인라인 함수는 컴파일 시점에 처리되며, 함수 호출 대신 함수의 본문을 호출 지점에 복사하여 성능을 최적화하려는 목적으로 사용된다. 따라서 컴파일러는 함수의 인라인화가 오히려 성능에 해가 된다고 판단할 경우, 이 키워드를 무시해버리기도 한다. 또한 컴파일러는 필요한 경우 일부 함수를 임의로 인라인 처리하기도 한다.특징함수 호출 오버헤드 제거일반적으로 함수 호출 시, 프로그램은 스택에 매개변수와 반환 주소를 저장하고 복귀하는 오버헤드가 발생한다.인라인 함수는 이러한 과정 없이, 함수의 코드를 호출 지점에 직접 삽입한다.컴파일러의..

언어/C++ 2024.11.24

Call by Value/Call by Reference

Call by Value함수 호출 시 인자의 값 자체를 복사하여 함수에 전달하는 방식이다.함수는 원본 데이터의 복사본을 사용하므로, 함수 내부에서 데이터가 변경되더라도 원본 데이터에는 영향을 미치지 않는다.Call by Reference함수 호출 시 인자의 참조를 전달하는 방식이다.함수는 원본 데이터의 주소를 참조하므로, 함수 내부에서 변경된 내용이 원본 데이터에 반영된다.언제 Call by Value 와 Call by Reference를 사용해야 할까?Call by Value원본 데이터 보호가 중요한 경우 사용한다. 함수 내부에서 인자를 수정하더라도 원본 데이터에 영향을 주기 않아야 할 때 적합하다.데이터의 읽기 전용 연산이나 원본 데이터 변경을 원하지 않는 경우 사용된다.Call by Referenc..

언어/C++ 2024.11.24

추상 클래스/인터페이스

추상 클래스/인터페이스추상 클래스(Abstract Class)추상 클래스는 공통적인 속성과 행동을 정의하는 클래스로, 하위 클래스에서 구현을 강제하고자 하는 추상 메서드를 포함할 수 있다. 추상 클래스는 인스턴스화할 수 없으며, 주로 기반 클래스(base class)로 사용된다.특징추상 클래스는 일반적인 멤버 변수와 구현된 메서드를 포함할 수 있으며, 동시에 순수 가상 함수(C++) 또는 추상 메서드(c#)도 가질 수 있다.상속을 통해 다른 클래스에서 공통 기능을 재사용하면서 특정 메서드의 구현을 강제할 수 있다.추상 클래스 자체로는 인스턴스화 할 수 없고, 반드시 상속받아 구현해야 한다.인터페이스(Interface)클래스가 구현해야 할 메서드의 계약(Contract)을 정의하는 일종의 청사진이다. 인터..

언어/C++ 2024.11.22

24.08.28 CS, C++

CS전략(Strategy) 패턴전략 패턴은 실행(런타임) 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴이다. 여기서 전략이란 일종의 알고리즘이 될 수도 있으며, 기능이나 동작이 될 수도 있는 특정한 목표를 수행하기 위한 행동 계획을 말한다.즉, 어떤 일을 수행하는 알고리즘이 여러가지 일때, 동작들을 미리 전략으로 정의함으로써 손쉽게 전략을 교체할 수 있는, 알고리즘 변형이 빈번하게 필요한 경우에 적합한 패턴이다.전략 패턴 구조전략 알고리즘 객체들알고리즘, 행위, 동작을 객체로 정의한 구현체전략 인터페이스모든 전략 구현체에 대한 공용 인터페이스컨텍스트(Context)알고리즘을 실행할 때마다 해당 알고리즘과 연결된 전략 객체의 메소드를 호출한다.클라이언트특..

언어/C++ 2024.08.28

Set / Unordered Set

Set정의set은 균형 이진 트리(일반적으로 레드-블랙 트리)로 구현된 정렬된 집합이다.특징정렬된 순서 : 원소들이 자동으로 정렬된 상태로 저장된다.탐색 시간 : 삽입, 삭제 검색 연산의 평균 시간 복잡도는 O(log n)이다.순회 : 원소들을 순회할 때 항상 정렬된 순서로 순회한다.사용 예데이터가 항상 정렬된 상태로 필요할 때특정 범위의 원소들을 빠르게 찾을 때게임 내 순위 리스트게임 내에서 플레이어 점수 또는 순위 리스트를 관리할 때, 점수를 정렬된 상태로 유지해야 할 때 사용된다.자동으로 정렬된 상태로 저장되기 때문에, 순위를 빠르게 검색하거나 특정 범위의 순위를 쉽게 추출할 수 있다.퀘스트 트래킹플레이어가 완료한 퀘스트를 추적하고, 완료한 순서대로 정렬하여 저장할 대 유용하다.완료한 퀘스트를 정렬..

언어/C++ 2024.06.18

STL 컨테이너

C++STL 컨테이너벡터(Vector)동적 배열(크기 조절 가능), 배열과 같이 연속된 자료구조이므로 캐시 친화적이다. 임의 접근 반복자(random access iterator)를 사용하므로 배열의 원소에 즉시 접근 가능하다.emplace를 하면 복제 과정 없이 바로 원소를 삽입할 수 있어서 push_back보다 비용이 절감된다. 반복자 무효화가 발생할 수 있다.반복자 무효화컨테이너의 메모리가 재할당 될 때(vector resize, push_back)나 요소 삭제를 하는 등의 동작에서 발생할 수 있다.만약 STL의 erase를 사용한다면 erase한 원소 포함해서 뒤의 원소를 가리키는 모든 반복자가 무효화된다. 이는 삭제 후 뒤에 있는 요소를 모두 땡겨줘야 하기 때문이다.단, erase 함수는 다음 ..

언어/C++ 2024.06.16

포인터 변수와 참조, Malloc과 New

포인터 변수와 참조, Malloc과 New참조자(reference)실체가 있어야 하며 선언 즉시 할당되어야 한다. 즉 NULL, nullptr로 할당 불가능하다.레퍼런스는 초기화리스트를 사용하여 먼저 초기화해야하는데(modern c++의 초기화리스트와는 다르다. 생성자의 초기화리스트를 의미한다.) 이는 생성자 내부에서의 초기화는 먼저 null로 생성한 뒤 값을 넣는 방식이기 때문이다. 또한 한번 할당하면 다른 곳에 재할당 불가능하다.포인터(Pointer) 타입 변수주소값을 저장할수 있는 타입의 변수이다.실체가 없이 NULL이 가능하며, 언제든 할당할 수 있다. 또한 동적 메모리 할당에 사용된다.Malloc과 New의 차이Malloc : 단순한 메모리 할당, 할당 시 메모리의 사이즈를 입력해서 할당받는다...

언어/C++ 2024.06.12
728x90