분류 전체보기 231

[C#] iteration 안에 await문을 넣으면 안되는 이유

await 키워드를 for 루프 내부에서 사용하면 예상치 못한 동작 또는 오류가 발생할 수 있다. 특히 UI 애플리케이션이나 비동기 코드와 같은 특정 상황에서는 더욱 그렇다. 이는 await 키워드가 비동기 작업이 완료될 때까지 함수의 실행을 일시 중단하는 데 사용되기 때문이다. 부적절하게 사용하면 루프가 의도치 않은 방식으로 작동할 수 있다. 다음은 잘못된 코드의 예시이다: async Task ProcessItemsAsync(List items) { for (int i = 0; i < items.Count; i++) { ... // 비동기 작업(예: HTTP 요청)을 대기한다. await SomeAsyncMethod(); ... } } 위의 예에서는 루프 내에서 비동기 작업을 대기하면 해당 작업이 완료..

Language/C# 2024.01.18

jQuery객체 변수 이름 앞에는 왜 ‘$’를 붙일까?

JavasScript에서는 특히 jQuery를 사용하는 맥락에서 변수 이름 앞에 $를 붙이는 관례가 일반적이다. 엄격한 규칙은 아니지만 변수가 jQuery객체를 보유하고 있음을 나타내는 것이 관례가 되었다. 이 규칙을 사용하는 몇 가지 이유는 다음과 같다. 가독성: 변수가 jQuery 객체라는 신호를 빠르게 보내 코드를 더 읽기 쉽게 만든다. 이는 대규모 코드베이스나 코드를 빠르게 스캔할 때 특히 유용하다. 충돌 방지: JavaScript에서는 변수에 거의 모든 이름을 지정할 수 있다. jQuery와 함께 다른 라이브러리나 프레임워크를 사용하는 경우 이 규칙은 이름 충돌을 방지하는 데 도움이 된다. 자체 문서화 코드: 자체 문서화의 한 형태로 사용된다. 다른 사람(또는 자신)이 코드를 읽을 때 $ 접두사..

FrontEnd/JQuery 2024.01.18

Javascript의 getMonth()는 왜 달 - 1일까?

오늘은 JavaScript의 getMonth() 메서드로 달을 구할 시 왜 실제 달보다 1이 적은 값이 반환되는 지에 대해 알아보고자 한다. 1. 개요 자바스크립트에서 날짜를 구하려면 Date 객체를 활용해야 한다. Date객체의 인스턴스의 달(月)을 구하려면 아래 예시의 사용처럼 getMonth() 메서드를 사용한다. const today = new Date(); const year = today.getFullYear(); const month = today.getMonth()+1; const day = today.getDate(); console.log(`${year}.${month}.${day}`) // result: 2024.1.11 (작성일(2024. 01. 11기준) 그런데 왜 getMonth..

브라우저에서 업데이트된 스크립트 파일 미 적용 문제와 해결책

종종 웹 프로젝트를 진행하면서, 새로운 JS나 CSS 파일을 서버에 반영했음에도 불구하고 브라우저에서 이전 파일이 여전히 사용되는 문제가 발생된다. 이러한 문제가 발생하는 주된 이유는 브라우저가 이전에 다운로드한 파일을 캐싱하여 재사용하기 때문이다. 캐시는 성능 향상을 위해 사용되지만, 개발 중에는 새로운 코드나 리소스를 반영하기 위해 캐시를 무효화하는 것이 필요할 수 있다. 이러한 문제를 해결하기 위해 몇 가지 효과적인 해결 방법들을 소개한다. 1. 새로고침(F5) or 강력 새로고침(Ctrl + F5): 웹 페이지를 갱신하여 브라우저가 최신 파일을 가져오도록 하는 간단하면서도 효과적인 방법이다. 사용자 경험이나 앱 환경에서도 유용한 방법 중 하나이다. 2. Cache 비활성화 (개발자 도구 사용 필요..

FrontEnd 2023.12.06

[Software] Porting, Converting에 대

소프트웨어 공학에서, "포팅(Porting)"과 "컨버팅(Converting)"의 개념이 나오는데, 두 가지 개념이 비슷한 듯 하나 서로 다른 개념이다. 각각의 의미와 차이점에 대해 살펴보자. 포팅 (Porting) 포팅은 한 플랫폼에서 다른 플랫폼으로 소프트웨어를 이식하는 작업을 의미한다. 일반적으로 플랫폼은 운영 체제(OS)나 하드웨어 아키텍처를 가리킨다. 포팅은 기존에 작성된 소프트웨어를 새로운 환경에서도 동작하도록 변경하는 프로세스를 포함한다. 소스 코드를 수정하거나 기존 코드를 새로운 환경에 맞게 컴파일하거나 재작성하는 것이 일반적인 포팅 방법이다. 이렇게 함으로써, 소프트웨어는 다른 운영 체제나 하드웨어에서도 동작할 수 있게 된다. 포팅은 크로스 플랫폼 호환성을 갖춘 소프트웨어를 제공하는 데 ..

[Python] pip 명령어 문제 해결: Fatal error in launcher: Unable to create process using '"'

python에서 package를 설치하기 위해 pip명령어 사용시, 아래와 같이 에러가 뜰 때가 있다. 이에 대해 찾아보니 경로 때문에 발생하는 오류라는데 간단하게 해결 가능하다. pip 명령어 앞에 python -m 을 붙여준다. >python -m pip install “-m” Option? -m : 라이브러리 모듈을 스크립트로 실행 그러면 아래와 같이 pip명령어가 정상 동작함을 확인할 수 있다. [상세설명] 먼저 python -m pip는 python으로 지정한 Python 인터프리터를 사용하여 pip를 실행한다. 따라서 /usr/bin/python3.7 -m pip는 /usr/bin/python3.7에 있는 인터프리터에 대해 pip를 실행하고 있음을 의미한다. -m 플래그와 작동 방식에 대해서는..

블로킹(Blocking), 논블로킹(Non-blocking)에 대해

블로킹과 논블로킹은 프로그래밍에서 자주 사용되는 두 가지 동작 모델 또는 방식을 나타낸다. 이 두 개념은 주로 입출력(IO) 작업, 네트워킹, 멀티스레딩 등과 관련이 있으며, 어떻게 코드가 실행되고 제어가 처리되는지에 영향을 미친다. 아래에서 각 개념을 상세히 살펴보자. 1. 블로킹(Blocking) 블로킹은 어떤 작업이 완료될 때까지 프로그램이 다음 작업으로 진행하지 않고 대기하는 동작 방식을 의미한다. 주로 입출력 작업에서 발생하며, 예를 들어 파일을 읽거나 네트워크에서 데이터를 받아올 때 블로킹 작업이 발생할 수 있다. 블로킹 호출을 하면 해당 호출이 완료 될 때까지 제어가 호출한 코드에 반환되지 않는다. 이는 다른 작업들도 대기 상태에 놓이게 하고, 전반적으로 프로그램의 응답성을 저하시킬 수 있다..

HackerRank 문제풀이 - 11 (Sherlock and Anagrams)

1. 문제 문제는 다음과 같다. 한 문자열의 문자를 재배열하여 다른 문자열을 형성할 수 있는 경우 두 문자열은 서로의 애너그램 이라고 한다. 문자열이 주어졌을때, 서로의 애너그램인 문자열의 하위 문자열 쌍의 수를 찾아야 한다. 2. 1차 문제풀이 2.1 풀이 과정 function sherlockAndAnagrams(s) { let count = 0; for(let len = 1; len orgStr: ${orgStr}, compareSt..

[.NET] Garbage Collector의 영향과 Timer 클래스의 안전한 사용 방법

이 포스트에서는 C#에서 Garbage Collector의 영향과 이에 따른 Timer클래스의 안전한 사용 방법에 대해 정리해보고자 한다. Garbage Collector(GC)의 역할 Garbage Collector는 .NET Framework에서 메모리 관리를 자동화하는 중요한 요소이다. GC는 더 이상 사용되지 않는 객체들을 감지하고 이들을 메모리에서 해제하여 리소스 누수를 방지한다. 하지만 때때로 GC의 작동 방식으로 인해 예상치 못한 결과가 발생할 수 있다. 특히 Timer 클래스와 같이 주기적으로 호출되어야 하는 기능을 구현할 때에 주의가 필요하다. Timer 클래스의 일반적인 사용 방법과 GC의 영향 보통 Timer클래스를 사용하여 반복적인 작업을 수행하도록 프로그램을 구현할 수 있다. 예를..

Language/C# 2023.07.20

[.NET] System.Threading.Timer Class에 대해

해당 포스팅은 Timer Class의 공식문서를 직접 번역하면서, 부연설명을 추가하여 작성한 포스팅이다. 정의 Namespace: System.Threading Assembly: System.Runtime.dll 지정된 간격으로 thread pool thread에서 메서드를 실행하기 위한 메커니즘을 제공한다.이 클래스는 상속할 수 없다. *(스레드 풀이란? 이전 포스팅 참고) public sealed class Timer : MarshalByRefObject, IAsyncDisposable, IDisposable Inheritance Object → MarsharByRefObject → Timer Implements IDisposable, IAsyncDisposable 예제 다음 예제에서는 시그니처가 T..

Language/C# 2023.07.20
반응형