분류 전체보기 119

3. 함수 안에서 전역 변수 설정 및 람다 표현식

함수 안에서 함수 밖의 변수 데이터를 변경해야 하는 경우가 있는데 이때는 함수에서 global 키워드를 이용하면 된다. a = 0 def func(): global = 0 a += 1 for i in range(10): func() print(a) // -> 10 파이썬에서는 람다 표현식을 이용해서 함수를 매우 간단하게 작성할 수 있다. 특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있다는 점이 특징 def add(a,b): return a+b # 람다 표현식으로 구현한 add() 메서드 print((lambda a, b: a+b)(3,7))

2. 사전 자료형

파이썬의 사전 자료형은 내부적으로 해시 테이블을 이용하므로 기본적으로 데이터의 검색 및 수정에 있어서 O(1)의 시간에 처리할 수 있다. -> 키-값 쌍으로 구성된 데이터를 처리함에 있어서 리스트보다 훨씬 빠르게 동작 data = dict() data['사과'] = 'Apple' data['바나나'] = 'Banana' if '사과' in data: print('have an apple') 키 값만 뽑아서 사용하려면 a = data.keys() 값 데이터만 뽑아서 사용하려면 b = data.values()

9. 펼침 연산자로 정렬에 의한 혼란을 피하기

이전까지 펼침 연산자를 이용해서 여러 가지 조작 함수를 대체하는 방법을 알아봤는데 대체하기 쉽지 않은 함수는 어떻게 해야 할까? 펼침 연산자로 원본 배열의 사본을 생성하고, 사본을 조작하면 된다. 하지만 만만하게 볼 것은 아니다. 조작으로 인한 문제는 표 데이터를 정렬할 때 발생한다. 직원 정보가 담긴 배열을 이름 또는 근속 연수를 기준으로 정렬하는 애플리케이션을 개발하는 예제를 보면 먼저 배열을 보면 const staff = [ { name: 'Bob', years: 10, }, { name: 'Amy', years: 5, }, { name: 'Karen', years: 10, }, ]; 이렇게 배열이 구성되어 있고 정렬 함수는 function sortByYears(a, b){ if(a.years ==..

8. push() 메서드 대신 펼침 연산자로 원본 변경을 피하자

배열 연산 시 원본을 조작하지 않아야 되는데 그런 조작은 예상치 못한 결과를 낳을 수 있다. 조작이 항상 문제를 일으키는 것은 아니지만 잠재적으로 문제가 되므로 피하는 것이 좋다. 배열을 조작하기 위해 흔히 사용하는 push() 메서드를 보면 새로운 항목을 배열 뒤에 추가해 원본 배열을 변경한다. 즉, 항목을 추가하면 원본 배열을 조작하는 셈이다. 다행히 펼침 연산자를 이용하면 원본 배열이 조작되는 부수 효과를 방지할 수 있다. 다음 예제를 보면 const cart = [ { name: 'a', pricec: 20.0, discount: false, }, { name: 'b', pricec: 18.2, discount: false, }, { name: 'c', pricec: 24.0, discount: ..

7. 펼침 연산자로 배열을 본떠라

function removeItem(items, removable){ const index = items.indexOf(removable); return [...items.slice(0, index), ...items.slice(index+1)]; } 배열에는 수많은 메서드가 있어서 혼란스럽거나 조작과 부수 효과로 인한 문제에 맞닥뜨릴 수 있는데 다행히 펼침 연산자를 사용하면 최소한의 코드로 배열을 빠르게 생성하고 조작할 수 있다. 펼침연산자는 ...로 표시한다. 펼침연산자의 기능은 배열에 포함된 항목을 목록으로 바꿔주는데 목록은 매개변수 또는 새로운 배열을 생성할 때 사용할 수 있는 일련의 항목이다. 이런 작은 기능이 여러 가지 이점을 가져다준다. 배열에서 항목을 제거하려고 할 때 반복문을 통해 작성할..

6. Includes()로 존재 여부를 확인하기

이번 글에서는 배열에 있는 값의 위치를 확인하지 않고도 존재 여부를 확인하는 법을 살펴보려고 한다. 배열을 다룰 때는 흔히 존재 여부 확인이 필요한데, 이는 중요한 작업이며 삼항 연산자와 단락 평가를 비롯한 대부분의 조건문에서도 중요하다. 자바스크립트 배열에서 존재 여부 확인은 언제나 다소 번거로운데, 예를 들어 배열이 특정 문자열을 포함하고 있는지 확인하려면 문자열의 위치를 찾아야 한다. 특정 문자열이 존재하면 해당 문자열의 색인으로 위치를 확인할 수 이다. 반대로 문자열이 존재하지 않으면 -1이 반환된다. 문제는 색인이 0이 될 수 있는데 자바스크립트에서 0은 false로 평가될 수 있다. 이런 상황에서 찾는 값의 위치가 0번째라면 false로 평가되므로 반환된 색인을 그대로 조건문에 사용할 수 없고..

5. 배열로 유연한 컬렉션 생성하기

배열은 놀라운 수준의 유연성을 갖추고 있는데 배열은 순서를 갖기 때문에 이를 기준으로 값을 추가하거나 제거할 수 있고, 모든 위치에 값이 있는지 확인할 수도 있다. 또한 배열을 정렬해서 순서를 새로 지정할 수도 있다. map(), filter(), reduce() 등의 배열 메서드를 이용하면 코드 한 줄로 정보를 쉽게 변경하거나 갱신할 수 있다. 배열 외 다른 컬렉션도 사용하지만 배열을 깊이 이해하면 코드를 상당히 개선할 수 있다. 예를 들어 객체를 순회하려면 먼저 Object.keys()를 실행해서 객체의 키를 배열에 담은 후 생성한 배열을 이용해 순회한다. const totla = {}; const stats = Object.keys(game1); for (let i=0; i < stats.lengt..

스택과 큐의 차이점

스택 - 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조로 가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조이다. 스택은 LIFO(Last In First Out - 마지막에 넣은 데이터를 가장 먼저 추출하는 데이터 관리 정책) 방식을 따른다. push(): 데이터를 스택에 넣기 pop(): 데이터를 스택에서 꺼내기 장점 - 구조가 단순해서 구현이 쉽다. - 데이터 저장/읽기 속도가 빠르다. 단점 - 데이터 최대 개수를 미리 정해놔야 한다. -> 저장 공간의 낭비가 발생할 수 있다. -> 미리 최대 개수만큼 저장 공간을 확보해야 한다. 코드로 구현(파이썬) stack_list = [] def push(data): stack_list.append(data) def pop(): data = st..

CS/자료구조 2021.01.24

4. 템플릿 리터럴로 변수를 읽을 수 있는 문자열로 변환하기

이번 글에서는 변수를 연결하지 않고 새로운 문자열로 만드는 방법을 살펴보려 한다. 문자열은 너저분할 때가 많은데 문자열에서 정보를 찾으려면 대문자, 구두점, 오타 등 골치 아픈 경우가 많다 그런 경우 템플릿 리터럴을 이용해서 간소화 시킬 수 있는데 템플릿 리터럴은 1. `을 사용한다 2. 변수에 할당한 문자열처럼 단순 문자열이 아니라면 특별한 지정자로 감싸야 한다. ${} 같이 템플릿 리터럴은 문자열과 변수를 연결할 때 가장 자주 사용한다. 그렇지만 자바스크립트 동작을 수행할 수도 있다. 대규모 데이터 변환이 필요한 경우에는 템플릿 리터럴 외부에서 처리하고 결과값을 변수에 할당해서 사용한다. 다음 글들에서는 데이터 컬렉션을 다루는 방법을 살펴보려 한다.