전체 글 792

4. Factory Method Pattern(팩토리 메소드 패턴)

Factory Method Design Pattern(팩토리 메소드 패턴) Define 팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다. 팩토리 메소드패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이다. Structure Creator추상 클래스에서 객체를 만들기 위한 메소드, 즉 팩토리 메소드를 위한 인터페이스를 제공. 실제 팩토리 메소드를 구현하고 제품(객체 인스턴스)를 만들어내는 일은 서브클래스에서만 할 수 있다.사용하는 서브클래스에 따라 생산되는 객체 인스턴스가 결정 Advantage - 객체의 생성을 한군데서 관리할 수 있다. - 동일한 인터페이스 구현으로 새로운 객체가 추가되더라도..

3. Decorate Pattern(데코레이트 패턴)

Decorator Design Pattern(데코레이터 패턴) Define 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다. Structure- 데코레이터(OptionalWrapper)의 슈퍼클래스(Interface)는 자신이 장식하고 있는 객체(CoreFunctionality)의 슈퍼클래스와 같다. Example) Advantage- 클래스의 기능들이 동적으로 변경될 소지가 있을 때 사용- 클래스에 동적으로 추가하는 기능들이 앞으로도 더 추가될 수 있을 때 사용- 클래스에 기능들을 여러개로 조합 될 때 미리 정의해두기 너무 많은 클래스가 생성되므로, 즉시 생성이 가능하게 할 때 사용- 한 객체를 여러개의 데코레이터로..

2. Observer Pattern(옵저버 패턴)

Observer Design Pattern(옵저버 패턴) Define 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many)의존성을 정의 Structure- Subject(주제) : 객체에서 옵저버를 등록하거나 옵저버 목록에서 제거할 수 있다. 또한 모든 옵저버에게 연락을 위한 메소드가 있다.- Observer : 옵저버가 될 가능성이 있는 객체는 반다스 observer인터페이스를 구현해야 한다. 이 인터페이스에는 주제의 상태가 바뀌었을 때 호출되는 update()메소드만 존재한다.- ConcreteObserver(ViewOne,ViewTwo) : Observer인터페이스를 구현하면 무엇이든 옵저버 클래스가 될 수 있다. ..

1. Strategy Pattern(전략패턴)

Strategy Design Pattern(스트래티지/전략패턴) Define- 알고리즘군을 정의하고 각각을 캡슐화하여 교환할 수 있도록 만든다. 전략패턴을 사용함으로써 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. Structure - Strategy(전략) : 전략을 이용하기 위한 인터페이스를 결정,- ConcreteStrategy(ImplementationOne, ImplementationTwo) : Strategy의 인터페이스를 실제로 구현, 실제 전략(알고리즘)을 프로그래밍한다.- Context(문맥) : Context는 Strategy를 이용하는 역할, ConcreteStrategy의 인스터스를 가지고 있으며 그것을 이용. Advantage- 코드중복을 줄일 수 있다.- 실행 시 행동을 바..

분할정복(Divide and Conquer) - 2. 병합정렬

병합정렬은 전체 원소를 하나의 단위로 분할한 후 분할한 원소를 다시 병합하는 정렬방식이다. 병합정렬 작동 순서1. 정렬한 데이터 집합을 반으로 나눈다.2. 나누어진 하위 데이터 집합의 크기가 2이상이면 이 하위 데이터 집합에 대해 1을 반복한다.3. 원래 같은 집합에서 나뉘어져 나온 하위 데이터 집합 둘을 병합하여 하나의 데이터 집합으로 만든다. 단 병합할 때 데이터 집합의 원소는 순서에 맞춰서 정렬한다.4. 데이터 집합이 다시 하나가 될 때까지 3을 반복한다. 5, 1, 6, 4, 8, 3, 7, 9, 2의 데이터를 정렬한다고 할 때 다음의 과정을 거쳐서 정렬을 한다.먼저 알고리즘의 1-2 과정을 반복해 데이터 집합을 나눈다.파란색 블록은 중간의 기준점을 의미 분할을 끝낸 뒤에는 '정복'을 수행, 합칠..

분할정복(Divide and Conquer) - 1. 개념

