분류 전체보기 169

mvp 디자인 패턴

mvp디자인 패턴은 model, view, presenter 의 줄임말입니다. 기존의 mvc패턴은 간단하다는 장점이 있지만, model과 view의 종속성이 높아 프로그램이 커질수록 관리가 힘든 단점이 있습니다. 이 문제를 보완하고자 만든 디자인이 mvp 패턴입니다. 이 두 패턴의 차이점은 데이터를 view에 데이터를 뿌려주는 존재의 차이입니다. mvc패턴에서 controller가 view를 선택하면 model에서 필요한 데이터를 view에 직접 뿌리는 과정을 사용했습니다. 그 과정에서 model과 view의 종속성이 커지게 됩니다. 이는 유지보수가 힘든 원인이 됩니다. 하지만 mvp패턴은 presenter가 model에서 데이터를 받아 view에 직접 뿌려줍니다. 이 과정에서 model과 view의 종..

jquery 태그 추가

.prepend() - 원하는 곳의 맨 앞에 태그를 추가한다. Greetings Hello Goodbye input .append() - 원하는 곳의 맨 마지막에 태그를 추가한다. Greetings Hello Goodbye input 이 방법을 이용하면 사용자가 이벤트를 주면 그 이벤트에 맞는 페이지를 만들어 줄 수 있다. 예를 들어, 사용자가 물건들의 목록을 원하면 그 목록을 ajax를 사용하여 빠르게 가지고 올 수 있다. DOCTYPE html> Shoping List :root { --ion-safe-area-top: 20px; --ion-safe-area-bottom: 22px; } List function outPut() { // console.log("a"); var param = {}; $...

FRONT END/jquery 2022.02.10

mvc디자인 패턴

mvc패턴은 Model, View, Controller의 약자이다. 이 패턴이 필요한 예시로 만약 spring mybatis을 사용하여 back을 만들었고, front를 jsp로 만든 웹이 있다. 하지만 어느 순간 웹을 앱으로 만들어야 할 순간이 왔다. (하이브리드 앱으로 만들 수 있기도 하다.) 이러한 경우 이 디자인 패턴이 도움이 된다. jsp로 만든 view를 java안드로이드, 플러터, 리엑트 네이티브 등으로 바꿀 수 있다. 그 이유는 model(back)과 view(front)를 controller로 분리하였기 때문이다. 또 간단한 이미지 처리 같은 작업은 model까지 갈 필요 없이 controller에서 처리하여 더 빠른 처리 속도를 보여준다. Model은 데이터를 직접 받아오는 back의 ..

동기적 처리와 비동기적 처리

대부분의 프로그램 언어가 위에서 아래로 쓴 코드를 읽고 중간에 오류가 있으면 오류를 보낸다.(동기적 처리 == 순차적 처리) 여기서 문제가 일어날 수 있다. 만약 내가 웹을 만드는 중 데이터를 처리해야 하는 경우가 발생한다. 코드를 다 만들었는데 원하는 데이터가 안 오면, 그다음 코드로 넘어가지 않아 서버나 화면이 나오지 않는다.(json을 사용하여 정보를 받을 경우 try/catch문을 구현하라고 나오기도 한다. 하지만 try/catch는 다음 코드로 넘어가 데이터가 도착해도 다시 돌아오지 않는다.) 이를 막고자 데이터가 도착하지 않아도, 다음 작업을진행하도록 하는 문법이 비동기적으로 처리하는 문법이다. 데이터가 도착하면 넘어간 부분으로 돌아와 데이터가 필요한 곳에 그 데이터를 집어넣어 페이지를 완성한..

yield return

yield를 알려면 IEnumertor/IEnumerable을 알아야 한다. IEnumertor는 컬렉션에서 값을 반환하는 것이고, IEnumerable이 그 값이다. public interface IEnumerator { object Current { get; } bool MoveNext(); void Reset(); } 지금은 foreach를 사용하기 때문에 이 인터페이스를 구현하여 사용하는 것은 권장되지 않는다. 그렇지만 unity에서 yield return을 사용하기 때문에 그 개념은 알고 있는 것이 좋다. yield return은 IEnumertor/IEnumerable의 간단한 표기이다. 그래서 직접 IEnumertor/IEnumerable을 구현할 필요가 없다. yield return은 비동..

개발일지/unity 2022.02.07

무한 달리기 게임 알고리즘

무한 달리기 게임은 대표적으로 3가지 방법을 쓴다. 1. 캐릭터는 가만히 있고, 배경이 움직인다. 2. 캐릭터가 움직이며 지나온 구역을 지우고 새로운 구역을 만든다. 3. 캐릭터가 움직며 전에 만든 다리를 재활용한다.(이 경우 위의 방법보다 더 빠른 속도가 나온다.) 2번째의 핵심 알고리즘은 for문을 사용하여 생성하거나 update문 안에 yield return을 사용하여 계속 생성한 후 지나온 길은 삭제하거나 보이지 않게한다 3번째의 핵심 알고리즘은 캐릭터가 지나온 거리가 지나는 막대의 최고 x좌표보다 클 경우 큐로 저장해놓은 다리를 마지막에 다시 사용하는 알고리즘이다.

개발일지/unity 2022.01.21

큐(queue)와 스택(stack)

큐와 스택은 둘 다 배열이다. 일반적인 배열과는 다르게 배열에 넣는 순서와 나오는 순서가 정해진 특별한 배열이다. 스택(stack)은 아래의 그림처럼 작용한다. 배열에 넣을 때는 push함수를 쓰고, 뺄때는 pop함수를 쓴다. 여기서 스택의 특별한 성질이 나오는데 LIFO(Last In First Out)구조이다 . 한마디로 마지막에 넣은 것이 먼저나오고 처음 넣은 것이 마지막에 나온다는 것이다.(총의 탄창같이) 큐(queue)는 아래의 그림처럼 나온다. 배열에 넣을 때는 enqueue함수를 쓰고, 빼낼 때는 dequeue를 사용한다. 큐는 FIFO(First In First Out)구조로 처음에 넣은것이 처음으로 나온다.(종이컵 디스펜서처럼) 처음에는 이 그림처럼 위에서 아래로 또는 오른쪽에서 왼쪽으로..

CORS오류 해결

웹의 프론트 엔드를 대발하는 중 프론트에서 데이터를 받아 와 정보를 뿌려야 하는 일이 있었는다. 하지만 요청을 해도 그 요청의 리턴값이 안 나온다. 그래서 개발자 모드로 콘솔을 봤더니 cors오류를 해결하라고 메시지를 보냈다. 교차 출처 리소스 공유(Cross-origin resource sharing, CORS), 교차 출처 자원 공유는 웹 페이지상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있게 허용하는 구조이다. 웹페이지는 교차 출처 이미지, 스타일시트, 스크립트, iframe, 동영상을 자유로이 임베드할 수 있다. 특정한 도메인 간(cross-domain) 요청, 특히 Ajax 요청은 동일-출처보안정책(SOP)에 의해 기본적으로 금지된다. 출처 : https..

배열에서 LINQ사용

LINQ는 마이크로소프트 사에서 만든 메모리DB이다. 이는 하드디스크에 저장된 일반 DB와 달리 빠른 속도가 장점이다. 하지만 그 결과값을 출력해야 한다. 예를 들어, 여기 2차원 배열이 있다. int[,] table = new int[2, 3]; //c#에서는 [,] 배열과 [][] 배열은 다른 배열이다. table[0, 0] = 1; table[0, 1] = 2; table[0, 2] = 3; table[1, 0] = 4; table[1, 1] = 5; table[1, 2] = 6; for(int i = 0; i

개발일지/c# 2022.01.12

c# windowForm web browser version up(C# 브라우저 버전 올리기)

c# 을 사용해 윈도우 프로그램을 만들고 있다가 예상치 못한 문제를 만났다. 기본적으로 윈도움 폼에서 제공하는 web browser의 버전은 ie8버전이었다. (컴퓨터에 따라 다를 수 있다.) 그래서 html5와 최신 css를 이용한 웹페이지가 안 된다. 하필 프로그램의 개발은 거의 끝난 상황에서 윈도우에서 재공하는 webview2를 이용해 함수를 고칠 수도 없었다. 그래서 버전을 올려야한다는 결론이 나왔다. 만약 이러한 문제를 격는 사람이 있을 수 있어 글을 적는다. namespace IEVersionUp { public partial class Form1 : Form { private const string InternetExplorerRootKey = @"Software\Microsoft\Inter..

개발일지/c# 2022.01.06