C++ 43

[C++]생성 패턴/팩토리 패턴

순서팩토리 팩턴이란?팩토리 패턴의 장점과 단점팩토리 패턴 사용시 고려사항간단한 팩토리 패턴 작성팩토리 팩턴이란?객체 생성을 공장(Factory)화 시킨 클래스에 캡슐화 처리하여 대신 생성하게 하는 생성 디자인 패턴클라이언트 코드가 직접 new 연산자를 사용하지 않고, 팩토리 메서드나 클래스를 통해 객체를 생성하게하여, 객체 생성의 책임을 분리시킴팩토리 패턴의 사용 예다양한 종류의 몬스터/아이템을 사용할 때조건에 따라 다른 객체를 생성해야 할 때생성 로직이 복잡하고 자주 변경될 때팩토리 패턴의 장점과 단점장점객체 생성 캡슐화: 객체 생성 로직을 클라이언트 코드로부터 분리하여 유지보수가 쉬워짐유연성 증가: 새로운 클래스나 로직이 추가되어도 기존 코드를 거의 수정하지 않고 확장 가능함의존성 감소: 구체적인 클..

C++/디자인패턴 2025.07.23

[C++]Rvalue/Lvalue

순서Rvalue란?Lvalue란?Rvalue와 Lvalue의 차이Rvalue란?기존 C에서 rvalue는 right value 즉 대입연산자를 기준으로 오른쪽 값메모리 주소가 없는 일시적으로 계산된 결과 또는 임시 값임 => 지금만 잠깐 사용하는 값예를 들어 int a = 5; 에서 rvalue는 5이다.Lvalue란?기존 C에서 rvalue는 left value 즉 대입연산자를 기준으로 왼쪽 값객체를 참조하는 표현식으로 특정 메모리의 위치를 가지고 있고 주소도 가질 수 있는 존재하는 값예를 들어 int a = 5;에서 lvalue는 a이다.Rvalue와 Lvalue의 차이lvalue와 rvalue를 구분하는 이유이동생성자 / 이동 대입 연산자함수 오버로딩 시 구분 가능

C++ 2025.07.22

[C++] 연산자 오버로딩

