Programming Language
[Kotlin] 클로저(Closure)
[Kotlin] 클로저(Closure)
2025.01.30최근에 Refactoring2를 읽으며 자바로 1장을 그대로 실습하려고 했지만 중첩 함수가 지원되지 않아서 따로 클래스, static 함수, 람다로 빼다 보니 책의 흐름과 다소 달라져서 그냥 코틀린으로 실습해보았다. 코틀린은 중첩함수와 Closure가 지원되기 때문에 중첩함수를 자주 활용하는 JS 예제도 비슷하게 따라할 수 있어서 좋았다~!클로저란 뭘까?클로저(Closure)는 함수가 정의될 때의 환경을 기억(Capture)하고 유지하는 개념이다. 클로저는 자신이 선언된 범위(scope)의 변수를 계속해서 유지하고 이후(그 당시에 환경이 소멸됐더라도!)에도 변경할 수 있다.예제 코드먼저 코드부터 봐보자fun incrementFrom(start: Int): (Int) -> Int { // 외부 함수 ..
서로 닮아 보이는 Decorator, Composite Pattern - 1편
서로 닮아 보이는 Decorator, Composite Pattern - 1편
2025.01.15디자인 패턴을 처음 학습할 때 구조적으로 비슷한 다이어그램을 가진 패턴들이 서로 다른 이름과 목적을 가지고 있어 혼란스러웠던 경험이 있습니다. 이러한 혼란은 단순히 "어떻게 구현되는가?"에 초점을 맞출 때 발생하곤 했습니다.요즘 다시 이전에 디자인 패턴을 펼쳐보고 "왜 이런 패턴이 필요한가?", "이 패턴이 어떤 상황에 써라고 만든 것인가?"라는 질문을 던지며 패턴의 의미와 어떻게 문제 해결했는지 다시 한번 살펴보고 있습니다.특히, 데코레이터(Decorator)와 컴포짓(Composite) 패턴은 겉보기에는 매우 유사해 보이지만, 각각의 목적과 활용 방식에서 큰 차이가 있습니다. 이번 글에서는 두 패턴의 구현과 의도를 비교하고 다른 개발 선배들에게 얻은 해석하는 Tip 등을 공유해보고자 합니다.Decor..
IntelliJ 자주 쓰는 단축키 모음
IntelliJ 자주 쓰는 단축키 모음
2024.10.23IntelliJ IDEA요즘 인텔리제이를 자주 쓰는데 자주 쓰거나 혹은 자주 활용하면 좋아보이는 단축키를 정리해보았습니다.읽을 때기능단축어함수 시그니처 보기cmd + PQuick Docs 보기F1선언 보기 (변수, 함수, ...)cmd + B구현 보기cmd + opt + BUsage 보기opt + F7다음 Error 보기F2Symbol로 이동cmd + opt + O편집용기능단축어New Lineshift + enterJoin Linectrl + shift + JSurround Withcmd + opt + TLast Edit Locationcmd + shift + backspaceCaret to ... (커서를 움직이는 법)기능단축어일치하는 bracectrl + MBlock 시작 / 끝ctrl + opt +..
Rye로 파이썬 프로젝트 세팅해보기!
Rye로 파이썬 프로젝트 세팅해보기!
2024.07.15어떤 언어로 프로젝트를 하다보면 언어 버전부터 시작해서 Dendency와 Package 관리는 뭐로 할 것인지? 가상환경은 어떤 것으로 관리할 것인지? 나중에 어떻게 패캐지를 배포할 것인지? 등을 고민해야 합니다. 파이썬도 마찬가지로 여러 도구들이 돌아다닙니다.주로 사용한 도구주로 저는 간단하게 제일 아무런 설치가 필요없는 pip와 venv로 프로젝트를 관리를 합니다. 그런데 이번에 팀원들과 FastAPI로 프로젝트를 하면서 운영체제별로 하위 버전에 대한 이슈가 몇 번 생겨서 pip freeze를 저장한 requirements.txt에 한계를 느꼈습니다. 말고도 venv에서 환경을 불러오는 방식과 요즘 많이 채택하여 쓰는 pyproject.toml로 관리하고 싶은 마음도 들어서 다른 것을 찾아보았습니다...
[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 같은 저수준 영역의 조작을 허용하지 않습니다. 인터넷에서..