994 posts
자바8: 람다 1부 - 람다식, 타입 추론, 어휘 범위

자바8: 람다 1부 - 람다식, 타입 추론, 어휘 범위

본 포스팅는 오라클 웹사이트에 Ted Neward가 기고한 Java 8: Lambdas, Part 1를 번역하였습니다. 자바8은 그런한 코드 블록을 쉽게 작성하게 하기위해 설계된 몇몇 새로운 언어 기능들을 도입합니다. 그 중에서 가장 중요한 기능은 구어체로 클로저또는 익명 함수라고 일켣는 람다식입니다. (클로저라고 불리는 이유는 잠시 후 논의할 것입니다.) 이것들에 하나 씩 다뤄봅시다. 람다식 람다식은 기본적으로 나중에 실행하는 메서드의 구현을 간결하게 기술하는 방법에 불과합니다. 예를 들어 그러므로 일람 2와 같이 Runnable

자바8: 람다 1부 - 서문, 배경

자바8: 람다 1부 - 서문, 배경

본 포스팅는 오라클 웹사이트에 Ted Neward가 기고한 Java 8: Lambdas, Part 1를 번역하였습니다. 자바8의 람다 표현식 알아보기 자신이 선택한 프로그래밍 언어나 플랫폼의 새로운 출시 소식보다 소프트웨어 개발자를 흥분시키는 일이 있을까? 자바 개발자들도 예외는 아니다. 사실, 오히려 자바 개발지들 더욱 새로운 출시에 대해 간절했을지도 모릅니다. 왜냐하면 자바를 만들었던 Sun이 그랬던 것 처럼 자바도 쇠퇴의 길을 걷지 않을까 생각했던 게 그리 오래 전 일이 아니기 때문이죠. 죽을 고비를 겪고 나면 다시 주어진 삶

자바스크립트 배열 기본 사용법

자바스크립트 배열 기본 사용법

배열을 사용하는 이유? 3개의 과일 이름을 변수에 저장하려면 다음과 같이 3개의 변수를 사용할 것이다. 하지만 만약에 저장한 과일 이름이 300개라면? 위와 같이 일일이 하나 하나의 변수에 저장하기 힘들 것이다. 배열을 이용하면 하나의 변수에 여러 가지 값을 저장할 수 있고, 색인(Index)을 통해 이 값에 접근할 수 있다. 새로운 배열 생성 하기 기본적으로 대괄호 기호인 배열 리터럴(literal)을 이용해서 배열을 생성한다. 배열 리터럴 내에서는 공백이나 줄바꿈은 중요하지 않으므로 각 엘리먼트의 길이기 길 경우 가독성을 위해

mkdir 명령어 사용법: 디렉터리 만들기의 기본기

mkdir 명령어 사용법: 디렉터리 만들기의 기본기

터미널을 열고 새 프로젝트를 시작할 때 가장 먼저 치는 명령어가 뭘까요? 아마 mkdir일 겁니다. 이름 그대로 make directory, 뒤에 이름만 붙이면 끝이라 딱히 배울 게 없어 보이는데요. 그런데 막상 쓰다 보면 mkdir: project/src: No such file or directory 같은 메시지에 한 번쯤 막힙니다. 만들라고 시켰는데 없다니, 무슨 소리인가 싶죠. 🤔 셸 스크립트에 mkdir을 넣었다가 두 번째 실행부터 에러가 터지면서 스크립트가 죽는 경험도 흔합니다. 이 글에서는 mkdir의 기본 사용법에서

셸 설정 파일 총정리: .bashrc, .zshrc, .profile의 차이

셸 설정 파일 총정리: .bashrc, .zshrc, .profile의 차이

터미널 환경을 설정하다 보면 .bashrc에 넣으라는 곳도 있고, .bash_profile에 넣으라는 곳도 있고, .zshrc에 넣으라는 곳도 있습니다. 비슷비슷한 이름의 파일이 왜 이렇게 많은 건지, 도대체 어디에 뭘 넣어야 하는 건지 헷갈리죠. 사실 이 파일들은 각각 로드되는 시점이 다릅니다. 그래서 PATH 환경 변수를 설정하든, Oh My Zsh 플러그인을 추가하든, Starship 프롬프트를 초기화하든 적절한 파일에 넣어야 제대로 동작합니다. 이 글에서는 Bash와 Zsh의 설정 파일이 각각 언제 로드되는지, 어떤 파일에

PATH 환경 변수 완벽 이해하기

PATH 환경 변수 완벽 이해하기

터미널에 git이라고 치면 Git이 실행되고, python이라고 치면 Python이 실행됩니다. 그런데 이 프로그램들이 디스크 어딘가에 파일로 존재할 텐데, 운영체제는 어떻게 그걸 찾아서 실행하는 걸까요? 🤔 이걸 가능하게 해주는 게 바로 PATH 환경 변수입니다. 개발 환경을 셋업하다 보면 "PATH에 추가하세요"라는 안내를 자주 보게 되는데, 정확히 뭘 어디에 추가하라는 건지 모호하게 느껴질 때가 있죠. Homebrew를 설치할 때도, Mise를 설정할 때도, pyenv나 nvm을 쓸 때도 PATH 설정이 빠지지 않습니다. 이

macOS 디렉토리 구조 이해하기

macOS 디렉토리 구조 이해하기

