전체 글
[Java] JVM, JRE, JDK?
자바 개발자라면 JVM, JRE, JDK는 필연적으로 마주하게 되는 용어인 것 같습니다. 이들이 왜 존재하고 어떻게 동작하는지, 어떤 차이점이 있는지 개념적으로만 간단하게 정리해보고자 합니다. JVM (Java Virtual Machine) - 자바 가상 머신 기계(Machine)는 "동력에 의해 일정한 일을 하는 도구"라는 뜻을 가지고 있죠. JVM도 마찬가지입니다. 다만 JVM의 역할은 자바 코드(.java)가 컴파일되어 만들어진 자바 바이트코드(.class)를 하드웨어가 이해할 수 있도록 기계어로 번역을 해주는 것이죠. [Java] 자바(Java)의 역사에서 언급했듯, 자바 이전에는 컴파일된 코드가 플랫폼(또는 OS)와 CPU에 종속적이어서, 한번 컴파일된 파일로 다른 플랫폼이나 하드웨어 환경에서 ..
[Java] 자바(Java)의 역사
자바(Java) 언어는 1991년 6월 썬 마이크로시스템즈(Sun Microsystems)에 다니던 제임스 고슬링(James Gosling)이 만들었습니다. 왜 새로운 언어를 만들었나? 자바는 초기에 토스터, 전자레인지, 리모콘 등의 가전제품에 사용되는 임베디드 소프트웨어를 위해 만들어졌습니다. 이미 C, C++등 하드웨어에서 쓰이는 언어가 있었는데 왜 새롭게 언어까지 만들었을까요? 당시 대부분의 컴퓨터 언어는 특정 플랫폼(또는 OS)이나 하드웨어에 맞게 컴파일 되도록 설계되었습니다. 따라서 플랫폼마다 그리고 각 플랫폼에서 쓰이는 CPU마다 해당 환경에 맞는 컴파일러가 필요했기때문에 개발 비용이 비싸고 오래걸렸죠. 예를 들어 C++ 프로그램의 경우 모든 종류의 CPU에 맞게 컴파일될 수 있지만 플랫폼과 ..
2021년 생각정리
내가 해온 것들을 생각해보면 올 한 해는 인생에서 가장 특별하고도 신기한 해였다. 왜 올해가 특별한 해였는지 설명하기 전에 과거의 나의 생각을 조금 정리해보려고 한다. 2020년까지는 내가 어떠한 목표를 세운다기보다는 일단 인생에서는 정답 같은 정해진 루틴이 있고 그 루틴대로 따라가야 한다는 강박이 있었던 거 같다. 중, 고등학교 어느 시기부터 정답 또는 정답에 가장 근접한 방법을 찾아서 배우고 그대로 하고 싶어 했다. 어느 순간 나 자신에 대한 믿음이 떨어졌던 계기가 있었던 것 같다. 예를 들어 어릴 때 하던 온라인 게임에서부터 내가 하고 싶은 대로만 하다 보면 공략집을 보고 최고로 효율적인 루틴으로 플레이하는 사람들에게 뒤쳐졌다. 짜증이 났다. 뒤쳐지는 게 기분이 나빴던 건지 정답을 뒤늦게 깨달은 나..
[Javascript] 클로저(Closure)란?
클로저 정의 클로저(Closure)는 자유변수에 접근할 수 있는 내부함수 또는 그 환경을 포함하는 코드를 지칭한다. MDN(Mozilla Developer Network) [모질라 재단및 다른 IT기업들이 사용하는 웹 개발을 위한 문서 저장소이자 수많은 프로그래밍 입문자들을 위한 학습 장소] 에서는 다음과 같이 정의한다. “A closure is the combination of a function and the lexical environment within which that function was declared.” 클로저는 함수와 그 함수가 선언됐을 때의 렉시컬 환경(Lexical environment)과의 조합이다. 응? 자유변수가 무엇인가? 렉시컬 환경은 또 무엇인가? 분명 정의는 됐는데 알아..
[Python] json 데이터 다루기
json 읽어오기 (json -> dict) import json # json 파일 읽어오기 with open('./test.json', 'r', encoding='UTF8') as json_file: sample_json = json.load(json_file) print(sample_json) # 출력: {'이름': '홍길동', '나이': 25, '특기': ['농구', '도술'], '가족관계': {'아버지': '홍판서', '어머니': '춘섬'}, '결혼 여부': True} # json 문자열 읽어오기 json_str = ''' { "이름": "홍길동", "나이": 25, "특기": ["농구", "도술"], "가족관계": { "아버지": "홍판서", "어머니": "춘섬" }, "결혼 여부": true ..
[Java] JSON 파싱하기 (jackson/gson/json-simple)
JSON 파싱시 자주 쓰이는 라이브러리 3개로 JSON을 파싱하는 예제를 소개합니다. 라이브러리 Gson (https://mvnrepository.com/artifact/com.google.code.gson/gson) Jackson (https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind) JSON.simple (https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple) https://github.com/jhl8041/code-collection/tree/main/json-parsing
[Python] Generator란?
Generator란? - iterator를 생성해주는 함수, 함수안에 yield 사용 - lazy evaluation으로 계산결과 값이 필요할때까지 계산을 늦춘다 - 무한한 순서가 있는 객체를 모델링 가능 iterator vs generator - iterator는 데이터에 순차적으로 접근이 가능하지만 호출해야하는 모든 데이터를 미리 메모리에 적재해야한다. - 반면 generator는 호출할 때마다 다음에 나올 데이터를 계산해서 반환한다. 메모리 효율이 좋다. - 예를 들어 100억번까지 호출이 필요한 iterator를 만드려면 메모리에 100억개의 데이터를 저장해야하지만, generator는 100억까지를 순차적으로 계산할 수 있는 로직만 있으면 된다. # iterator a = iter([1,2,3,..
[Python] iterable과 iterator
iterable 이란? - iterable 은 member를 하나씩 차례로 반환 가능한 object를 말한다. - 대표적인 예로 sequence type인 list, str, tuple 이있고 non-sequencce type인 dict, file 그리고 __iter__() 또는 __getitem__()이 define된 모든 object를 포함한다 # sequence type for x in range(5): print(x) #출력: 1,2,3,4 for x in [2,5,6,7]: print(x) #출력: 2,5,6,7 # non-sequence type sample = {'a':1,'b':2,'c':3,'d':4} for x in sample: print(x) #출력: a,b,c,d 위처럼 for문을..
[Javascript] 호이스팅(Hoisting)이란?
호이스팅(Hoisting)이란? - 함수 안에 있는 선언을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것을 의미한다 - 자바스크립트 함수는 실행되기 전에 함수 안에 선언된 변수값을 모아서 최상단에 선언한다. - 따라서 변수를 어느 위치에 선언하든지 함수의 가장 위로 끌어올려져서 실행된다. 실행순서: 1. 자바스크립트 Parser가 함수 실행 저 해당 함수를 한 번 훑는다 2. 함수 안에 존재하는 변수/함수선언에 대한 정보를 기억하고 있다가 먼저 실행시킨다. 주의사항: - 유효범위: 함수블록 {}안에서 유효 - 실제로 코드가 끌어올려지는 건 아니며, 자바스크립트 Parser 내부적으로 끌어올려서 처리한다. - 실제 메모리에서는 변화가 없다. 호이스팅 대상 var 로 선언된 변수와 함수선언문만..
[Javascript] var, let, const 차이
자바스크립트에서 변수를 선언할 때 var, let, const가 쓰이는 것을 자주 보았을 것이다. var 는 선언 방식에 있어서 큰 단점을 가지고 있다 var name = 'Jaehyung' console.log(name) // Jaehyung var name = 'Dayoung' console.log(name) // Dayoung 위 같은 코드를 작성했을 시, 이미 선언된 변수를 다시 선언했음에도 불구하고 에러가 나오지 않고 각각 다른 값이 출력된다. 변수를 유연하게 사용하기에는 좋을 수 있으나, 코드가 길어지고 변수가 많아지면 초기에 선언된 값이 바뀌면서 코드에 큰 영향을 끼칠 수 있다. 따라서 ES6 이후에 이를 보완하기 위해 let과 const가 추가됐다 let name = 'Dayoung' co..