Strategy Pattern여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근점에서 서로 교환 가능하도록 하는 패턴 정리하자면 같은 기능을 하는 하나의 인터페이스를 생성하여 사용 객체에게 주면 그 인터페이스에서 뭘 담아서 사용하든 각기 맡은 다른 전략을 사용하여 client에게 줄 수 있다. 예를 들어 게임에서 캐릭터라는 객체가 있으면 그 객체가 할 수 있는 것은 공격이라는 행동이다. 공격이라는 행동에는 그 캐릭터가 무슨 무기를 들고있는가에 따라 공격이 달라진다. Strategy Pattern에서 중요한 것은 interface를 만들고 그 interface에 어떤 class를 담아 사용객체에게 넘겨 줄 것인지 라고 생각한다. interface가 어떤 기능을 할 것인지 이 기능의 정리가 필요할 듯. 잘..
자바를 활용해서 정수 값을 넣고 출력하는 것을 만들어 보았다. data산출 방식인 Stack과 Queue 두가지 방식을 사용해서 선택하여 숫자를 출력하는 것이다. Queue는 선입선출로 data가 출력된다 Frist In Frist Out(FIFO)으로 먼저 들어간 data가 맨 먼저 나가는 형식이다. 위 그림과 같이 맨 먼저 push된 data A가 맨 첫번째로 pop되는 것을 볼 수 있다. Stack방식은 다음 그림과 같다. Stack은 위 그림처럼 컵과 같다. 맨 처음 들어간 data A는 맨마지막 들어간 C가 나오고 B가 나오고 나서야 맨 마지막에 나올 수 있다. 이러한 방식을 Frist In Last Out(FILO)이라고 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ..
복사생성자(복사하는 기능) → 주로 public 함수 4가지 1. 객체 생성시 매개변수로 객체를 넘겨줄경우. 2. 객체 생성시 객체를 대입할경우. 3. 멤버함수에 매개변수로 객체를 선언할 경우. 4. 멤버함수에서 객체를 리턴할경우. 복사생성자도 생성자임. 객체등록도해주면서 카피를 같이함. C++ 일반적 생성자와 복사생성자가 있음. 클래스에 있는 모든 필드(값)를 전체 카피함. A(const A &aa) { } 얕은 복사(디폴트) → 기본적으로 제공됨. 깊은 복사(개발자가 직접 코딩을 해야한다) → 명시적으로 일일히 작업 해주어야 한다. 언제? 필드를 포인터로 사용했을 경우에는 무조건 깊은 복사를 해야한다. 복사생성자함수 1. 호출시기 1) 객체 생성시 객체를 인자로 줄 경우. A aa; => 생성자호출 ..
C++의 상속은 다중상속이 가능하다. 접근지정자를 이용한 상속방식이 3가지가 있다. 1. private 방식 (has-a) : 2. protected 방식 (has-a) : 요즘은 포함오브젝트 방식을 더 많이 쓴다. 3. public 방식 (Is-a) : 원래 의미 그대로 전달됨. ( java에서 하는 방식 ) class A{ } class B : protected A{ } //상속됨 만약 접근지정자를 지정하지 않으면 class B : A { } 무조건 private로 지정된다. 상속 방식 ( 접근지정자 변환 ) 부모 자식 private 상속 private, protected, public private protected 상속 private, protected, public private, protect..
const는 사용자 캡슐화 목적으로 주로 사용 1. const field : 선언과 동시에 초기화를 해 주어야 하는데 할 수가 없다. 콜론 초기화 기법으로 해줘야한다. 값을 읽기만 가능하다. 2. const method : field의 값을 함수에서 읽기만 가능하게 한다. (쓰기금지) 3. const Object : 고정된 객체 사용 (읽기만 가능) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include using namespace std; class A { const int a; int b; public: A():a(10),b(20) //아래의 생성자초기화 역할을 수행(콜론초기화) { //a= 10; 생성자에서 할수 없다. const 변수는..
static method 1. class를 통틀어서 오직 하나다 2. this pointer가 존재하지 않는다 3. instance field를 사용할 수 없다. 4. class명 :: 메소드() (많이씀, 압도적으로 static인지 알 수 있음)이렇게 사용도 할 수 있고, 객체.메소드() →객체를 만든 후에 가능 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include using namespace std; class A { public: static void disp() { cout
복사생성자(복사하는 기능) → 주로 public 함수 4가지 1. 객체 생성시 매개변수로 객체를 넘겨줄경우. 2. 객체 생성시 객체를 대입할경우. 3. 멤버함수에 매개변수로 객체를 선언할 경우. 4. 멤버함수에서 객체를 리턴할경우. 복사생성자도 생성자임. 객체등록도해주면서 카피를 같이함. C++ 일반적 생성자와 복사생성자가 있음. 클래스에 있는 모든 필드(값)를 전체 카피함. A(const A &aa) { } 얕은 복사(디폴트) → 기본적으로 제공됨. 깊은 복사(개발자가 직접 코딩을 해야한다) → 명시적으로 일일히 작업 해주어야 한다. 언제? 필드를 포인터로 사용했을 경우에는 무조건 깊은 복사를 해야한다. 복사생성자함수 1. 호출시기 1) 객체 생성시 객체를 인자로 줄 경우. A aa; => 생성자호출 ..
복습 int *p = new int; 동적메모리는 할당한 순간에 포인터가 잡아야한다 이 동적 메모리는 사라지지 않는다. delete로 삭제해야 한다. 요즘은 메모리가 커서 옛날처럼 걱정은 없지만, 임베디드같은 작은 컴퓨터를 다루는 곳에서는 주의 해야한다. JAVA의 경우 동적메모리를 할당하면 저절로 지워줌. 객체가 사라질때에는 무조건 소멸자를 불러야 함. 메모리를 할당할때 int *p = new int[1]; 이렇게 할당하면 delete []p; 로 지울 수 있기 때문에 이젠 이렇게 쓰길 권한다. 오버로딩(oveloding) : 동일한 함수명으로 여러개의 함수를 제공. 객체지향은 항상 사용자 기준으로 생각해야한다.(사용자들은 같은 돈이라도 성능이 좋지않으면 구매하지 않는다.) 사용자에게 일관된 서비스를 ..
오버로딩(overloading) : 동일한 함수명으로 여러개의 함수를 제공하는 방법조건1.매개변수의 타입이 달라야 한다.2. 매개변수의 갯수가 달라야 한다. (둘중하나) 리턴타입은 상관 없다. 명시적과 암시적이 있음anci표준에 명시적 오버로딩과 암시적 오버로딩을 하지말라고 정의 되어있다.(근데 실무에서는 쓰인다.) void disp(int a',int b=0,int c=0); 초기값을 준 위치부터 뒤의 위치는 디폴트 인자값을 주어야함위의 예로 a는 초기화 안되었고 b는 되어있음.b이후로는 모두다 초기화를 시켜 주어야 한다. 12345678910111213141516171819202122232425262728293031#includeusing namespace std;void disp(char a,cha..
성적 입출력 프로그램배열로 만드는 것이 과제!하다보니 구조체로 만드는 것이 더 쉬운 것 같아 구조체로 바꿈. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869#includeusing namespace std;struct student{ char name[10]; int score[3]; int total; float avg;}stu;void Input(student **p,int stunum);void Output(student **p,int stunum);void main(){ int num,stunum; student *..
C의 printf는 출력서식을 직접 설정 해 주어야 하지만 C++은 해주지 않아도 괜찮음.세밀한 조정을 하고 싶다면 setw()를 사용하면 된다. #include에 포함되어 있음.출력하는 데이터의 칸을 지정한 수 만큼 정렬 시켜 줌. - 한번에 하나만 가능- 대상앞에 setw()- setfill()dms 공백 대신 빈칸을 사용자가 지정할 수 있는 함수. 한번 설정하면 계속 유지- setbase로 8진수 10진수 16진수 입맛대로 진법을 설정 할 수 있음- setprecision()은 실수 자료형에 유효숫자를 설정하는 함수. 형식 : setw(int num) 사용법 : cout