[Typescript] User Defined Type Guards
·
Language/JavaScript
vue-core의 코드 분석 중 inject()의 구현부에서 isFunction()이라는 함수를 보게되었다. '함수여부를 어떻게 판별할까?'하고 정의를 찾아보니 아래와 같은 코드가 있었다.export const isFunction = (val: unknown): val is Function => typeof val === 'function'내가 헷갈렸던 부분은 반환 타입으로 주어진 val is Function이었다. 파이썬에서만 봤지 타입스크립트에서 is를 사용하는걸 처음봐서 검색해보니 User Defined Type Guards라는 개념을 찾을 수 있었다.User Defined Type Guards란 특정 조건을 만족하는지 확인하여 컴파일러에게 해당 조건이 참일 경우 변수나 객체의 타입을 안전하게 판..
[Java] StringUtils의 hasLength()와 hasText()
·
Language/Java
프로젝트 진행 중 intellij에서 StringUtils.isEmpty()를 사용하는 곳에 노란색 경고와 hasLength(String)나 hasText(String)를 대신 사용하라는 메시지가 나와서 두 메서드의 차이점을 찾아봤다.StringUtils스프링 프레임워크에서 제공하는 문자열 처리 유틸리티 클래스org.springframework.util 패키지에 포함되어 있으며, 문자열 검사, 변환, 조작, 비교 등의 문자열 처리 관련 메서드를 가진 유틸리티 클래스이다.isEmpty()는 5.3 버전부터 deperecated되기 때문에 hasLength()나 hasText() 사용을 권장한다.두 메서드는 비슷한 역할을 하지만 코드를 보면 차이점이 있다.빈 문자열인지 확인이 필요할 경우 hasText()를..
[Python] pandas
·
Language/Python
판다스는 파이썬에서 데이터 처리를 위해 사용하는 라이브러리이다. 일반적으로 행과 열로 구성된 2차원 데이터를 다룬다. DataFrame은 여러 개의 행과 열로 이루어진 2차원 데이터를 담는 데이터 구조체이다. 데이터셋은 kaggle의 Titanic - Machine Learning from Disaster의 데이터셋 중 train.csv 파일을 사용했다. import pandas as pd pandas 모듈을 pd라는 이름으로 가져온다. df = pd.read_csv("train.csv") train.csv 파일을 읽어 Dataframe으로 로딩한다. df.head() 데이터의 일부를 직접 확인할 수 있다. df.info() RangeIndex: 891 entries, 0 to 890 Data colum..
[Python] Dependency Injector (1)
·
Language/Python
의존성 주입 패턴(Dependency Injection Pattern)은 일반적으로 객체 생성 시, 해당 객체가 의존하는 다른 객체를 직접 생성하는 것이 아니라 외부에서 주입받도록 하는 방법이다. 이를 통해 객체 간의 결합도가 낮아지기 때문에, 유지보수 및 코드 재사용성이 높일 수 있다. Dependency Injector는 Python에서 의존성 주입 패턴을 구현할 수 있게 도와주는 라이브러리 중 하나이다. 이를 사용해 객체 간의 결합도를 낮추고, 코드의 유연성과 확장성을 높일 수 있다. 처음에는 이런 개념이 잘 와닿지 않았다. 이러한 Dependency Injector의 개념과 기능들을 코드 예시와 함께 설명하면 좀 더 쉽게 이해할 수 있다. class Database: def __init__(sel..
[NUXT] loading component
·
Language/NUXT
페이지를 불러오거나 서버 요청을 보낼 때 대기 시간이 발생한다. 이 때 화면이 정지해있으면 사용자는 페이지가 정지한 것인지 동작중인지 알 수 없다. 로딩 페이지를 표시해 작업이 진행중이라는 것을 표시해줘야한다. NUXT에서는 간단하게 로딩창을 만들 수 있다. 먼저 로딩을 표시하기 위한 컴포넌트를 작성한다. // @/components/loading.vue Loading... // @/components/loading.vue nuxt.config.js을 열고 loading 속성에 작성했던 loading.vue 컴포넌트를 추가한다. // nuxt.config.js export default { // ... loading: '@/components/loading.vue' } 필요한 부분에서 $n..
[NUXT3] 500 window is not defined
·
Language/NUXT
NUXT3에서 apexcharts.js 라이브러리를 사용하다 에러가 발생했다. 500 window is not defined at Object. (.../apexcharts.common.js:6:371062) at Module._compile (node:internal/modules/cjs/loader:1105:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Module.require (..
[Python] ensure_future
·
Language/Python
asyncio를 사용하다가 혼동되는 부분이 많다. 대표적으로는 Task와 Future의 차이가 있을 것이다. asyncio.create_task()와 asyncio.ensure_future() 또한 혼동되는 부분이다. 예제 코드를 찾아보면 ensure_future를 사용하는 코드도 간간히 볼 수 있었다. 두 함수 모두 코루틴을 실행하기 위해 사용될 수 있기 때문에 혼용해서 쓰는 경우가 많은 것 같다. 각 함수의 역할을 더 정확히 알아보고 이에 대해 정리했다.​ximport asyncio​async def f(): pass​coro = f()loop = asyncio.get_event_loop()​task1 = loop.create_task(coro)assert isinstance(task1, asynci..
[Vue] 플러그인 만들기
·
Language/JavaScript
플러그인을 통해 전역적으로 필요한 기능을 추가할 수 있다.먼저 코드를 작성한다.​x// MyPlugin.jsimport Vue from 'vue'​export const MyPlugin = { install (Vue) { Vue.prototype.$myMethod = function() { console.log("method1"); } }}​Vue.use(MyPlugin)프로젝트 생성후 main.js의 vue 인스턴스에 플러그인을 추가한다.xxxxxxxxxximport Vue from 'vue'import App from './App.vue'import MyPlugin from "@/plugins/MyPlugin";​Vue.config.productionTip = false​new Vue({ MyPlug..