map 함수를 사용 후 중괄호([])로 접근할 때
2024. 1. 4. 13:52
프로그래밍 언어/Python
map 을 사용해 여러 개의 값을 입력받아 바로 리스트에 저장하는 코드를 작성했다. 코드는 다음과 같았다. fish_price = map(int, input("가격: 2000 2500 3000").split()) 하지만 이것을 사용해서 fish_price의 원소에 [] 인덱스로 접근했을 때 fish_price = map(int, input("가격: 2000 2500 3000").split()) print(fish_price[1]) 위 코드를 실행하면 아래와 같은 에러가 발생한다. fish_price의 타입을 체크해보면 다음과 같다. fish_price의 타입은 바로 map 이다. map은 iterable을 반환합니다. 간단히 말하면 한 번에 하나씩 원소를 차례대로 내뱉은 존재이기 때문에 중괄호([])와 ..
얕은 복사와 깊은 복사
2024. 1. 4. 13:39
프로그래밍 언어/Python
얕은 복사와 깊은 복사는 프로그래밍에서 객체를 복사하는 두 가지 방법입니다. 얕은 복사(shallow copy) 얕은 복사란 원본 객체의 주소를 복사하여 새로운 객체를 생성하는 방식입니다. 원본 객체와 복사된 객체가 같은 메모리를 참조하므로 한쪽의 객체를 변경하면 다른 쪽의 객체도 함께 변경됩니다. old_list = [[1, 2, 3], [4, 5, 6], [7, 8, 'a']] new_list = old_list.copy() new_list[2][2] = 9 print(f"{old_list=}, {new_list=}") print(f"{id(old_list)=}, {id(new_list)=}") print(f"{id(old_list[0])=}, {id(new_list[0])=}") old_list를 ..
값 비교 시 is 연산자를 쓰면 안되는 이유
2023. 12. 29. 17:56
프로그래밍 언어/Python
is 연산자는 두 값이 같은지를 비교하는 것이 아닙니다. 두 객체가 메모리 상 동일한 주소에 저장되어 있는지를 비교합니다. 그렇기 때문에 두 값을 비교할 때는 반드시 is 연산자가 아닌 == 연산자를 사용해야 합니다. is 연산자는 어떻게 동작하는지 직접 코드를 작성하며 알아봤습니다. a = 1000 b = 1000 # 값이 같은지 비교 print(a == b) # 메모리 상에 각각 변수 a, b 에 저장된 값이 저장된 위치 print(id(a), id(b)) # 메모리 상 동일한 주소에 저장되어 있는지 비교 print(a is b) # 출력 결과 True 134878452576752 134878452577488 False 참고) 파이썬에서 정수 256 까지는 이미 해당 값이 메모리 상에 존재하면 기존의..
[OS] CPU 스케쥴링
2023. 1. 30. 23:40
Today I learned
CPU 스케쥴링 알고리즘 등장배경 프로세스가 CPU를 점유하여 작업을 수행하는 도중 I/O 또는 Interrupt가 발생하면 일시적으로 프로세스는 CPU를 사용하지 않게 된다. 하지만 계속해서 CPU를 점유하고 있다. 이러한 상황을 줄여, CPU를 최대한 활용하면 시스템의 성능을 끌어올릴 수 있다. 어떻게 프로세스들이 CPU를 효율적으로 사용할 것인가? 라는 고민에서 CPU 스케쥴링 알고리즘이 시작되었다. 스케쥴링 알고리즘은 한정된 자원으로 최고의 성능을 내기 위해 자원을 어떤 프로세스에 얼마나 할당할 지 정책을 만드는 것을 말한다. CPU 스케쥴링 방식의 종류 CPU 스케쥴링 방식은 크게 선점 스케쥴링과 비선점 스케쥴링으로 구분된다. 선점 스케쥴링은 가장 자원이 필요한 프로세스에게 CPU를 먼저 분배하..
[Network] URI 와 URL 의 차이점
2023. 1. 29. 14:58
Today I learned
URI 와 URL 의 차이점 URI 는 Uniform Resource Identifier 의 약자이며, 특정 리소스를 식별하는 통합자원식별자를 의미한다. 웹기술에서 사용하는 논리적, 물리적 리소스를 식별하는 고유한 문자열 시퀀스이다. URL은 Uniform Resource Locator 의 약자이며, 흔히 웹주소라고 하며 컴퓨터 네트워크 상에서 리소스가 어디에 위치하는지 알려주기 위한 규약이다. URL은 특정 리소스에 접근하기 위한 주소이고, URI는 URL을 포함하여 스키마나 프토토콜의 정보까지 담고 있다.
[JavaScript] require/exports 와 import/export 차이
2023. 1. 29. 14:48
Today I learned
require/exports require/exports 방식은 기존에 Node.js 에서 사용되던 CommonJS 모듈 방식으로, module.exports 객체에 모듈 전체를 담아 내보내고 require를 통해 해당 모듈을 불러오는 방식이다. 따라서 require를 사용하면 모듈 전체를 불러오게 되는데, 불필요한 모듈이 로드되기도 하고 어떤 부분을 모듈 내에서 사용했는지 알 수 없다. import/export import/export 방식은 ES6에 새로 등장한 ES 모듈 방식으로, import를 사용해 모듈을 가져온 뒤 만든 객체를 내보내기 위해 export를 사용하는 방식이다. 실제로 쓰이는 부분만 불러와 사용하기 때문에 메모리를 절약할 수 있다. export 를 사용하는 방식은 require와는..
[JavaScript] 커링
2023. 1. 12. 17:21
프로그래밍 언어/JavaScript
커링이란? 커링이란 f(a, b, c) 를 f(a)(b)(c) 와 같이 여러 개의 인수를 단일 프로세스로, 호출 가능한 함수를 다중 프로세스 형태로 변환할 수 있도록 하는 기술이다. 보통 자바스크립트에서 커링되어진 함수는 평소처럼 호출도 하고 만약에 인수들이 충분하지 않을 때는 partial 을 반환한다. 커링은 partial 을 쉽게 적용할 수 있도록 해준다. 커링을 사용하는 이유? 커링 함수를 사용하는 이유는 함수가 여러 개의 인자를 받을 때 특정 인자를 고정할 수 있습니다. 그로 인해 함수의 재사용성을 높일 수 있습니다. // 커링을 사용한 함수 const currying = a => b => c => a * b * c; console.log(currying(1)(2)(3)); // 6 // 인수 ..
[JavaScript] iterable 객체
2023. 1. 11. 14:06
프로그래밍 언어/JavaScript
들어가며 JavaScript 에서 Array 가 제공하는 map, filter, reduce 등의 메서드를 직접 구현하는 과정에서 for ... of 문을 공통적으로 사용했다. for ... of 문으로 순회 가능하기 위해서는 반드시 해당 자료구조가 iterable 해야 한다는 것을 알게 되었다. 하지만 iterable 이 무엇이고 어떤 역할을 하는지 알지 못해 이번 시간을 통해 이에 대해 알아보고자 한다. ko.javascript.info 사이트에서 이에 대해 잘 설명해주고 있어 이 자료를 참고했다. iterable 객체란? iterable 객체란 반복 가능한 객체라고 부르기도 하며, for ... of 구문과 함께 ES2015에서 도입되었다. iterable 객체와 다른 객체와의 가장 큰 차이점은 객..