순서연산자 오버로딩이란?연산자 오버로딩이 필요한 이유연산자 오버로딩 문법주의할 점연산자 오버로딩이란?기본 연산자를 클래스에 맞게 새로운 의미로 재정의 하는 것.연산자 오버로딩이 필요한 이유클래스끼리 연산을 직관적으로 하기 위해.연산자 오버로딩 문법리턴타입 클래스이름::operator연산자(인자){} 형식으로 작성 ex) ==연산자 오버로딩bool operator==(const Point& other) const{ return (x == other.x) && (y == other.y);}if(p1 == p2){ cout 주의할 점새로운 의미를 부여할 때 직관적이여야 함과도한 오버로딩은 코드 가독성을 해칠 수 있음연산자의 원래 의미와 다르게 동작하지 않도록 주의해야함

C++ 2025.07.17

[C++] 시프트 연산자

순서시프트 연산자란?산술 시프트란?논리 시프트란?산술 시프트와 논리 시프트 차이보수법시프트 연산자란?시프트라는 말 그대로 이동을 시키는 것을 의미한다. 산술 시프트(>) 또는 논리 시프트 >>>를 이용함시프트 연산자는 10진수를 2진수로 표현한 값을 이동시킨다. 즉, 비트를 이동시키는 연산자시프트 연산자는 피연산자가 2개인 2항 연산자이다.시프트 연산자는 2진수로 표현된 비트를 해당하는 방향으로 이동시키는 연산자이다.산술 시프트란?숫자의 부호 비트는 유지하면서 나머지 비트를 왼쪽 또는 오른쪽으로 이동하는 연산자.산술 시프트에 대한 예시1byte 즉 8bit를 기준으로 비트로 표현한다면 10진수 정수 10을 2진수로 변환하면 [0 0 0 0 1 0 1 0]임. => 시프트 ' [0 0 0 0 1 0 1 0..

C++ 2025.07.15

[C++] is-a/has-a 관계

순서is-a 관계has-a 관계is-a 관계와 has-a 관계의 차이점is-a 관계is-a는 'A는 B이다'일 때 '~이다'와 같다.추상화(형식이나 클래스와 같은)들 사이의 포함 관계를 의미함. 클래스 A가 다른 클래스B의 파생클래스임을 뜻함.타입 A는 타입 B의 명세를 암시하여 타입B의 서브타입이라고 할 수 있음is-a관계를 통해 생성된 클래스 및 객체는 상속 관계에서 둘은 밀접하게 결합됨. => 부모 또는 기저 클래스의 명세에 변경이 발생하면 코드가 손상도리 위험이 있음.has-a 관계has-a는 "A가 B를 가지고 있다"라는 관계이다.구성 관계를 의미하며 한 오브젝트가 다른 오브젝트에 "속한다"를 말함.한 클래스가 다른 클래스의 객체를 멤버 변수로 포함하는 관계has-a 방식으로 생성된 클래스 및 ..

C++ 2025.07.14

[C++] 행동 패턴/전략, 스트래티지 패턴(Strategy Pattern)

순서전략패턴이란?장점단점전략패턴이란?알고리즘을 캡슐화하여 실행 중에 동적으로 교체할 수 있도록 하는 디자인 패턴이다.행동 패턴에 속한 디자인 패턴이다.행동패턴이란?객체나 클래스 사이의 알고리즘이나 책임 분배를 정의하여 복잡한 행동을 관리하고 조정하는데 도움을 주는 패턴한 객체가 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하며 객체 사이의 결합도 최소화에 중점을 둠협력을 관리하여 코드의 유연성과 재사용성을 높이는데 사용됨.장점새로운 전략을 추가하거나 기존 전략을 변경하기 용이하여 코드의 유연성및 확장성을 높임.결합도를 최소화하여 클라이언트 코드가 특정 알고리즘에 종속되지 않도록하여, 필요에 따라 전략을 선택하여 사용할 수 있음.OCP(개방 폐쇄 원칙)을 준수함각 전략이 독립적으로 구현되어 코드의 ..

C++/디자인패턴 2025.07.11

[C++] Iterator 반복자

순서반복자란?주요 기능 및 연산자Iterator 사용법auto 키워드시간 복잡도iterator 반복자란?iterator 반복자는 STL 컨테이너 내부 요소를 순회하는데 사용되는 객체이다.배열의 인덱스를 직접 사용하는 대신, iterator를 활용하면 더 범용적인 코드 작성이 가능함iterator의 역할컨테이너 내 원소 순회원소 삽입, 삭제, 변경반복 구조 최적화iterator의 원리포인트와 유사한 방식으로 작동, 하지만 단순한 메모리 주소가 아닌 컨테이너 요소를 안전하게 조작할 수 있는 인터페이스를 제공함.주의사항iterator가 end()를 초과하여 접근하지 않도록 해야함iterator가 유효한 범위를 유지하는지 신경 써야함iterator를 활용할 때 컨테이너가 변경되면, 무효화된 반복자를 사용하지 않..

C++ 2025.07.10

[C++]Alogorithm헤더파일

순서algorithm 헤더파일이란?주요 알고리즘 함수algorithm 헤더파일이란?앞서 다룬 클래스 템플릿 + 멤버 함수로 구성된 sstream 헤더와는 다르게 algorithm 헤더는 함수 템플릿임 C++ 표준 라이브러리에 포함된 헤더로 범위기반 알고리즘 함수들을 제공함정렬, 검색, 수치 연산, 변환, 집계에 이용함algorithm 헤더 특징템플릿 함수로 구성되어 컨테이너 타입과 무관하게 사용할 수 있음반복자를 사용하여 번위를 지정함주요 알고리즘 클래스, 함수알고리즘 함수들은 클래스 컨테이너(vector, list 등)의 요소에 접근하기 위해 반복자 클래스와 함께 사용함관련 반복자 클래스vector, list, set는 ::iterator 범위를 지정하여 사용함reverse, istream, ostre..

C++ 2025.07.08

[C++] <sstream>헤더파일

순서sstream이란 무엇인가?sstream이 제공하는 주요 클래스sstream이란 무엇인가?C++ 표준 라이브러리의 헤더파일이다.string 기반 stream class들을 제공하여 문자열(string)을 입력/출력 stream처럼 처리할 수 있도록 도와줌sstream이 제공하는 주요 클래스istringstream문자열로부터 입력 스트림을 생성함. istringstream ex)#include #include #include using namespace std;int main() { string data = "123 456 789"; istringstream iss(data); int a, b, c; iss >> a >> b >> c; cout ostringstream출력 ..

C++ 2025.07.04

[C++]객체 지향 프로그래밍 OOP 4가지 특징

순서OOP란?추상화캡슐화상속다형성객체 지향 프로그래밍의 장점.OOP란?OOP는 Object-Oriented-Programming의 약자로 객체 지향 프로그래밍을 의미함.프로그램을 데이터와 그 데이터를 조작하는 함수를 하나의 객체로 묶어 관리하는 프로그래밍 패러다임이다.추상화(Abstraction)객체지향 프로그래밍에서 추상화는 어떤 대상을 구현할 때, 본질적인 특징을 정의하고 정의에 기반하여 대상을 객체로 구현하는 것.추상화를 통해 복잡성을 줄이고, 객체를 더 쉽게 이해하고 사용할 수 있음.캡슐화(Encapsulation)객체의 데이터와 메서드를 하나로 묶어 외부에서 직접 접근하지 못하도록 보호하는 것.캡슐화를 통해 객체의 내부 구현을 숨기고, 외부에 의한 직접적인 변경으로부터 보호할 수 있음.상속(In..

C++ 2025.07.03