전체273 You don't know JS : 타입과 문법, 스코프와 클로저 - 2. 값 2.값 자바스크립트에 내장된 값 타입과 작동방식을 살펴보고 정확하게 사용할 수 있도록 완전히 이해하자. 배열 var a = [1, "2", [3]] a.length; //3 a[0] === 1; //true a[2][0] === 3; //true 주의 구멍난 배열! var a = []; a[0] = 1' // 'a[1]' 슬롯을 건너 띄었다. a[2] = [3]; a[1]; //undefined a.length; //3 배열 인덱스는 숫자인데, 배열 자체도 하나의 객체여서 키/프로퍼티 문자열을 추가할 수 있다. (하지만 배열 length가 증가하지는 않는다)는 점이 다소 까다롭다. var a = [ ]; a[0] = 1; a["foobar"] = 2; a.length; //1 a[".. 2019. 7. 27. You don't know JS : 타입과 문법, 스코프와 클로저 - 1. 타입 1. 타입 자바스크립트에서 타입이라는 말의 의미는 무엇일까? 내장 타입 null undefined boolean number string object symbol 값 타입은 typeof 연산자로 알 수 있고, 해당 연산자의 리턴값은 언제나 String이다. typeof undefined === "undefuned" // true typeof true === "boolean" // true typeof 42 === "number" // true typeof "42" === "string" // true typeof {life: 42} === "object" // true typeof Symbol() === "Symbol" // true 여기서 예외가 존재하는데 바로 Null type null === "ob.. 2019. 7. 26. 함수형 사고 - [6] 전진하라. 함수형 언어의 디자인 패턴 함수형 언어계의 어떤 이들은 디자인 패턴이 개념 자체에 결함이 있기 때문에함수형 프로그래밍이 필요가 없다고 주장한다. 패턴의 좁은정의만 볼 때에는 일리가 있는 말이다. 함수형 프로그래밍에서는 전통적인 디자인 패턴들이 다음과 같이 세 가지로 나타난다. 패턴이 언어에 흡수된다. 패턴 해법이 합수형 패러다임에도 존재하지만, 구체적인 구현방식은 다르다. 해법이 다른 언어나 패러다임에 없는 기능으로 구현된다.(예를 들어 메타프로그래밍을 사용한 해법들은 깔므하고 멋있다. 이런 해법은 자바에서는 불가능하다.) 함수 수준의 재사용 합성(주어진 매개변수와 일급 함수들의 형태로 이루어진다.) 은 함수형 프로그래밍 라이브러리에서 재사용의 방식으로 자주 사용된다. 객체지향프로그래밍에서는 함수를 재사.. 2019. 7. 26. 함수형 사고 - [5] 진화하라. "100개의 함수를 하나의 자료구조에 적용하는 것이 10개의 함수를 10개의 자료구조를 적용하는 것보다 낫다." - 앨런 펄리스 객체지향적인 명령형 프로그래밍 언어에서 재사용의 단위는 클래스와 그것들이 주고받는 메시지이다. 이것들은 클래스도표로 표시된다. 1. 적은 수의 자료구조, 많은 연산자 - 복잡한 자료구조를 직접 만들어야 하는 객체지향에 비해, 함수형은 주요 자료구조(map, set, list)와 거기에 따른 최적화된 연산들을 선호. - 그래서 XML을 파싱 할 때도, 함수형프로그래밍은 자료구조를 따로 만들 필요가 없다. - 스칼라에서 크롤링하는 코드를 보면 신기할 따름 -PlayJson ) 2. 문제를 향하여 언어를 구부리기 대부분의 개발자들은 복잡한 비지니스 문제를 자바와 같은 언어로 번역하는.. 2019. 7. 26. 함수형 사고 - [4] 열심히보다는 현명하게 패러다임을 바꾸면 더 적은 노력으로 더 많은 일을 할 수 있는 득을 보게 된다. 함수형 프로그래밍에서 나타나는 많은 구조들이 그렇다. 흔히 볼 수 있는 문제들을 구현할 때 짜증나던 것들을 제거해준다. 이 장에서는 메모이제이션과 게으름 설명을 보자. 4.1 메모이제이션 메모이제이션은 다음과같은 상황에서 유용하다. 시간이 많이 걸리는 연산을 반복적으로 사용해야 한다는 가정 주어진 매개변수를 사용하여 연산을 할 때마다 그값을 매개변수를 키 값으로 하는 캐시에 저장한다. 후에 이 함수가 같은 매개변수로 호출되면 다시 연산하는 대신에 캐시의 값을 리턴한다. 함수 캐싱은 전형적인 컴퓨터과학의 트레이드오프이다. 이 방법은 좋은 성능을 위해서 메모리를 더 많이 사용한다. 캐싱 방법이 제대로 작동하려면 함수가 순수해야 .. 2019. 7. 26. 00. 운영체제란 무엇인가? 운영체제란 무엇인가? 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 협의의 운영체제(커널) 운영체제의 핵심 부분으로 메모리에 상주하는 부분 광의의 운영체제 커널 뿐 아니라 각종 주변 시스템 유틸리티를 포함한 개념 목적 컴퓨터 시스템의 자원을 효율적으로 관리 컴퓨터를 편리하게 사용할 수 있는 환경을 제공 운영 체제의 분류 동시 작업 가능 여부 단일 작업(Sinlge Tasking) Ex) MS-DOS 다중 작업(multi tasking) UNIX, MS Windows 등에서는 한 명령의 수행이 끝나기 전에 다른 명령이나 프로그램을 수행할 수 있음. 사용자의 수 단일 사용자 MS-DOS, MS Windows 다중 사용자 UNIX, NT server .. 2019. 7. 21. 왜 세마포어(Semaphore)가 생겼나? 왜 세미포어가 생겼나? 프로세스 간 메시지를 전송하거나, 공유메모리를 통해 특정 데이터를 공유하게 되는 경우 문제가 발생할 수 있습니다. 즉, 공유된 자원에 여러 개의 프로세스가 동시에 접근하면서 문제가 발생하는 것으로써 공유된 자원 속 하나의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한해 두어야 하기 때문에, 이를 위하여 고안된 것이 바로 Semaphore 입니다. Cf) 세마포어와 뮤텍스의 차이는? 세마포어는 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것. 뮤텍스는 공유된 자원의 데이터를 한 쓰레드가 접근하는 것을 막는 것. 컴퓨터가 여러 프로그램을 동시에 수행하는 다중 프로그래밍 시스템에서는 프로세스들간의 상호배제와 동기화를 위한 기본적인 연산이 필요하게 되고 세마포어.. 2019. 7. 21. 모니터란 무엇인가? 자바 모니터 자바 스레드 동기화 모델은 "모니터"라는 개념을 적용하고 있다. 모니터에 대해서 먼저 간단하게 살펴보고 자바 동기화에 대해 상세하게 살펴보자. Monitor(모니터)의 개념 하나의 데이터(객체)마다 하나의 모니터를 결합할 수 있으며, 모니터는 그것이 결합된 데이터(객체)가 동시에 두개 이상 의 스레드에 의해 접근 할 수 없도록 막는 잠금(lock)기능을 제공함으로써 동기화를 수행한다는 것이 주된 내용이다. 즉, 데이터(객체)에 모니터를 결합하면 하나의 스레드가 그 데이터를 사용하는 동안에는 다른 스레드들이 그 데이터를 사용할 수 없게 된다. 자바에서는 synchronized 메소드가 선언된 객체와 synchronized 블럭에 의해 동기화되는 모든 객체에 고유한 모니터가 결합이 되어 동기화 .. 2019. 7. 21. 함수형 사고 - [3] 양도하라. 반복처리에서 고계함수로- 클로저란 함수의 예로 표현 def Closure makeCounter(){ def local_variable = 0 return{return local_variable += 1} } c1 = makeCounter() c1() c1() c1() c2 = makeCounter() printIn "C1 = ${c1()}, C2 = ${c2()}" //C1 = 4, C2 = 1 만약 이 부분을 자바로 짠다면 어떻게 될까? import java.util.List; import java.util.ArrayList; // BEGIN counter_demo class Counter { public int varField; Counter(int var) { varField = var; } pub.. 2019. 7. 21. 함수형 사고 - [2] 전환 함수형 코드를 작성하기 위해서는, 함수형 언어인 스칼라나 클로저로의 전환이 필요한 것이 아니라 문제에 접근하는 방식의 전환이 필요하다. 1. 일반적인 예로 말할 수 있는 것은 JVM 왜일까? 우리가 C로 개발할 때는 메모리관리에 신경을 썼었지만, 이제는 JVM, 즉 컴퓨터에게 위임했기 때문. 2. 명령형 처리 명령형 프로그래밍이란 상태를 변형하는 일련의 명령들로 구성된 프로그래밍 방식을 말한다. 전형적인 For루프가 명령형 프로그래밍의 훌룡한 예. 초기 상태를 설정하고, 되풀이할 때마다 일련의 명령을 실행. 명령형 프로그래밍과 함수형 프로그래밍의 차이는, 통상적인 문제와 그에 대한 명령형의 해답을 살펴보면된다. 어떤 이름 목록에서, 한 글자로 된 이름을 제외한 모든 이름을 대문자화해서 쉼표로 연결한 문자.. 2019. 7. 21. 함수형 사고 - [1] 왜 왜 우리는 객체지향에서 함수형 패러다임으로 전환된다고 생각할까? 패러다임의 전환 바로 밑에 예제를 보고 느껴보자. package com.nealford.ft.wordfreq; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; // BEGIN java_word_freq public class Words { private Set NON_WORDS = new HashSet() {{ add("the"); add("and"); add("of"); add("to"); add("a"); add("i"); add("it"); add("in"); add("or"); add("is"); add("d"); add("s"); .. 2019. 7. 18. [북리뷰] 손에 잡히는 VIM 항상 과거를 돌아보라. 그러면 뭔가 배울 수 있을 것이다;. - 폴 새뮤얼슨 살펴볼 기능 명령어 파일 저장하기 :w 종료하기 :q 커서 이동 hjkl 복사 yy 붙이기 p 명령어 취소 u 범위 지정 v 다른 이름으로 저장하기 handlingvim.txt를 다를 이름으로 저장하기 :w hendlingvim2.txt 이렇게 하면 다른 이름으로 저장되고 디렉토리 까지 설정할 수 있음 일반 모드, 입력 모드, 명령행 모드 모드가 필요한 이유? 입력 모드와 일반 모드를 따로 둔 이유는, VIm을 개발할 당시에는 기능을 호출하는 데 메뉴 인터페이스를 사용할 수 없었기 때문에 명령어 설명 a,A a(append)는 현재 커서 위치에서 한 칸 뒤로 이동한 후 입력 모드로 전환됩니다. A는 현재 끝으로 이동한 후, 입력.. 2019. 7. 18. [책 리뷰]실용주의 프로그래머 실용주의 프로그래머 "개발자를 위한 정석적인 자기계발서" 여전히- 현실세계에서 개발자같은 개발자를 찾기란 어려운 듯하다. 내가 말하는 개발자같은 개발자는 비속어로 "뼈발자" 이런 뜻으로 말하고 싶지는 않지만 어느정도 비중을 차지한다고 생각한다. 이 책이 개발자처럼 행동하는데 큰 도움을 줄 수 있다고 믿는다. 이 책에서는 많은 팁을 'tips: nn'으로 개발자는 이런생각을 하는게 좋다 라는 내용을 알려준다. 관련 내용을 살펴보자. 1. 자신의 기술(craft)에 관심과 애정을 가져라 아무리 소프트웨어 개발을 잘 하려는 관심과 애정이 없다면, 그 일을 하는 것에 아무 의미가 없다고 생각한다. 2. 자신의 일에 대해 생각하면서 일하라! 어떤 일을 하든지 자기가 무엇을 하고 있는지 생각하면서 일해라- 모든 개.. 2019. 7. 18. 이전 1 ··· 11 12 13 14 다음