프로그래밍 공부

프로그래밍 700

카테고리 설명
  • C++에서 class가 생성될 때 기본적으로 만들어지는 것 또한 operator하여, 바꾸어줄 수 있다. class간의 복사, 이동, 대입, 소멸 을 조정하여 class의 값변경을 더 자유롭고 편하게 지정해주는 방법이다. #include using namespace std; class Test { int num1; int num2; public: // 클래스가 만들어졌을 때 기본으로 들어가는 것 // 기본 // 복사 // 이동 // 복사 대입 // 이동 대입 // 소멸 // 기본생성자. 로 취급되어 기본생성자는 사라진다. /*Test(int n1, int n2) : num1(n1), num2(n2) {}*/ Test(int n1, int n2) : num1(n1), num2(n2) {} }; class ..

  • 빌더패턴은 객체를 생성하는 과정을 캡슐화 하고, 객체 생성 과정의 다양한 단계에서 서로 다른 구현을 지원하는 디자인 패턴이다. 빌더패턴은 복잡한 객체를 생성하는 과정을 단순화 하고 유연성을 높여 객체를 생성하는 과정을 다양한 방법으로 구성할 수 있도록 한다. 이러한 빌더 패턴을 사용하는 이유는, 객체 생성 과정이 복잡해진다면 코드가 난잡해지기 때문에, 이러한 객체 생성과정을 더 간소화 하기 위해서 만든다. 예를들어, 객체 생성과정이 복잡할 때, 생성자를 사용하면 생성자의 매개변수가 많아지게 되어 필요없는 함수의 호출이 많아질 수 있고, 이를 관리하기도 어렵다. 또한, 생성자 오버로딩을 사용하여 매개변수 수를 줄이려고 하면 다양한 객체 생성방식을 적용하기 어려워진다. 이러한 문제점을 해결하기 위해 빌더 패..

  • C++에서는 smart_pointer이라는 기법을 활용하여 더 쉽고 간단하게 동적배열 선언 등 다양한 방법으로 사용이 가능하다. smart_pointer를 사용하면 new를 생성해주어도, 어떠한 함수 내부에서 종료되었을 때, 종료자가 스스로를 delete해주기 때문에, 따로 delete해줄 필요가 없어진다. 그럼으로 더 쉽고 간단하게 동적데이터 선언이 가능해진다. 다음은 코드 예시이다. #include class ptr { int x; int y; public: ptr(const int x, const int y) : x(x), y(y) {} auto Get_x() -> const int { return x; } auto Get_y() -> const int { return y; } friend ptr&..

  • 추상 팩토리 패턴( Abstract Factory Pattern ) 은 객체 생성을 추상화하는 디자인 패턴 중 하나로, 서로 관련된 객체의 집합을 생성하기 위한 인터페이스를 제공한다. 이 패턴은 추상화된 팩토리 클래스를 통해 관련된 객체를 생성하며, 각 객체는 추상 클래스나 인터페이스를 상속받아 구현된다. 이를 통해 클라이언트 코드는 실제 객체의 클래스에 대한 정보를 알 필요 없이 추상화된 인터페이스를 통해 객체를 생성할 수 있는 특징이 있다. 장점 유지보수성과 확장성이 높아진다. 클라이언트 코드와 객체 생성코드를 분리하기 때문에 유지보수가 쉬워지고 확장할때 편하다. 코드 의존성을 낮춘다. 코드 자체를 실제로 추가할 일이 크지 않을 수 있기 때문에, 어떠한 항목에 대하여 자세한 코드를 작성하지 않아도 되..

  • C++에서 operator을 활용하여 비교연산자를 오버로딩하고, 이를 활용해서 Class 안에 있는 모든 변수를 비교연산 해줄 수 있다. 보통, 비교연산을 위한 변수가 한개이거나, 모든 변수를 전부 비교해야 할 경우 사용하고, 여러개의 변수를 가지는 Class가 존재하고, 그 변수들 중 한개의 변수만 비교연산이 필요하다면, 그럴때 에는 operator의 사용을 권장하지 않는다. 비교연산자 같은 연산자 오버로딩 방식은, 어떠한 변수나 Class의 전체를 비교하거나 연산하는 방식으로 동작해야 하기 때문에 설계방식에서 벗어나기 때문이다. 다음은 비교연산자를 오버로딩하여 만든 코드 예시이다. 위 코드에서, 연산자 오버로딩을 활용하여 비교연산을 해줄 수 있는것을 볼 수 있다. 값의 변환을 유도하지 않기 때문에, ..

  • 일반적인 프로그래밍은 형식지정자를 사용하여 int나 flaot같은 형식을 지정해준다는 기준 하에 프로그래밍 하게된다. 그러나, 이러한 방식은 코드의 재사용성을 낮추고 객체지향적인 프로그래밍을 만드는데 방해물이 될 수 있다. 그래서 제네릭 프로그래밍 이라는 프로그래밍 패러다임이 등장하였다. 이는 알고리즘과 데이터구조를 타입에 독립적인 방식으로 작성하여, 재사용성을 높이고 코드의 중복을 줄이는 효과가 있다. 예를들어, C++의 STRL에서 vector나 list같은 배열컨테이너는 제네릭 프로그래밍의 대표적인 예시이다. 이러한 컨테이너는 타입에 관계없이 ( vector이나 list같은 타입을 형식에 관계하지 않고 생성시 선언으로 타입을 정해줄 수 있다 ) 정수나 문자열같은 다양한 타입의 데이터를 저장해줄 수 ..