분할정복이란?문제를 더 이상 나눌 수 없을 때까지 나누고, 이렇게 나누어진 문제들을 각각 풂으로써 결국 전체 문제의 답을 얻는 알고리즘 분할 정복의 과정 1. 분할(Divide) : 문제가 분할이 가능한 경우, 2개 이상의 하위 문제로 나눕니다. 2. 정복(Conquer) : 하위 문제가 여전히 분할이 가능한 상태라면 하위 집합에 대해 1-을 수행합니다. 그렇지 않다면 하위 문제를 푼다. 3. 결합(Combine) : 2과정에서 정복된 답을 취한다. 분할정복법은 어떤 것에 적용하는가? 1. 문제를 작게 쪼개는 것이 가능한가?(Divide) 2. 쪼개진 문제들을 조합하여 문제의 답을 효율적으로 구할수 있는지(Merge & Conquer)

1. 웹프로그래밍 기초

1. 웹프로그래밍 기초- 웹 어플리케이션 : 웹 기반 어플리케이션- 웹 브라우저에 서비스를 제공하기 위해 필요로 하는 구성 요소들 구성 요소 역할 주요 제품 웹 서버 - 웹브라우저의 요청을 받아서 결과를 웹브라우저에 전송, 만약 처리가 필요하면 어플리케이션 서버와 프로그램을 직접 호출 - 정적인 HTML, 이미지, CSS,Java Script 제공시 사용 아피치, nginx 등 어플리케이션 서버 게시글 목록, 로그인 처리와 같은 기능을 실행, 그 결과를 웹 서버에 전달 Tomcat, JBoss 데이터베이스 웹 어플리케이션이 필요로 하는 데이터 저장 Oracle, MySQL, MSSQL 웹 브라우저 웹 서버에 서비스 실행 요청, 웹 서버의 처리결과를 보여준다 인터넷, 구글크롬, 파이어 폭스 - 정적인 HT..

MFC 오목만들기 3_ 마우스 이벤트 받기

바둑판을 터치하면 색깔 별로 바둑알이 그려지는 이벤트를 만들어보자. 1. 우선 턴을 관리할 bool형 변수를 추가하여 턴을 구분하게 한다.나중에 true이면 흰색돌, false이면 흑색돌이 그려지게 한다. 다이얼로그 대화상자에서 우측버튼을 클릭한 뒤, 변수 추가버튼을 누릅니다. 다음 대화상자가 뜨게 되면, 아래의 내용과 같이 입력해 줍니다. 메인 다이얼로그에서 우측버튼을 클릭 후 '클래스마법사'에서 '메시지'탭을 선택한다. 여러가지 메시지가 지정되있는 것을 확인할 수 있다. 이중 마우스 왼쪽 이벤트에 대해 작성할 것이니 'WM_LBUTTONDOWN'을 선택 후 처리기 추가 버튼을 클릭 작성된 OnLButtonDown()함수부분에 다음의 코드를 추가한다. void CMFC_OMOKDlg::OnLButton..

MFC 오목만들기 2_ 오목판 그리기

1. 오목판을 그릴 함수 추가 - 다이얼로그에서 우측버튼 '클래스마법사'실행 -> '메서드'탭에서 메서드 추가 버튼 클릭 함수추가 마법사 창에서 다음과 같이 반환형이 void형이고 매개 변수가 없는 DrawBack()함수를 생성한다. 2. 생성된 함수에 다음의 소스코드를 넣는다//그래픽 작업을 할 윈도우 영역설정 CClientDC dc(this); //Pen으로 테두리, Brush로 면 색을 갈색으로설정 CPen MyPen(PS_SOLID, 0, RGB(206, 103, 0)); dc.SelectObject(&MyPen); CBrush MyBrush(RGB(206, 103, 0)); dc.SelectObject(&MyBrush); //설정한 색으로 사각형 영역 그리기 dc.Rectangle(10, 10,..

MFC 오목만들기 1_ 프로젝트 생성, 메뉴만들기

