Programming Language
[Java] 람다식과 익명 클래스
[Java] 람다식과 익명 클래스
2024.02.21람다식은 어디서 왔을까? 함수형 언어가 다시 주목받으며 자바도 함수형의 이점을 살리기 위한 여러 기능이 업데이트되었다. 특히 자바 8에서 소개된 람다식이 대표적인 예이다. 함수형에서는 여러 클래스나 값을 변경하고 상호작용을 구현하여 표현하지 않는다. 보통 코드를 보면 무엇을 하는지 한눈에 보이고 데이터나 이벤트 스트림이 처리되는 과정을 가독성 좋게 볼 수 있다. 이런 데이터나 스트림을 다루는 데에 있어서 작은 동작이나 일회성 작업에 이름을 붙일 필요가 없는 경우가 많다. 그럴 때 쓸 수 있는 것이 람다식 혹은 익명 함수이다. 클래스명 같은 이름이 없기 때문에 그저 하나의 람다식으로 쉽게 전달될 수 있기도 하다. 람다식과 익명 클래스 람다식, 익명 클래스 모두 이름이 없는 함수나 객체를 표현하기 위해 쓰인..
[Java] Annotation (feat. Reflection)
[Java] Annotation (feat. Reflection)
2024.02.19Annotation? Annotate는 어떤 문서에 간단한 설명이나 의견을 달아놓는 것을 뜻한다. "주석을 달다"라고 번역할 수 있다. 이런 추가 정보는 어떤 데이터를 설명하기 위한 데이터이며 우리는 것을 메타데이터라고 부른다. 어노테이션(Annotation)을 사용하는 이유 자바에서 어노테이션은 코드에 메타데이터(코드를 설명하는 추가적인 데이터)를 표현하기 위한 방법 중에 하나이다. 이런 메타데이터를 통해 프로그램은 추가적인 정보를 알 수 있고 그에 따라 여러가지 기능을 지원할 수 있다. 대표적으로 여러 프레임워크에서는 메타데이터와 리플렉션을 통해 런타임에 다양한 기능을 지원해주고는 한다. 우리는 몇 가지 어노테이션으로 의존성 주입, 트랜젝션 관리, 테스트 코드 등을 깔끔하게 구현할 수 있다. 단순히 ..
모던 JavaScript 튜토리얼 파트 1 :: 8장 - "프로토타입과 프로토타입 상속", 9장 - "클래스" 정적 메서드까지 정리
모던 JavaScript 튜토리얼 파트 1 :: 8장 - "프로토타입과 프로토타입 상속", 9장 - "클래스" 정적 메서드까지 정리
2023.02.01정리 시간이 없어서 텍스트로 내용을 정리하지는 못했습니다. 스터디 때 코어 자바스크립트 내용을 참고해서 쓴 자료를 올립니다. excalidraw에서 진행했습니다. https://excalidraw.com/#json=UPKDLXv3hxLCB5lt9MDKv,2NQftxJsB_qiK6Z2CnP3pw 1. 프로토타입 상속 프로토타입 상속 ko.javascript.info 2. 함수의 prototype 프로퍼티 함수의 prototype 프로퍼티 ko.javascript.info 3. 내장 객체의 프로토타입 내장 객체의 프로토타입 ko.javascript.info 4. 프로토타입 메서드와 __proto__가 없는 객체 프로토타입 메서드와 __proto__가 없는 객체 ko.javascript.info 프로퍼티를 이..
[JS] Lexical Environment로 알아보는 Closure
[JS] Lexical Environment로 알아보는 Closure
2023.01.16쓰게 된 계기 모던 자바스크립트를 요즘 정리하면서 얘기하는 스터디를 하고 있습니다. 그런데 이 부분 내용을 따로 공유하면 좋을 것 같아서 분리하게 되었습니다. 변수의 유효범위와 클로저 변수의 유효범위와 클로저 ko.javascript.info 자바스크립트는 함수형 프로그래밍을 지원합니다. 함수가 일급 객체이기 때문에 고차함수는 익숙하게 볼 수 있습니다. let과 const를 사용하면 block scope으로 사용하게 됩니다. (자바스크립트에서도 이런 용어를 쓰는지 모르겠지만) 이렇게 눈으로 바로 블록에 쌓인 변수 범위를 lexical scope이라고 부릅니다. 외부 scope에서 내부 scope에 있는 변수를 사용하지 못하기 때문에 실수를 많이 줄여줍니다. 사실 이런 Lexical Scope과 이것을 활..
모던 JavaScript 튜토리얼 파트 1 :: 6장 "함수 심화학습" 정리
모던 JavaScript 튜토리얼 파트 1 :: 6장 "함수 심화학습" 정리
2023.01.16모던 JavaScript 튜토리얼 파트 1의 6장을 읽으면서 정리하는 글입니다. 1. 재귀와 스택 재귀와 스택 ko.javascript.info 자바스크립트는 재귀 함수의 깊이를 제한한다. (엔진에 따라 다르지만 만개 정도는 확실히 허용한다고 합니다.) function A(i) { i = i - 1; if (i < 0) return 0; return A(i); } const result = A(10_000); // 허용! const result = A(10_956); // 허용! const result = A(10_957); // Uncaught RangeError: Maximum call stack size exceeded 크롬에서 간단하게 검사툴로 돌려보니깐 10,956까지만 허용하네용. 꼬리 재귀 ..
모던 JavaScript 튜토리얼 파트 1 :: 5장 "자료구조와 자료형" 정리
모던 JavaScript 튜토리얼 파트 1 :: 5장 "자료구조와 자료형" 정리
2023.01.09모던 JavaScript 튜토리얼 5장을 읽으면서 정리하는 글입니다. 5장 자료구조와 자료형 1. 원시값의 메서드 원시값의 메서드 ko.javascript.info 원시값과 객체는 다릅니다. 원시값은 Property가 없습니다. 하지만 편하게 객체처럼 속성을 호출할 수 있습니다. 속성이 필요한 경우 원시값이 Wrapper를 통해 일시적으로 객체로 변하기 때문입니다. 잠시 메서드를 제공하기 위해 만들어진 원시 래퍼 객체(object wrapper)는 일시적입니다. 이를 Auto Boxing이라고 부릅니다. 객체는 여러 속성을 정의할 수 있습니다. 자바스크립트에서는 함수도 객체입니다. // 원시 객체를 직접 만드는 법 if (new Number(0)) { // 객체이므로, true console.log("z..
모던 JavaScript 튜토리얼 파트 1 :: 3장 "코드 품질", 4장 "객체:기본" 정리
모던 JavaScript 튜토리얼 파트 1 :: 3장 "코드 품질", 4장 "객체:기본" 정리
2023.01.02모던 JavaScript 튜토리얼 3장, 4장을 읽으면서 정리하는 글입니다. 3장 코드 품질 Chrome으로 디버깅하기 Chrome으로 디버깅하기 ko.javascript.info 브라우저는 JS를 실행시켜줍니다. 이런 브라우저에도 Javascript에 대한 것을 디버깅할 수 있는 기능이 내장되어 있습니다. 왼쪽 탭을 보시면 Thread, Watch, Breakpoints, Scope, Call Stack, 등의 익숙한 용어들이 보입니다. 다른 개발 툴과 같이 Step in/out/into, break point 등 기능이 다 있습니다. 단축키와 같은 것은 모던 Javascript 책에 잘 설명되어 있기 때문에 스킵하겠습니다. ㅎㅎ 사실 컴포넌트라는 개념은 리액트 전에도 있던 개념입니다 ㅎㅎ. Web C..
모던 JavaScript 튜토리얼 파트 1 :: 1장, 2장 정리
모던 JavaScript 튜토리얼 파트 1 :: 1장, 2장 정리
2022.12.26https://ko.javascript.info/ 를 읽으며 정리하는 글입니다. 이 책을 천천히 정리하면서 제가 알고 있는 내용을 함께 적어봅니당. 1장 소개 자바스크립트란? "자바스크립트는 ‘웹페이지에 생동감을 불어넣기 위해’ 만들어진 프로그래밍 언어"입니다. 보통 웹페이지의 HTML 안에 작성하거나 불러와서 웹페이지를 불러올 때 스크립트가 자동으로 실행됩니다. 자바스크립트는 자바스크립트 엔진에서 돌아간다. 브라우저엔 '자바스크립트 가상 머신'이라는 불리는 엔진이 내장되어있고 대표적으로 크롬에서 사용하는 V8 엔진이 유명합니다. 책에서는 자바스크립트는 안전한 프로그래밍 언어라고 표현합니다. 브라우저를 대상으로 만든 언어이기 때문에 메모리나 CPU 같은 저수준 영역의 조작을 허용하지 않습니다. 인터넷에서..
Mac 사용자를 위한 C#으로 개발할 때 좋은 도구
Mac 사용자를 위한 C#으로 개발할 때 좋은 도구
2022.12.13C#으로 개발할 때 좋은 도구를 추천해보고자 합니다. Mac 사용자 기준으로 작성된 글입니다. 가장 유명한 통합 개발 환경(IDE) 가장 유명한 것은 Visual Studio, Rider입니다. 모두 유용한 기능이 많고 아주 훌륭하고 편리한 도구입니다. Windows 환경이시라면 큰 고민 없이 마음에 드는 IDE를 시작하셔도 무방합니다. 실리콘 Mac에서는 Visual Studio가 성능이 별로고 Mac 환경에 딱히 친화적이지 않아서 JetBrains에서 만든 Rider를 그냥 쓰라고 추천받고는 했는데요. Mac용 Visual Studio 2022부터는 많은 것이 개선되었습니다. Visual Studio 특유의 환경과 IntelliSence를 좋아한다면 새로 나온 Visual Studio for Mac ..
발전한 자바스크립트와 현재 jQuery의 위치
발전한 자바스크립트와 현재 jQuery의 위치
2021.07.10이틀 전에 '제이쿼리는 왜 FD 로드맵에서 삭제 되었을까?'라는 글을 재밌게 읽었습니다. 문득 jQuery의 흔적을 자주 볼 수 있는 인트라넷에 이 글과 제가 개발 공부를 하면서 느낀 JavaScript와 jQuery에 관해서 쓰면 좋을 거 같아서 남겨봅니다. 주의 부족한 경험과 기억에 의존해서 적는 글이라 틀린 부분이 있을 수 있습니다. 오류나 틀린 부분이 있다면 지적 부탁드립니다! jQuery가 개발되기 전의 웹 초창기(1995~1996) 웹 브라우저 jQuery가 개발되기 전의 JavaScript는 브라우저 제조사 별로 표준이 달라서 같은 JavaScript 코드라도 어떤 브라우저에서는 동작하지만 어떤 브라우저에서는 안 돌아가는 경우가 많았습니다. 그래서 개발자에게 JavaScript는 손이 여러모..
[파이썬] Thread를 사용하기 전에 알아야 할 몇 가지 주의점들
[파이썬] Thread를 사용하기 전에 알아야 할 몇 가지 주의점들
2020.05.23Thread를 사용하는 이유와 발생할 수 있는 문제들 Python은 하나의 Thread(Main Thread)로 시작한다. Main Thread는 혼자서 순차적으로 코드를 실행하게 된다. 하지만 실행되던 중간에 Blocking Function, 예를 들어서, Input과 같은 함수를 만나면 그 함수의 실행이 끝날 때까지 기다리게 된다. Main Thread가 멈추게 되면 다른 함수를 실행할 수가 없게 되는데 이때 우리는 Thread를 하나 더 만들어서 다른 함수를 병렬적으로 Blocking Function과 같은 함수와 함께 실행할 수 있다. 하지만 Thread를 여러 개를 사용할 때 주의해야 할 것들이 많다. 이번 글에서는 Thread를 사용할 때 주의해야 할 점과 생각해야 할 문제들을 소개해 보고자 ..
[C# 8.0] Nullable Reference Type이란?
[C# 8.0] Nullable Reference Type이란?
2020.02.29C# 8.0의 새로운 기능들 중 하나로 Nullable Reference Type(널 참조 형식)이 있다. https://docs.microsoft.com/ko-kr/dotnet/csharp/whats-new/csharp-8#nullable-reference-types C# 8.0의 새로운 기능 - C# 가이드 C# 8.0의 새로운 기능을 살펴봅니다. docs.microsoft.com 이미 클래스와 같은 Reference Type은 null을 가질 수 있는데 굳이 Nullable 필요할까?라는 의문이 들어서 찾아봤다. Nullable Reference Type에 대해서 알아보자 1. Nullable Reference Type을 선언하려면 Nullable Value Type과 같이 Class명 우측에 물음..