개발 (Development)
-
1. Question 함수는 프로그래밍 언어에서 다른 매개변수를 활용하여 반복적인 루틴을 하도록 만든 장치이다. C나 자바같은 언어에서는 변수는 변수, 함수는 함수로 완전히 분리되어 있다. add(a, b)라고 정의된 함수의 출력을 변수에 저장하는 것은 가능하나, 함수 그 자체 add를 변수에 할당하는 것은 불가능하다. 하지만, 파이썬에서는 이러한 것이 가능하다. 함수를 일급 객체 (Fist-class citizen)으로 취급해주기 때문이다. 일급 객체(First-class citizen)란, OOP에서 사용되는 개념 중 하나로 아래의 조건을 만족하는 객체를 의미한다. 변수 혹은 데이터 구조(자료구조) 안에 담을 수 있어야 한다. 매개변수로 전달할 수 있어야 한다. 리턴값으로 사용될 수 있어야 한다. 다..
[파이썬 심화] 함수의 변수처럼 사용하는 법 - 일급객체 (First-class Citizen)1. Question 함수는 프로그래밍 언어에서 다른 매개변수를 활용하여 반복적인 루틴을 하도록 만든 장치이다. C나 자바같은 언어에서는 변수는 변수, 함수는 함수로 완전히 분리되어 있다. add(a, b)라고 정의된 함수의 출력을 변수에 저장하는 것은 가능하나, 함수 그 자체 add를 변수에 할당하는 것은 불가능하다. 하지만, 파이썬에서는 이러한 것이 가능하다. 함수를 일급 객체 (Fist-class citizen)으로 취급해주기 때문이다. 일급 객체(First-class citizen)란, OOP에서 사용되는 개념 중 하나로 아래의 조건을 만족하는 객체를 의미한다. 변수 혹은 데이터 구조(자료구조) 안에 담을 수 있어야 한다. 매개변수로 전달할 수 있어야 한다. 리턴값으로 사용될 수 있어야 한다. 다..
2022.09.12 -
1. Introduction 자바의 철학 중에는 "가능한 간결하게" 라는 것이 있는데, 이 덕분인지 키워드도 50개밖에 안되고 기본적인 변수를 다루는 것도 C와 같이 사용된다. 물론 실제로 코드가 간결한지는 음...ㅋㅋㅋ 문제는 철저하게 객체지향 언어로 설계된 자바는 모든 것을 클래스 또는 객체로 표현해야 하는데, 간단한 정수나 문자까지 클래스로 표현하기에는 너무 복잡하고 번거롭다는 것. 이를 해결하는 방법이 바로 프리미티브 타입 (원시 타입, Primitive type)이다. 2. Explanation 프리미티브 타입은 기본 변수형에 해당하는 int, char 등의 타입을 클래스로 두지 않고 특수한 기본 변수로 취급하겠다는 의미이다. 덕분에 이 원시타입은 복사, 파라메터로 전달될 때 주소를 사용하지 않..
프리미티브 타입 (Primitive Type)과 그 영향 (Object.equals)1. Introduction 자바의 철학 중에는 "가능한 간결하게" 라는 것이 있는데, 이 덕분인지 키워드도 50개밖에 안되고 기본적인 변수를 다루는 것도 C와 같이 사용된다. 물론 실제로 코드가 간결한지는 음...ㅋㅋㅋ 문제는 철저하게 객체지향 언어로 설계된 자바는 모든 것을 클래스 또는 객체로 표현해야 하는데, 간단한 정수나 문자까지 클래스로 표현하기에는 너무 복잡하고 번거롭다는 것. 이를 해결하는 방법이 바로 프리미티브 타입 (원시 타입, Primitive type)이다. 2. Explanation 프리미티브 타입은 기본 변수형에 해당하는 int, char 등의 타입을 클래스로 두지 않고 특수한 기본 변수로 취급하겠다는 의미이다. 덕분에 이 원시타입은 복사, 파라메터로 전달될 때 주소를 사용하지 않..
2022.08.30 -
1. Introduction 이번 포스트는 자바 개발을 위한 Java Development Kit (JDK)를 설치하는 방법을 설명한다. 자바는 오라클 재단에 인수되어 현재 오라클 사이트에서 다운받게 되어있다. 자바 설치는 JDK 설치와 환경변수 설정으로 나뉜다. 2. Installation 2.1 JDK 설치 구글에 JDK를 검색하고 "JDK Download"에 들어간다. 운영체제에 맞는 버전을 고른다. 이후 오라클에 로그인하고 다운받으면 된다. 다운완료되면 파일 실행하고 설치하면 된다. 중간에 설치경로를 묻는데 이 설치경로가 중요하니 웬만하면 외워두자 (환경변수 설정할 때 사용). 2.2 환경변수 설정 [제어판] - [시스템] -[고급 시스템 설정 보기] - [환경변수] 아래 [시스템 변수]에 "Pa..
자바 설치 (with 환경변수 설정)1. Introduction 이번 포스트는 자바 개발을 위한 Java Development Kit (JDK)를 설치하는 방법을 설명한다. 자바는 오라클 재단에 인수되어 현재 오라클 사이트에서 다운받게 되어있다. 자바 설치는 JDK 설치와 환경변수 설정으로 나뉜다. 2. Installation 2.1 JDK 설치 구글에 JDK를 검색하고 "JDK Download"에 들어간다. 운영체제에 맞는 버전을 고른다. 이후 오라클에 로그인하고 다운받으면 된다. 다운완료되면 파일 실행하고 설치하면 된다. 중간에 설치경로를 묻는데 이 설치경로가 중요하니 웬만하면 외워두자 (환경변수 설정할 때 사용). 2.2 환경변수 설정 [제어판] - [시스템] -[고급 시스템 설정 보기] - [환경변수] 아래 [시스템 변수]에 "Pa..
2022.08.29 -
1. Introduction 자바는 1995년 제임스 고슬링에 의해 개발된 프로그래밍 언어이다. 지금까지 18번째 버전이 출시될 정도로 오랫동안 사용되고 유지보수가 되어온 대표적인 언어이다. 현재 오라클에 인수되어 설치하려면 오라클 홈페이지에 가서 다운받아야 한다. 2. Features 자바의 특징이라고 하면 가장먼저 Java Virtual Machine (JVM)이라고 볼 수 있다. 일반적으로 코드의 작동 과정은 코드작성 - 어셈블리어 변환 - 기계어 변환 - 실행파일 생성으로 진행 (e.g. C, C++)된다. 여기서 원시 코드를 어셈블리어로 바꿔주는 것을 컴파일러라고 하는데, 컴파일 역시 여러 과정으로 나뉜다. 컴파일 과정에서 원시 코드를 분석한 뒤 생성되는 것을 Intermediate Code (..
자바를 사용해야 하는 이유 (자바의 특징, 장단점)1. Introduction 자바는 1995년 제임스 고슬링에 의해 개발된 프로그래밍 언어이다. 지금까지 18번째 버전이 출시될 정도로 오랫동안 사용되고 유지보수가 되어온 대표적인 언어이다. 현재 오라클에 인수되어 설치하려면 오라클 홈페이지에 가서 다운받아야 한다. 2. Features 자바의 특징이라고 하면 가장먼저 Java Virtual Machine (JVM)이라고 볼 수 있다. 일반적으로 코드의 작동 과정은 코드작성 - 어셈블리어 변환 - 기계어 변환 - 실행파일 생성으로 진행 (e.g. C, C++)된다. 여기서 원시 코드를 어셈블리어로 바꿔주는 것을 컴파일러라고 하는데, 컴파일 역시 여러 과정으로 나뉜다. 컴파일 과정에서 원시 코드를 분석한 뒤 생성되는 것을 Intermediate Code (..
2022.08.28 -
1. Introduction 평소에 나는 페이지 소스를 보고 싶은 때 오른쪽 마우스를 눌러서 보는 편인데, 오른쪽 마우스가 방지된 사이트에서는 이 방법을 쓸 수 없다. 2. Method 핵심은 오른쪽 마우스를 막아놔도 단축키는 여전히 먹힌다는 것이다. 페이지 소스는 Ctrl + U. 개발자 모드는 F12 또는 Ctrl + Shift + I를 이용하면 된다.
오른쪽 마우스가 안먹힐 때 페이지 소스 & 개발자 모드 보는 방법 [단축키]1. Introduction 평소에 나는 페이지 소스를 보고 싶은 때 오른쪽 마우스를 눌러서 보는 편인데, 오른쪽 마우스가 방지된 사이트에서는 이 방법을 쓸 수 없다. 2. Method 핵심은 오른쪽 마우스를 막아놔도 단축키는 여전히 먹힌다는 것이다. 페이지 소스는 Ctrl + U. 개발자 모드는 F12 또는 Ctrl + Shift + I를 이용하면 된다.
2022.07.27 -
1. Introduction c와 달리 자바나 파이썬에서 문자열은 immutable이다. 즉, 초기화한 뒤로 문자열을 수정할 수 없다. 불변타입을 지정하는 const같은 명령어가 없는 것도 아니고 대체 왜 이렇게 불편하게 했을까? 2. Cause 2.1 참조 횟수 string 타입은 중복 참조가 매우 많다. 다이얼로그 메세지에서 등장하는 문자열은 물론이고, 대부분의 프로그램에서 하드 코딩된 문자열은 참조만 할 뿐, 수정할 일이 없다. 2.2 스레드 보안 이건 다른 변수도 마찬가지겠지만, Shared area에 있는 변수들은 변화에 민감하다. 어떤 스레드가 함부로 값을 바꿨다가 다른 수 많은 스레드가 이상한 값을 읽을 수도 있다. 2.3 해싱 내가 생각하기로는 이쪽이 가장 큰 이유다. 수정가능한 자료형은 ..
[파이썬 철학] 문자열이 immutable 타입인 이유1. Introduction c와 달리 자바나 파이썬에서 문자열은 immutable이다. 즉, 초기화한 뒤로 문자열을 수정할 수 없다. 불변타입을 지정하는 const같은 명령어가 없는 것도 아니고 대체 왜 이렇게 불편하게 했을까? 2. Cause 2.1 참조 횟수 string 타입은 중복 참조가 매우 많다. 다이얼로그 메세지에서 등장하는 문자열은 물론이고, 대부분의 프로그램에서 하드 코딩된 문자열은 참조만 할 뿐, 수정할 일이 없다. 2.2 스레드 보안 이건 다른 변수도 마찬가지겠지만, Shared area에 있는 변수들은 변화에 민감하다. 어떤 스레드가 함부로 값을 바꿨다가 다른 수 많은 스레드가 이상한 값을 읽을 수도 있다. 2.3 해싱 내가 생각하기로는 이쪽이 가장 큰 이유다. 수정가능한 자료형은 ..
2020.08.23 -
1. Introduction 파이썬에서 in 연산자는 검색이나 순회에 사용된다. 순회는 항상 전체를 순회하니까 효율의 개선이 필요하다고 느껴지 않지만, 검색은 그렇지 않다. 이번 포스트에서는 in의 검색 효율이 자료구조에 따라 어떻게 바뀌는지를 알아본다. 2. Detail 파이썬에서 리스트와 튜플은 array로 구현된다. 따라서, 알맞은 원소를 찾아내기 위해서는 array를 처음부터 끝까지 순회할 수 밖에 없다. 리스트와 튜플에 대한 in 연산자의 시간복잡도는 $O(n)$이다. 반면에, 셋과 딕셔너리는 hash로 구현된다. hash에 검색 성능이 hash function에 의존하는 만큼, 성능이 최선일 때 $O(1)$에서 최악일 때 $O(n)$까지 요동친다. 웬만한 경우에서, 특히 고정된 리스트에서 검색..
파이썬에 in 연산자의 시간복잡도는 얼마일까?1. Introduction 파이썬에서 in 연산자는 검색이나 순회에 사용된다. 순회는 항상 전체를 순회하니까 효율의 개선이 필요하다고 느껴지 않지만, 검색은 그렇지 않다. 이번 포스트에서는 in의 검색 효율이 자료구조에 따라 어떻게 바뀌는지를 알아본다. 2. Detail 파이썬에서 리스트와 튜플은 array로 구현된다. 따라서, 알맞은 원소를 찾아내기 위해서는 array를 처음부터 끝까지 순회할 수 밖에 없다. 리스트와 튜플에 대한 in 연산자의 시간복잡도는 $O(n)$이다. 반면에, 셋과 딕셔너리는 hash로 구현된다. hash에 검색 성능이 hash function에 의존하는 만큼, 성능이 최선일 때 $O(1)$에서 최악일 때 $O(n)$까지 요동친다. 웬만한 경우에서, 특히 고정된 리스트에서 검색..
2020.08.12 -
1. Introduction 파이썬으로 이미지 관련 코딩을 하다보면, 두 이미지가 같은지 검사해야 할 일이 생긴다. 직접 짜야한다면, 크기를 비교하던가, 각 픽셀값으로 머클트리를 만들던가 하겠지만 파이썬에서는 간편한 메서드를 지원한다. filecmp 라이브러리의 cmp 메서드는 두 파일간의 동일성을 반환한다. 또한, 파일의 크기를 알아내기 위해서는 os.path의 getsize 메서드를 이용하면 된다. 2. Practice from filecmp import cmp print(cmp('sampleimage_1.jpg','sampleimage_1.jpg')) print(cmp('sampleimage_1.jpg','sampleimage_2.jpg'))
파이썬에서 파일의 동일성을 검사하는 간단한 방법 + 파일의 크기1. Introduction 파이썬으로 이미지 관련 코딩을 하다보면, 두 이미지가 같은지 검사해야 할 일이 생긴다. 직접 짜야한다면, 크기를 비교하던가, 각 픽셀값으로 머클트리를 만들던가 하겠지만 파이썬에서는 간편한 메서드를 지원한다. filecmp 라이브러리의 cmp 메서드는 두 파일간의 동일성을 반환한다. 또한, 파일의 크기를 알아내기 위해서는 os.path의 getsize 메서드를 이용하면 된다. 2. Practice from filecmp import cmp print(cmp('sampleimage_1.jpg','sampleimage_1.jpg')) print(cmp('sampleimage_1.jpg','sampleimage_2.jpg'))
2020.08.12