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 까지는 이미 해당 값이 메모리 상에 존재하면 기존의..
[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 객체와 다른 객체와의 가장 큰 차이점은 객..
[JavaScript] 예시를 통해 알아보는 this
2022. 12. 28. 14:46
프로그래밍 언어/JavaScript
JavaScript에서 this 는 함수 호출 방법에 의해 결정된다. 예시1) 객체 메소드의 this const phone = { name: 'Galaxy Note 3', getName: function () { console.log("getName: ", this); }, } phone.getName(); // output: getName: {name: 'Galaxy Note 3', getName: f} getName 메소드의 호출자가 phone 객체이므로, getName 실행 시 this 는 phone 객체이다. 예시2) 전역 객체에서의 this const phone = { name: 'Galaxy Note 3', getName: function () { console.log("getName: ", ..
[TypeScript] Conditional Types, extends, infer
2022. 12. 25. 22:20
프로그래밍 언어/TypeScript
Conditional Types TypeScript에서 삼항 연산자를 이용해 타입을 지정하는 방식입니다. 예시) TypeScript에 내장된 Utility Types의 Extract 타입 type Extract = T extends U ? T : never T extends U 가 참이면 T를, 그렇지 않으면 never를 반환합니다. 삼항 연산자의 조건문에 올 수 있는 문법에는 extends 키워드 밖에 없습니다. extends extends 키워드는 슈퍼 클래스를 서브 클래스에게 상속해 줄 때 사용하는 키워드입니다. 타입 지정 시, extends 키워드는 T extends U 에 대해 T 는 U 에 포함된다는 의미입니다. extends 키워드가 사용되는 조건문 예시를 살펴보며 제대로 이해한 게 맞는지 ..
[TypeScript] 기본 타입
2022. 12. 20. 17:35
프로그래밍 언어/TypeScript
TypeScript 의 기본 타입에는 boolean, number, string, array, tuple, enum, any, void, null, undefined, never, object 등이 있습니다. 이에 대해 하나씩 예시와 함께 살펴보겠습니다. 불린(Boolean) true 혹은 false 값을 나타냅니다. let isExist:boolean = false; 숫자(Number) TypeScript의 모든 숫자는 부동 소수 값입니다. 16진수, 10진수 리터럴에 더불어 2진수, 8진수 리터럴도 지원합니다. // 10진수 리터럴 let decimal: number = 3; // 16진수 리터럴 let hex: number = 0xf00d; // 2진수 리터럴 let binary: number = ..