macOS로 개발하고 계신 분들, 터미널에서 ls /를 실행해보신 적 있으신가요? Linux를 써봤다면 어딘가 익숙하면서도 좀 다르다는 느낌을 받으실 텐데요. bin, usr, etc 같은 친숙한 이름들 사이에 Applications, Library, System 같은 macOS만의 디렉토리가 섞여 있기 때문입니다. macOS가 BSD Unix를 기반으로 만들어진 운영체제라서 그런 건데요. Unix의 전통적인 디렉토리 구조를 계승하면서도 GUI 중심의 사용자 경험을 위해 Apple만의 디렉토리를 추가한 거죠. Unix/Linux 디

Unix/Linux 디렉토리 구조 이해하기

Unix/Linux 디렉토리 구조 이해하기

터미널을 열고 ls /를 입력해본 적 있으신가요? bin, etc, usr, home 같은 디렉토리들이 주루룩 나오는데, 처음 보면 이게 다 뭔지 좀 막막하죠. Windows에서는 C:Program Files, C:Users 같은 이름만 봐도 대충 뭘 하는 폴더인지 짐작이 가는데, Unix/Linux의 디렉토리 이름들은 /etc니 /usr니 하는 약어투성이라 직관적이지 않습니다. 사실 이 디렉토리 구조는 1970년대 Unix 시절부터 내려온 것인데요. 수십 년간 다듬어지면서 나름의 논리적인 체계를 갖추고 있습니다. 이 글에서는 Li

동기화 (Synchronization)

동기화 (Synchronization)

본 포스팅는 오라클 자바 튜토리얼의 Synchronization와 Thread Interference, Memory Consistency Errors, Synchronized Methods, Intrinsic Locks and Synchronization, Atomic Access를 번역하였습니다. 스레드는 주로 필드들이 가리키고 있는 객체 참조를 공유함으로써 서로 통신합니다. 이는 굉장히 효율적 통신 방법이지만, 스레드 간섭(thread interference)과 메모리 일관성 오류(memory consistency errors)

자바 스레드 Sleep & Intterupt & Join

자바 스레드 Sleep & Intterupt & Join

본 포스팅는 오라클 자바 튜토리얼의 Pausing Execution with Sleep와 Interrupts, Joins, The SimpleThreads Example를 번역하였습니다. Sleep으로 실행 중지하기 Thread.sleep() 메소드는 현재 스레드가 일정 기간동안 실행을 중지시킵니다. 이것은 해당 애플리케이션 또는 시스템 상에서 돌고 있는 다른 애플리케이션 내의 다른 스레드들에게 프로세서를 이용 가능하도록 만들기 위한 효율적인 방법입니다. sleep() 메소드는 다음 예제와 같이 속도 조절을 위해서도 사용될 수 있습

자바 스레드

자바 스레드

본 포스팅는 오라클 자바 튜토리얼의 Thread Objects와 Defining and Starting a Thread를 번역하였습니다. 스레드 객체 모든 스레드는 Thread 클래스의 인스턴스와 관계를 갖습니다. 동시 애플리케이션(concurrent application)을 개발하기 위해서 스레드 객체를 사용하는데는 두 가지 기본 전략이 있습니다. 스레드의 생성과 관리를 직접 제어하기 위해서, 애플리케이션이 비동기 작업이 필요할 때 마다 단순히 Thread 클래스의 인스턴스를 만들 수 있습니다. 응용 프로그램으로 부터 스레드 관리

프로세스와 스레드

프로세스와 스레드

본 포스팅는 오라클 자바 튜토리얼의 Processes and Threads를 번역하였습니다. 동시 프로그래밍(Concurrent Programming)에는 프로세스와 스레드, 이 두가지 기본 실행단위가 있습니다. 자바 프로그래밍 언어에서는 동시 프로그래밍은 주로 스레드와 관련이 있지만 프로세스 또한 중요합니다. 컴퓨터는 보통 여러 개의 활성화된 프로세스와 스레드를 가지고 있습니다. 이것은 심지어 동시에 하나의 스레드 밖에 실제로 처리할 수 없는 싱글 코어를 가진 시스템에서도 마찬가지입니다. 싱글 코어의 처리 시간은 운영체제의 시분활

자바: Thread 클래스와 Runnable 인터페이스

자바: Thread 클래스와 Runnable 인터페이스

자바에서 스레드를 작성하는 2가지 방법에 대해서 알아보겠습니다. Thread 클래스 확장하기 첫번째 방법으로 java.lang.Thread 클래스를 확장할 수 있습니다. Thread 클래스에는 상당히 많은 메소드가 있는데요. 그 중에서 run() 이라는 메소드만 오버라이드해주면 됩니다. 스레드마다 수행 시간을 다르게 하여 현실과 비슷한 상황을 연출하고 싶었습니다. 그래서 Thread.sleep() 메서드를 이용해여 1초 이상 6초 미만의 랜덤 딜레이를 주었습니다. 그리고 각 스레드의 시작과 종료 시점에 Thread.currentTh

TypeScript 입문: JavaScript에 타입이 필요한 이유

TypeScript 입문: JavaScript에 타입이 필요한 이유

JavaScript로 작은 프로그램을 만들 때는 타입을 크게 의식하지 않아도 됩니다. 변수에 문자열을 넣었다가 숫자를 넣을 수도 있고, 함수에 어떤 값을 넘기든 일단 실행은 되니까요. 문제는 프로그램이 커진 뒤에 시작됩니다. formatPrice()는 숫자를 기대하지만 문자열을 받았습니다. JavaScript는 해당 줄을 실행한 뒤에야 toFixed is not a function이라는 오류를 냅니다. 이 함수가 주문 화면 깊숙한 곳에서만 호출된다면 배포 전에 문제를 발견하지 못할 수도 있겠죠. 💥 TypeScript는 이런 실수

Discord