함수와 일급 객체 1. 일급 객체 다음의 조건을 만족하는 객체를 일급 객체라고 한다. 무명의 리터럴로 생성할 수 있다. 즉, 런타임에 생성 가능 변수나 자료구조 (객체, 배열 등)에 저장할 수 있다. 함수의 매개변수에 전달할 수 있다. 함수의 반환값으로 사용할 수 있다. 자바스크립트의 함수는 다음 예제와 같이 위의 조건을 모두 만족하므로 일급객체이다. //1. 함수는 무명의 리터럴로 생성할 수 있다. //2. 함수는 변수에 저장할 수 있다. const increase = function(num){ return ++num } const decrease = function(num){ return --num } // 2. 함수는 객체에 저장할 수 있다. const predicates = {increase, d..
1. 개요 대망의 계획했던 HTTP 마지막..! 챕터이지만 이 부분, 내용이 상당히 많다. 기본적인 헤더 정보에서 시작해, 캐시와 조건부 헤더, 상태 코드에 따른 리다이렉션 location이나 Allow 등도 헤더와 관계되어 있고, 심지어 우선순위도 헤더 정보에 들어가 있어 전부 설명할 수 있을지 모르겠다. 선뜻 글을 시작하기 두렵지만 일단 차근차근 함께 알아가보자. 2. HTTP 헤더 개요 2.1 HTTP 직접 확인하기 HTTP 헤더를 직접 확인하는 방법은 다음과 같다. 1. 아무 웹 페이지나 들어간 후 [마우스 오른쪽 클릭] - [검사]를 누른다. 보통 이런 화면이 오른쪽에 뜰 텐데, 여기서 빨간 네모 박스 "Network"를 누른다. 그럼 이런 화면이 뜨는데, 여기 내용물들 중 아무거나 클릭하면 이..
생성자 함수에 의한 객체 생성 일반적으로 객체 리터럴 방식으로 객체를 많이 생성하지만, 생성자 함수를 통해서도 객체를 생성할 수 있다. 1. Object 생성자 함수 new 연산자와 함꼐 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환한다. 빈 객체를 생성한 이후 프로퍼티 또는 메서드를 추가하여 객체를 완성할 수 있다. const person = new Object() person.name = "lee" person.hello = function(){ console.log("hello world") } console.log(person) // { name: 'lee', hello: [Function (anonymous)] } person.hello() // hello world..
맵(map) 1. 맵이란 슬라이스나 배열은 데이터를 저장하는 자료구조이다. 그러나, 이들의 가장 큰 단점은 인덱스로만 검색을 해야한다는 것이다. 만약 내가 원하는 데이터를 KEY-VALUE 형식으로 가지고 오고싶으면 어떻게 해야할까?? 가령, 가수를 검색한다고 하면 key는 ph1이고 노래는 value일 것이다. 배열이나 슬라이스로 저장되어 있다면 모든 자료구조를 박박뒤져가며 key가 일치하는 데이터를 가져와야 할 것이다. 그러나, 이는 매우 불편하고 성능상의 문제도 치명적이다. 이에 따라 map이라는 자료구조가 존재하게 된 것이다. 맵은 key와 value로 이루어진 자료구조로 자신이 원하는 타입의 key로 값을 가져오는 방식이다. 2. map 선언 map을 선언하는 방법은 map이라는 키워드를 사용함..
슬라이스 ( slice ) 1. 슬라이스란? go에서는 값을 추가하여 확장할 수 있는 데이터 구조가 있는데, 이를 슬라이스라고 한다. 배열과 마찬가지로 슬라이스도 복수 개의 원소로 이루어져 모든 원소는 동일한 타입을 갖는다. 그리고 핵심적인 것은 슬라이스는 배열과 달리 슬라이스 끝에 원소를 추가할 수 있다는 것이다. 2. 슬라이스의 선언과 초기화, 할당 슬라이스의 선언은 배열과 다를 바 없다. 단지 배열의 선언에서 사이즈를 안써주면 슬라이스가 되는 것이다. var 슬라이스이름 []타입 타입 앞에 있는 [] 에 사이즈를 꼭 비워주면 슬라이스가 된다. 그러나, 슬라이스는 배열과 같이 []타입{값,값,...}으로 초기화할 수 없고 make(타입, 사이즈) 를 이용해야 한다. make(타입, 사이즈) 에서 사이..
GO에서의 배열 1. 배열 선언 지난번 포인터 변수를 선언했을 때 재밌었던 것은 변수의 타입 앞에 *(에스테리스크)를 썼다는 것이다. var pIntValue *int; 배열 역시도 마찬가지이다. 결국 배열의 사이즈를 나타내는 []을 변수 타입 앞에 써주기만 해주면 되는 것이다. var 배열이름 [사이즈]타입 다음과 같이 선언해주면 되는 것이다. 그럼 사용방법을 한번 보도록 하자 package main import "fmt" func main() { var array [10]string array[0] = "hello" array[1] = "world" fmt.Println(array[0]) // hello fmt.Println(array[1]) // world } 2. 배열 리터럴 배열이 가질 값을 미..
이 글은 REST API Tutorial의 REST Resource Naming Guide 글을 번역해 작성한 글입니다. 최대한 원본을 유지하겠으나, 중간에 제가 읽었을 때 모르는 것 또는 이해가 안 되는 부분은 파란색 글씨로 적어두니 참고 바랍니다. REST 리소스 네이밍 가이드 여기서 REST란, 웹에 존재하는 모든 자원(이미지, 동영상 등)에 고유한 URI를 부여해 활용하는 방법론을 의미합니다. REST 상에서, 주요 데이터들은 리소스(자원)이라 부른다. 강력하고 일관된 REST 리소스 네이밍 전략을 사용하는 것은 장기적으로 봤을 때 가장 좋은 선택 중 하나가 될 것이다. 리소스는 싱글톤 또는 컬렉션이 될 수 있다. 예를 들어, customers는 컬렉션 리소스이고, customer는 싱글톤 리소스..
package 1. 패키지란? 패키지는 유사한 기능을 수행하는 코드들의 집합이다. fmt, strings 등도 모두 패키지이다. 코드의 일부가 여러 프로그램 간에 공유되는 경우 코드를 패키지로 분리하는 것을 고려해 볼 수 있다. 그러나, golang의 패키지 시스템은 자바나 c/c++처럼 그렇게 간단하지는 않다. 일단, GOPATH와 GOROOT에 대해서 알아보자 2. GOPATH, GOROOT GOROOT go를 설치했을 때 Go관련 실행 파일, sdk 등이 위치한 곳으로, 이곳에 파일을 위치하면 go파일들은 모두 참조할 수 있다. GOPATH bin, pkg, src 폴더가 위치하는 path로 go get 명령어를 통해 받은 패키지나 라이브러리, 소스파일이 위치하는 곳이다. 즉, ide를 통해서 go..