전체 446

Python의 Hashable (Dictionary의 key가 되는 기준은 무엇일까?)

Dictionary의 key는 Immutable 객체만 가능? Python에서 dictionary(dict)는 강력한 기능을 가지고 있다. dict의 정수, 문자열, 심지어 tuple도 key로 들어갈 수 있다. d = dict() d[1] = 1 d["hi"] = 2 d[(1,2,3)] = 3 "파이썬 알고리즘 인터뷰"라는 책을 읽으면서 다음과 같은 문구가 있었다[1]. 특히 파이썬의 딕셔너리는 해시할 수만 있다면 숫자뿐만 아니라, 문자, 집합까지 불변 객체를 모두 키로 사용할 수 있다. 나는 이 때 이 문장의 전체를 보지 못하고, 보고싶은 단어만 보았다. 이 문구의 의미가 "dict의 key는 불변 객체만 가능하다"라고 이해했다. 그래서 궁금했다. Immutable 객체만 key가 될 수 있는 이유가..

고민하기 2021.07.12

Web Server와 Web Application Server(WAS)

Spring boot는 WAS 설정이 필요없는 Framework Jhipster를 설치하고 환경세팅하려다가 이러한 문구를 발견하였다[1]. Spring boot : 스프링에서 어려운 설정이나 WAS에 대한 설정없이 바로 개발에 들어갈 수 있도록 만드는 프레임워크 WAS라는 단어가 자주 보였는데, 나는 이러한 단어를 본 적이 없다. 찾아보니 풀어쓰면 Web Application Server였다. 아직 명확한 뜻을 이해하지 못했다. WAS가 뭘까? WAS의 구조 Web Application Server는 Web Server를 포함하는 개념이라고 한다. 정확히는 Web server + Web Container이다. 그리고 Web Container에 대한 설명에서 이러한 문구를 발견했다[2]. JSP와 Serv..

고민하기 2021.07.11

[파이썬 알고리즘 인터뷰] 2부 - 파이썬 (~ 4장 - 빅오, 자료형)

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 4장 빅오, 자료형 1) 빅오 빅오란? 입력값이 무한대로 향할 때 함수의 상한을 설명하는 수학적 표기법 = 점근적 실행 시간(Asymptotic Running Time)을 표기할 때 가장 널리 쓰이는 수학적 표기법 중 하나 시간 복잡도(Time Complexity) = 점근적 실행 시간 어떤 알고리즘을 수행하는 데 걸리는 시간을 설명하는 계산 복잡도(Computational Complexity) 빅오로 시간 복잡도를 표현할 때는 최고차항만 표기, 계수 무시 (ex) $$4n^2+3n+4 \approx O(n^2)$$ 빅오의 종류 1 O(1) 해시 테이블 상수 시간 매우 가치있음 2 O(log n) 이진 탐색 입력에 영..

책읽기 2021.07.09

Spring Rest API 튜토리얼

아래 사이트를 참조함 https://www.leafcats.com/173 같은 패키지에 RestTestController 클래스 만들어줌 아래 코드 삽입 @RestController public class RestTestController { @RequestMapping("/restTest") public String restTest(@RequestParam String str){ return str + " : test 완료"; } } Spring REST API 생성, 호출 REST는 Representational State Transfer의 약자이다. 다른 웹 시스템에서 제공하는 기능을 사용하고자 할 때 사용자는 API의 URL만 알면 되기 때문에 SOAP보다 사용이 간편하다. 구글, 네이버 등 많은..

Spring Hello world 출력

구성 Intellij Ultimate, Gradle, openjdk 11 Openjdk11 설치 >> choco install openjdk11 다음은 아래 개발환경세팅 블로그 참조함 (다만 openjdk 11이라는 점만 차이남 https://jetalog.net/92 프로젝트 생성시 Spring Initializr로 생성하기 Group은 보통 도메인 역순 jar는 spring boot 내장, War는 원하는 WAS에 배포할 때 사용 Dependency Developer Tools > Spring Boot DevTools Developer Tools > Lombok: Annotation Web > Spring Web: Spring Framework Template Engines > Thymeleaf: S..

React Native Tutorial (JSX, Component, State, Prop)

이 글은 "React Native docs의 tutorial"을 번역한 글입니다. https://reactnative.dev/docs/tutorial Learn the Basics · React Native React Native is like React, but it uses native components instead of web components as building blocks. So to understand the basic structure of a React Native app, you need to understand some of the basic React concepts, like JSX, components, state, and pr reactnative.dev 이 글을 통해 얻..

[6월 결산] 핑계가 난무하는 최악의 달

7월도 일주일이 지난 현재 6월 결산. 기간은 6월 12일 ~ 6월 30일 (약 3주)이다. 시작이 반이랬거늘... 계획대로 진행되는 것이 하나도 없다. 6월 계획, 진행된 내용, 핑계, 앞으로의 계획을 차례로 정리하여 반성하고 다시 시작할 것이다! 6월 계획(이었던 것) 먼저 6월에 진행되었으면 했던 계획들이다. 프로젝트 - 개발 환경 셋업 - React Native / Spring의 기본 통신 테스트 코딩 테스트 - 파이썬 알고리즘 테스트 1권 끝내기 책읽기 - 클린코드 정리 여러가지 상황들을 고려하여 (전체 계획에 비해서는)타이트하게 잡지 않았다고 생각했다. 그러나 이 계획들을 읊어보니 현실이 초라하다... 진행된 내용 계획에 비해 진행된 내용들을 정리해보았다. 프로젝트 - [>>>>>>>=== 7..

빅오(O)는 왜 최악의 경우가 아닐까

상한보다 최악이 있는가 헷갈리는 부분이라 고민을 해보고 싶어서 작성한다. 먼저 시간 복잡도에서 빅오는 충분히 큰 입력을 가정하며, 입력에 대한 연산수로 알고리즘의 실행 시간을 표기하는 방법이다. 이 때 빅오는 상한, 빅오메가는 하한, 빅세타는 평균의 의미로 사용한다. 그런데 나는 상한(Upper Bound)라는 말이 왜 최악과 같지 않은지 와닿지 않았다. 위와 아래로 일정한 범위를 이루고 있을 때, 위쪽의 한계 상한의 정의는 위쪽의 한계. 이보다 더 높을 수 없기 때문에 시간을 기준으로 가장 오래걸리는 최악이다. 그런데 왜 최악과 상한을 분리시켜 봐야하는가? 그림을 그려보았다. 알고리즘에는 입력 데이터의 수, 그리고 정렬의 경우 데이터 배열에 의해 최선/최악의 연산수가 결정된다. 어떤 알고리즘의 연산수가..

고민하기 2021.07.02

구글 파이썬 스타일 가이드 - 2.12 Default Argument Values (Mutable vs Immutable)

1. 구글 파이썬 가이드 - Default Argument Values "파이썬 알고리즘 인터뷰"라는 책을 쭉 읽으면서 그냥 넘어가지 못한 구간이 있다. 구글 파이썬 스타일 가이드를 설명하던 중, 아래와 같은 글귀와 코드를 보여주었다. 함수의 기본 값으로 가변 객체(Mutable)를 사용하지 않아야 한다. # No def foo(a, b=[]): pass # No def foo(a, b: Mapping = {}): pass # Yes def foo(a, b=None): if b is None: b = [] # Yes def foo(a, b: Optional[Sequence] = None): if b is None: b = [] 위 코드에서 "No"라는 comment에 적힌 함수들을 사용하지말고, "Yes..

고민하기 2021.06.29