- Today
- Total
목록Languages (24)
개발하는 고라니
최단 경로 알고리즘에서 다익스트라 알고리즘을 공부하는데 '우선 순위 큐'를 이용하면 시간 복잡도를 획기적으로 줄일 수 있다는 방법을 알게되었다. 그래서 우선순위 큐의 간단한 사용법을 알아보고자 한다. PriorityQueue 도로에서 차량의 우선순위를 생각해보면, 보통 먼저 진입하는 차가 먼저 가게 되지만, 구급차 혹은 소방차가 나타나면 모든 차들은 긴급한 차량을 위해 도로를 양보한다. 이런 긴급 차량들은 도로 교통법에 의해 우선 순위를 갖는다. 컴퓨터에서도 우선순위의 개념이 필요할 때가 있다. 예를 들어 네트워크 패킷 중에서도 네트워크 관리와 관련된 패킷은 다른 일반 패킷보다 우선 순위를 갖는다. 우선순위 큐는 이러한 우선 순위의 개념을 큐에 도입한 자료구조이다. 보통 큐는 선입선출(First-In F..
람다식 Programming 언어에서 사용되는 개념으로 익명 함수를 지칭하는 용어이다. 실무적으로 코드의 간결함, 지연 연산을 통한 처리 능력 향상 그리고 기존 순환 관련 코드를 구현하는데 있어 불필요한 부분들을 제거할 수 있다는 점에서 중요하게 다루어진다. # 장점 코드의 간결성 효율적인 람다 함수의 사용을 통해 불필요한 루프의 삭제가 가능하고, 함수의 재활용 여지가 커진다. 필요한 정보만들 사용하는 방식을 통한 퍼포먼스 향상 - 지연 연산을 지원하는 방식을 통해 효율적 증대를 기대할 수 있다. # 단점 모든 원소를 전부 순회하는 경우 람다식이 좀 더 느리다. (어떤 방법으로 만들어도 최종 출력되는 byte code나 assembly code는 단순 반복문보다 몇 단계를 더 거치게 된다) 익명 함수의 ..
StringTokenizer 문자열을 특정 구분자(delim)로 나누어 주는 클래스이다. 메소드와 생성자 모두 몇 개 없어서 금방 익힐 수 있다. 스트림 API 처럼 한 번 사용되고 나면 재사용이 불가능 하다. * Constructor //str을 기본 구분자(\t, \r, \n, \f, " ")로 구분한다. public StringTokenizer(String str) //str을 특정 구분자(delim)으로 구분한다. public StringTokenizer(String str, String delim) //str을 특정 구분자(delim)으로 구분해주며, returnDelims가 //true일 시 구분자도 토큰에 포함하며 //false일 시 토큰에 포함하지 않는다. public StringToken..
Browser에서 Server로 파일을 업로드 할 때, 취지에 맞지 않는 파일을 제한해야 할 때가 있다. 예를 들어 영화 포스터 이미지 파일(jpg, png 등) 만 업로드 해야한다면 방법은 다양할 것이다. 정규식으로 제어할 수도 있고, 서버 단에서 제어할 수도 있다. 이번에는 뷰 단에서 자바스크립트를 이용해 간단한 방법으로 이미지 파일만 전송되도록 한다. Upload 파일 업로드는 HTML의 태그를 이용할 수도 있지만 ajax를 사용하여 데이터를 보낸 후 처리했다. 에 여러 파일을 입력해서 업로드 후 콘솔 로그를 보면 전송한 파일의 정보가 찍힌다. 1111.png와 abc.txt 파일을 업로드 한 결과이다. 위와 같이 File의 정보들을 Javascript 객체에 담아 받아볼 수 있다. 이 중에서 't..
학교 수업에서도 시간관계상 배우지 않고 건너뛴 스트림, 람다 등 내용을 공부해야지... 미루고 미루다 코드로 배우는 스프링 부트 웹 프로젝트 책으로 공부하는데 스트림을 모르면 쓸 수 없는 표현들이 나오길래 이제야 스트림에 대해 알아보는 시간을 갖는다. 자바 스트림은 기존 코드(for, foreach... 등)에 비해 간편하고 명료하며 직관적이지만, 스트림에 대해 알 때의 이야기이다. 또한 스트림은 불필요한 리소스를 줄여준다. # Stream * 파일에 쓰이는 InputStream, OutputStream 같은 I/O 스트림은 아니다 자바 8부터 추가된 자바 스트림은 - 추가된 컬렉션의 저장 요소를 하나씩 참조해 람다식으로 처리할 수 있도록 해주는 반복자이다. - 자바 8 이전에 배열or컬렉션을 다루는 방..
* '코드로 배우는 스프링 웹 프로젝트' 교재를 1.5회(?) 완독 후, 스스로의 힘으로 게시판을 구현해보았다. 물론 미흡한 점이 심심찮게 발견되어 수정의 수정을 거듭했다. 그렇게 3~4주를 보내고 나니 다음엔 무엇을 만들어볼까 하던 차에, 문득 떠오른 것이 있다. '무수히 많은 치킨 가게가 있고, 그 많은 메뉴들을 한 곳에서 모아보면 어떨까?' 그래서 프로젝트라고 하기엔 뭣하지만 원하는 작업을 구현해보며 모르는 부분이 있으면 배워가고, 알던 내용이 있으면 다시 되새기는 목적을 가지고 시도해보려 한다. 먼저 '푸라닭' 사이트에서 메뉴 정보들을 크롤링해 뿌려주는 식으로 시작해보고 결과가 괜찮으면 다른 브랜드들도 시도해보는 식으로 점차 넓혀가겠다. * 개발에 있어 맨 땅에 헤딩을 할 땐 어디서 부터 시작을 ..
# 참조와 복제 > 참조를 알아보기 전 '복제'에 대해 먼저 알아보자. # 복제 > 전자화된 시스템의 가장 중요한 특징은 복제이다. 현실의 사물과 다르게 전자화된 시스템 위의 데이터를 복제 하는데는 비용이 거의 들지 않는다. 바로 이러한 특징이 소프트웨어를 기존의 산업과 구분하는 가장 큰 특징일 것이다. 프로그래밍에서 복제가 무엇인지 알아보자. var a = 1; var b = a; b = 2; console.log(a); // 1 > 결과는 당연하다. 값을 변경한 것은 변수 b이기 때문에 변수 a에 담겨있는 값은 그대로이다. 변수 b의 값에 변수 a의 값이 복제된 것이다. > var b = a; 일 때, a는 1을 가리키고 있다. 이 때 b는 a의 주소를 가리키는 것이 아닌 a의 데이터를 다른 주소에 ..
# == ※ 동등 연산자로 좌항과 우항을 비교해서 서로 값이 같다면 'true' 다르면 'false'가 된다. '='의 개수에 따라 의미가 완전히 달라지니 주의하자. alert(1 == 2) //false alert(1 == 1) //true alert(1 == '1') //true alert("JS" == "JAVA") //false alert("JS" == "JS) //true * typeof 1 -> Number * typeof '1' -> String 인데, true가 나온다. 데이터 타입에 관계없이 Value만 같으면 된다. # === ※ 일치 연산자로 좌항과 우항이 "정확"하게 같을 때 true, 다르면 false가 된다. alert(1 == '1') //true alert(1 === '1')..