개발 공부 57

[JavaScript] call, apply, bind

this를 사용하다 보면 call, apply, bind라는 메서드가 자주 등장한다. 이번에는 이 메서드들에 관하여 설명하겠다. call 모든 함수는 call 메서드를 가지고 있다. 함수의 call 메서드를 호출할 때 인자로 객체를 전달하면 그 객체를 함수의 this에 할당하고 함수를 호출한다. 예시는 다음과 같다. function hello(){ console.log(`Hello ${this}!`); } hello.call('Mike'); // Hello Mike! 다음과 같이 hello라는 함수의 call 메서드를 호출하고 인자로 Mike라는 문자열을 전달하면 hello라는 함수의 this에 Mike가 할당하여 호출함을 확인하였다. 만약 함수가 인자를 전달받아야 한다면 다음과 같이 call 메서드에 ..

[JavaScript] 함수형 프로그래밍(3)

이전 글에서 작성한 코드와 비교했을 때 pipe와 go 함수를 이용하면 가독성이 얼마나 증가하는지 설명하겠다. pipe pipe 함수는 여러 함수를 인자로 받아 함수를 반환하는 함수이다. 이때 반환하는 함수는 객체를 인자로 받아 객체를 첫 번째 함수에 전달하고 결과 값을 반환받아 다음 함수로 전달하며 최종적인 결과값을 반환하는 함수이다. function pipe() { let funcList = arguments; return function (arg) { return reduce(funcList, function (arg, func) { return func(arg) }, arg); } } pipe 함수를 사용하면 이전의 예제를 다음과 같이 작성한다. const userList = [ { age: 10..

[JavaScript] 함수형 프로그래밍(2)

이전 글에서 설명한 내용을 토대로 함수형 프로그래밍으로 작성한 forEach, filter, map, reduce 함수를 설명하겠다. 세 함수 모두 javascript를 사용한다면 익숙한 함수이다. 이 함수들은 공통적으로 배열의 메서드로 존재한다. 함수형 프로그래밍에서는 특정 객체의 메서드가 아니라 함수 자체로 선언하고 사용하므로 다음과 같이 작성한다. forEach forEach 함수는 배열과 유사한 args를 받아 func에 인자로 전달하고 args를 반환하는 함수이다. function forEach(args, func) { let keyList = keys(args); for (let i = 0; i < keyList.length; i++) { func(args[keyList[i]]); } retu..

[JavaScript] 함수형 프로그래밍(1)

함수형 프로그래밍이란 함수형 프로그래밍이란 함수를 조합하여 소프트웨어를 개발하는 방식을 의미한다. 지금까지 주로 사용해왔던 프로그래밍 방식은 객체지향 프로그래밍이었다. 객체 지향 프로그래밍에서는 객체들을 조합하여 소프트웨어를 개발했지만 이번엔 함수를 조합하자는 생각이다. 함수형 프로그래밍의 장점은 순수 함수를 강조하여 오류를 줄이고 순수 함수를 조합하여 모듈화 수준을 높인다는 점이다. 순수 함수와 일급 함수 순수 함수와 일급 함수는 다음의 조건을 만족하는 함수를 의미한다. 함수형 프로그래밍에서는 순수 함수와 일급 함수의 조합을 자주 사용한다. 순수 함수 동일한 input에는 항상 같은 output을 반환한다. 함수의 실행이 프로그램에 영향을 주지 않는다. 일급 함수 변수 안에 함수를 할당할 수 있다. 함..

[HTTP] 커넥션 관리

TCP/IP 모델 데이터를 통신하는 단계와 순서를 명세하는 설계도에는 두 가지 모델이 있는데, OSI 참조 모델과 TCP/IP 모델이다. OSI 참조 모델은 데이터 통신을 7단계로 나누었고 TCP/IP 모델은 4 단계로 나누었다. 현재는 TCP/IP 모델이 표준이 되었고 각 단계에서 사용하는 프로토콜은 다음과 같다. 4계층 애플리케이션계층 HTTP 어플리케이션 사이 신호를 전달하는 방법을 결정 3계층 트랜스포트계층 TCP 전달할 데이터나 전달된 데이터에 필요한 처리를 하는 방법을 결정 2계층 인터넷계층 IP 네트워크(세그먼트) 사이 신호를 전달하는 방법을 결정 1계층 인터페이스계층 Ethernet 한 네트워크(세그먼트) 내에서 신호를 전달하는 방법을 결정 TCP 커넥션 TCP 커넥션은 데이터를 주고받기 ..

[HTTP] HTTP 메세지

HTTP 메세지 HTTP 메세지는 애플리케이션 간에 주고받은 데이터의 블록들이다. 메세지는 시작줄, 헤더 블록, 본문 이렇게 세 부분으로 구성되어 있다. 메세지는 요청 메세지나 응답 메세지가 된다. 요청 메세지는 서버로 요청할 때 보내는 데이터블록이고 응답 메세지는 서버에서 요청에 응답하여 보내는 데이터 블록이다. 시작줄 요청 메세지의 경우 시작줄은 메서드, 요청 URL, 버전으로 구성되어있고 응답 메세지의 경우 버전, 상태코드, 사유구절로 구성되어 있다. 메서드 메서드는 서버가 클라이언트에게 기대하는 동작을 의미한다. 일반적으로는 7가지 메서드가 존재하며 필요에 따라 확장하여 다른 메서드를 정의할 수도 있다. 메서드는 GET, HEAD, POST, PUT, TRACE, OPTIONS, DELETE가 있..

[HTTP] URL과 리소스

URI, URL, URN URI(Uniform Resource Identifier, 통합 자원 식별자)는 서버에 존재하는 리소스의 위치를 가리키는 주소이다. URI에는 두 가지가 있다. URL(Uniform Resource Locator, 통합 자원 지시자)와 URN(Unifrom Resource Name, 통합 자원 이름)이다. 즉 URI는 URL과 URN을 포함한다. URL는 리소스의 정확한 위치를 가리키며 URN는 리소스의 이름을 가리킨다. URN은 URL을 보완하기 위해 나온 개념이다. URL을 사용하면 리소스의 위치가 바뀌었을 때 기존의 URL로 리소스를 찾을 수 없는 문제가 발생한다. 대표적으로 어떤 리소스에 www.tistory.com/123로 접근할 수 있었는데, www.tistory.co..

알고리즘 복잡도와 빅 오 표기법

알고리즘의 복잡도 알고리즘 문제를 풀다보면 작성한 코드의 복잡도가 얼마인지 명시해야할 때가 있다. 복잡도에는 시간 복잡도와 공간 복잡도가 있다. 요즘에는 공간 복잡도에 대한 중요성은 떨어지고 있어 일반적으로 알고리즘에서 복잡도라고하면 시간 복잡도를 의미한다. 시간 복잡도 함수인 알고리즘을 특정 크기의 input을 받아 실행할 때 걸리는 시간의 양을 의미한다. 공간 복잡도 함수인 알고리즘을 특정 크기의 input을 받아 살행할 때 필요한 메모리의 양을 의미한다. 빅 오 표기법 (Big O Notation) 알고리즘에서 빅 오 표기법이란 input의 크기 n이 증가할 때 시간 복잡도 또는 공간 복잡도가 어떻게 증가하는지 구분하기 위해 사용하는 표기법이다. 엄밀한 정의는 수학적이라 알 필요는 없을 듯하다. 알..

[프로그래머스] [3차] n진수 게임

문제 프로그래머스 2018 KAKAO BLIND RECRUITMENT [3차] n진수 게임 https://programmers.co.kr/learn/courses/30/lessons/17687 코딩테스트 연습 - [3차] n진수 게임 N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0� programmers.co.kr 언어 자바스크립트(JavaScript) 접근 방법 문자열 str에 n진수로 변환한 숫자를 문자열로 변환하여 더한다. 이때 문자열 길이가 t*m이 될 때까지 변환한 문자열을 더한다. 문자열의 모든 문자들 중에 p 번째만 따로 뽑아서 새로운 문자열에 더한다...

[프로그래머스] 오픈채팅방

문제 프로그래머스 2019 KAKAO BLIND RECRUITMENT 오픈채팅방 https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 언어 자바스크립트(JavaScript) 접근방법 aciontList은 Action은 유저 행동, Id는 유저 아이디인 객체로 이루어진 배열이다. nickObj은 유저 아이디를 key, 유저의 최근 닉네임을 value로 가지는 객체이다. record를 차례로 탐색한다. 행동이 Ente..