1. 프로젝트를 새로 생성한 후 MFC응용프로그램 선택, 다이얼로그 기반을 선택 후 완료 선택 2. 다이얼로그에 메뉴띄우기 먼저 프로젝트에서 우측버튼 추가->리소스를 선택한다. 다음과 같은 창이 뜨면 'Menu'를 선택하고 새로만들기 클릭. 원하는 메뉴 목록을 구성시킨다. 저같은 경우에는 File- Open, Save, Exit를 우선적으로 넣고 생성 마지막으로 다이얼로그와 메뉴를 연결해봅시다.! 다이얼로그 속성창에서 'Menu' 란을 방금 만든 메뉴의 이름을 선택하고 실행하면 끝! 3. 이제 만들어놓은 메뉴 버튼들이 기능을 하게 하면 된다. 메뉴가 있는 IDR_MENU1 화면으로 돌아간 뒤 'Exit' 버튼 오른쪽 버튼 클릭 -> 이벤트 처리기 추가 선택 'COMMAND' , '생성한 Dlg'를 선택 ..

SyntaxHighlighter 이용해서 코드 포스팅하기

1. SyntaxHighlighter 다운로드 받기 http://alexgorbatchev.com/SyntaxHighlighter/download/ 위의 링크에서 최신버전을 다운받고 압축을 푼다. 2. 다운받은 파일 업로드 티스토리에서 로그인-> 관리 -> HTML/CSS 편집 -> 파일업로드 들어가셔서 styles, scripts 폴더 안에 모든 파일을 업로드 한다. 3. HTML/CSS탭으로 가서 와 사이에 다음 내용을 삽입한다. 4. 글쓸 때 html모드에서 다음 내용을 코드부분에 입력해주면 된다. //CODE부분 다음과 같이 나오는 것을 확인! #include int main() { return 0; }

WPF ColorAnimation

1. 색을 변경할 브러시 생성, 이름 등록 SolidColorBrush mySolidColorBrush = new SolidColorBrush(Colors.Blue); this.RegisterName("MySolidColorBrush", mySolidColorBrush); 2. 만들어 놓은 Path에 Brush 설정 mainPath.Fill = mySolidColorBrush; 3. 칼라 애니메이션 설정 //칼라애니메이션 설정 ColorAnimation myColorAnimation = new ColorAnimation(); myColorAnimation.From = Colors.Blue; myColorAnimation.To = Colors.Red; myColorAnimation.Duration = ne..

WPF Storyboard Animation_마우스 진입했을 때 애니메이션 설정

//스택패널 생성 후 여백 20 설정 StackPanel myStackPanel = new StackPanel(); myStackPanel.Margin = new Thickness(20); //애니메이션을 설정할 사각형 설정 Rectangle myRectangle = new Rectangle(); myRectangle.Name = "MyRectangle"; myRectangle.Width = 100; myRectangle.Height = 100; // 새로운 NameScope생성 후 등록 NameScope.SetNameScope(this, new NameScope()); this.RegisterName(myRectangle.Name, myRectangle); //파랑색 설정 SolidColorBrush ..

WPF 뷰에서 fadein, fadeout 효과주기(코드)

1. Rectangle 객체 생성하기 //StackPanel 생성 후 여백 10 설정StackPanel myPanel = new StackPanel(); myPanel.Margin = new Thickness(10); //사각형 객체 생성 , 이름 = myRectangle, Rectangle myRectangle = new Rectangle(); myRectangle.Name = "myRectangle"; this.RegisterName(myRectangle.Name, myRectangle); //가로 100, 세로 100, 색 파랑 myRectangle.Width = 100; myRectangle.Height = 100; myRectangle.Fill = Brushes.Blue; //패널의 하위 객체로..

error LNK 1123: COFF로 변환하는 동안 오류가 발생했습니다. 파일이 잘못되었거나 손상되었습니다.

새로 포맷을 하고 비주얼 스튜디오를 실행, 아래와 같이 이상한 오류가 계속 나온다 ㅠ error LNK 1123: COFF로 변환하는 동안 오류가 발생했습니다. 파일이 잘못되었거나 손상되었습니다. 무슨 오류인가 했더니 Visual Studio 2010 서비스팩1으로 작업한 프로젝트를 서비스팩1이 없는 Visual Studio 2010로 실행하니 발생하는 오류라고 하더군요 해결방법은 첫번째 https://www.microsoft.com/ko-kr/download/details.aspx?id=23691 위 링크로 들어가셔서 서비스팩 1을 다운로드 받으시거나 두번째 방법으로는프로젝트 속성 -> 매니페스트 도구 -> 입력 및 출력 매니패스트 포함을 아니오로 설정 후 적용하면 해결!