CS
6 posts
Pythonic하게 코드 작성하기 - 리스트 컴프리헨션, 제너레이터, range, enumerate

본 포스팅은 코딩테스트를 염두에두고 작성한 파이썬 코드 작성법이며, 파이썬 알고리즘 인터뷰(박상길 지음, 2020)를 읽으며 정리한 내용임을 밝힙니다. 이전 포스팅에 이어서, 본 포스팅에서는 리스트 컴프리헨션, 제너레이터, Range, Enumerate에 대해서 알아보도록 하겠습니다. 다시한번 강조드리지만, 기존에 다 알고 있던 기능이라도 한번쯤 되돌아 보시면서 코드를 작성하는 법을 익히는 시간이였으면 좋겠습니다. 리스트 컴프리헨션 파이썬은 , 와 같은 함수형 기능을 지원하고, 또한 지원합니다. 이는 아주 오래전부터(1994년) 람다를 지원해왔고, 이보다 더 유용한건 입니다. 리스트 컴프리헨션이란 무엇일까요? 기존 리스트를 기반으로 새로운 리스트를 만드는 구문 파이썬 2.0부터 지원되었으며, 위 처럼 함수형 기능을 사용하는 것 보다 훨씬 가독성이 좋습니다. 파이썬 2.7부터는 리스트 말고도 딕셔너리 등도 가능하도록 추가되었습니다. 제너레이터 제너레이터란, 루프의 반복(Itera…

September 12, 2021
CS
Pythonic하게 코드 작성하기 - 인덴트, 네이밍컨벤션, 타입힌트

본 포스팅은 코딩테스트를 염두에두고 작성한 파이썬 코드 작성법이며, 파이썬 알고리즘 인터뷰(박상길 지음, 2020)를 읽으며 정리한 내용임을 밝힙니다. 프로그래밍 언어는 도구다. 어떤 알고리즘을 작성할 때 언어는 도구에 불과한게 맞습니다. 다만, 중요하게 생각해야할 점은 아무리 쉬운 도구라도 제대로 사용법을 숙지해야 제대로 사용할 수 있다. 입니다. 같은 칼이라도, 저의 칼질과 횟집 사장님의 칼질은 차원이 다릅니다. 저 또한 파이썬 문법에 대해 굉장히 깊이있는 내용까지 숙지하지 않고 현업에서, 혹은 학교 과제로 어설프게 익힌 언어로 코딩테스트를 시도할 때면 흔히 말하는 을 굉장히 많이 했습니다. 비유하자면 에 집중해야 하는데, 어떤 칼을 쓸지만 고민하다가 시간이 다 지나버리는 거라고 할까요.. 따라서 파이썬이 쉬운 언어고 생산성이 좋은 언어로 알려졌다 하더라도 왜 쉽고 생산성이 좋은지 그 원리를 알지 못하면 제대로 그 장점을 활용하긴 어려울 것입니다. 코딩테스트에서도 마찬가지 입니…

September 05, 2021
CS
비대칭 암호화와 RSA 알고리즘

비대칭 암호화는 암호화, 복호화에 사용하는 키가 2개인 암호화 방식을 의미합니다. 그 키는 Public Key, Private Key로 나뉩니다. 일반적으로 Public Key는 자물쇠, Private Key는 그 자물쇠에 맞는 열쇠라고 생각하면 편합니다. 다만 Public Key, Private Key 둘 다 서로 암호화, 복호화에 사용할 순 있습니다. 일반적으로 그렇다는 겁니다. 출처: codedragon.tistory.com 방식 만약에 A 서버와 B 클라이언트가 정보를 교환한다고 해봅시다. A는 B에게 공개키를 제공합니다. 그리고 B가 정보를 보낼 때 공개키로 암호화를 해서 보냅니다. 이렇게 되면 B가 보낸 정보는 A의 개인키로 밖에 열지 못하기 때문에 유출되더라도 위험하지 않으며 A에게만 비공개적으로 정보를 보낼 수 있는 것입니다. HTTPS HTTPS 프로토콜 상에서 통신하는 A 서버와 B 클라이언트가 서로 정보를 교환해야 한다고 가정해봅시다. HTTPS란? SSL 프…

April 05, 2021
CS
JVM의 Garbage Collection

Garbage Collection C/C++ 에서는 메모리를 개발자가 명시적으로 해제하지만 JVM 기반 어플리케이션에서는 명시적으로 해제를 하지 않습니다. JVM의 Garbage Collector가 더이상 사용되지 않는 인스턴스를 찾아내서 메모리를 삭제하는 행위를 합니다. 동작 방식 Stop The World 앞서 말씀드렸듯 는 자동으로 JVM이 판단하여 사용되지 않는 인스턴스의 할당을 해제하는 역할을 합니다. 다만 메모리를 해제하기 위해서는 자바 어플리케이션의 GC를 실행하기 위한 쓰레드를 제외하고 모두 멈추게 되고, GC가 완료된 후에야 다른 쓰레드가 작동하게 됩니다. 이러한 상태를 라고 합니다. Mark and Sweep 상태에서 GC는 스택의 모든 변수나 Reachable 객체를 스캔한다. 여기서 사용되고 있는 메모리를 찾아내는 과정이 , 식별되지 않은 객체를 메모리에서 제거하는 과정이 이다. GC 튜닝 GC 튜닝이란 이러한 Stop The World 상태의 시간을 …

April 04, 2021
CS
메모리 관리 기법과 가상 메모리

본 포스팅은 한양대학교 컴퓨터소프트웨어학부 유민수 교수님의 운영체제 과목 강의 자료와 수업내용을 참고하였습니다. 메모리 관리 기법과 가상 메모리 가상메모리를 설명하기 위해서는 OS의 메모리 관리 기법에 대해서 알고있어야 합니다. CPU는 스케줄링 알고리즘을 통해서 메모리에 올릴 프로세스를 선택하게 됩니다. 이 과정에서 메모리의 관리는 OS에서 아주 중요한 부분이죠. 메모리 관리 기법의 두가지 목적 프로세스 별로 하나의 단일하고 연속적이고, 보호가 되는 메모리의 공간을 할당하기 위함. 실제 물리적 메모리 공간보다 더 많은 공간을 사용하기 위해서 메모리 관리 기법 연속적 Address Binding Address Binding 특정 메모리의 주소에 코드와 데이터를 적재하는 것. 연속적인 메모리의 할당 1번 목적이 기억나시나요? CPU는 연속적인 메모리의 할당을 요구합니다. IMG_0A580D86915E-1 이런식으로 프로세스간에 연속적으로 메모리를 할당하도록 하게 되어있고, 남는 공간…

April 03, 2021
CS
운영체제 프로세스 동기화 기법(Semaphore, Mutex)

동기화란? 다수의 프로세스, 혹은 쓰레드에서 같은 공유 자원에 동시에 접근해야 하는 경우가 생깁니다. 해당 경우에, 프로세스들이 같은 공유자원에 접근할 때 일관된 순서가 정해지지 않으면 데이터의 일관성이 깨지게 됩니다. 그래서 프로세스가 동시에 같은 공유자원에 접근할 때 접근 순서를 보장해주는 과정이 입니다. Race Condition 다수의 프로세스들이 공유 자원에 동시에 접근하고 있는 상황을 의미합니다. Critical section Race Condition에 놓인 프로세스들의 영역, 즉 공유자원이 여러 프로세스들에 의해 동시 다발적으로 Access될 수 있는 영역입니다. Critical Section Problem의 해결법 공유 자원의 접근 순서를 제어하기 위해서 만족해야할 은 다음과 같습니다. Mutual Exclusion(상호배제) 하나의 프로세스, 혹은 쓰레드가 Critical Section에서 실행 중이면 다른 프로세스, 혹은 쓰레드가 접근하면 안된다. Progre…

April 02, 2021
CS