전체 글 126

싱글톤, 프록시, 데코레이터 패턴

객체 지향 디자인 패턴 종류 1. 싱글톤 패턴 이번엔 싱글톤 패턴에 대해서 알아보겠습니다. 🙂 싱글톤 패턴이란 인스턴스를 하나만 만들어 사용하기 위한 패턴입니다. 예를 들어 단 하나의 관리자 계정을 여러 명이서 사용하는 경우입니다. 이런 경우 어떻게 코딩하면 좋을까요? 하나의 Admin 계정을 여러 명이 공유해서 사용하는 프로그램을 짜보겠습니다. package exSingleton; // Admin 클래스 public class Admin { // 정적 참조 변수 static Admin one_id; // 객체 생성 방지 private Admin() {}; // 정적 메소드 public static Admin getInstance() { // 참조 변수 == null일 때 객체 생성 if (one_id ..

12월 서울시 코로나 확진자 및 사망자 수 시각화

1. 데이터 수집 캐글에 있는 국내 코로나 환자들에 대한 데이터를 분석해보도록 하겠습니다. www.kaggle.com/hongsean/covid19-in-korea-dataset?select=COVID_Korea_geo.csv 전체 데이터에서 필요한 것들만 뽑아내는 과정을 거친 뒤에 시각화를 진행하였습니다. COVID_Korea_geo.csv로부터 12월 서울에 대한 정보만 뽑아내 시각화할 것입니다. 우선 필요한 라이브러리인 pandas와 plotly를 가져오고 최대 행 출력 수도 변경했습니다. import pandas as pd import plotly.graph_objects as go pd.set_option('display.max_row', 100) COVID_Koread_geo.csv 파일을 불..

Pickle과 Write 차이점 + With ... as 구문

바이너리 파일 저장 머신러닝 모델을 학습하는데는 오랜 시간이 걸리기 때문에 매 번 학습을 시키는 것은 비효율적입니다. 그래서 이전 포스팅에선 학습한 모델들을 바이너리 파일로 저장했습니다. western-sky.tistory.com/16?category=829395 머신러닝을 활용한 중고차 거래가 예측 - 회귀모형 모델링 Regression 모델 모델링의 경우 총 4가지 모델로 회귀 분석을 진행한 뒤, Stacking Ensemble 메타모델로 예측하였습니다. 1. 일반 선형회귀 2. 릿지(Ridge) 3. 라소(Lasso) 4. LightGBM --> Stacking Ensemble 데.. western-sky.tistory.com 이 때 사용한 라이브러리가 바로 Pickle입니다. pickle은 객체를..

객체 지향 특징 - 캡슐화, 상속, 추상화, 다형성

1. 절차적/구조적 프로그래밍 객체 지향은 절차적/구조적 프로그래밍으로부터 발전해 왔습니다. 따라서 절차적/구조적 프로그래밍의 특징을 갖고 있습니다. 그래서 간단히 정리하고 넘어가려고 합니다. 😊 1.1. 절차적 프로그래밍 절차적 프로그래밍은 코드가 작성된 순서대로 실행되도록 구현해야 합니다. 👍 특히 Goto처럼 분기를 일으키는 명령문의 사용을 지양합니다. 잦은 분기는 프로그램의 작동 원리를 파악하는 데 혼동을 줄 수 있기 때문이죠. 😢😢 그래서 Java에서는 아예 막아 놓았습니다. 1.2. 구조적 프로그래밍 구조적 프로그래밍은 함수를 사용하여 중복을 줄이고 논리적으로 기능을 분리하는 것입니다. 이렇게 구현하면 프로그램 구조를 파악하기 쉬워지고 유지보수에도 용이해지죠. 또한 함수 안에서 지역변수를 사용..

스레드 - 멀티 스레드와 멀티 프로세스 쉽게 구분하기

동시에 여러 작업을 처리하는 방법 1. 멀티 태스킹 멀티 태스킹이란 동시에 여러 가지 작업을 수행하는 것을 말합니다. 병렬로 일을 처리하는 것을 의미하죠. 이를 구현하기 위한 방식에는 두 가지 방식이 있습니다. 2. 멀티 스레드와 멀티 프로세스 멀티 스레드(Multi-Thread)는 하나의 프로그램이 여러 개의 작업을 수행하도록 합니다. 각 작업을 스레드(Thread)라고 하며 스레드는 동일한 자원을 공유합니다. 정확히는 Static 영역과 Heap 영역을 공유합니다. 스레드는 Stack영역을 서로 분할해서 사용합니다. 따라서 스레드간 Stack 영역을 접근할 수 없지만 Static영역과 Heap영역을 공유합니다. 우리는 Static 공간에 클래스의 멤버 변수(=전역변수, 필드, 속성, Property)..

Java 실행 과정과 메모리

자바가 실행되는 과정 1. JDK, JRE, JVM의 역할과 장점 JDK로 개발된 프로그램은 JRE에 의해 실행되고 가상 기계인 JVM 환경에서 구동됩니다. JDK는 소스 코드를 바이트코드로 바꿔줄 수 있는 javac.exe파일을 갖고 있습니다. JRE는 자바 프로그램을 실행할 수 있는 java.exe파일을 갖고 있습니다. 이런 구조는 컴퓨터 종류 및 OS가 서로 다르더라도 하나의 컴파일러로 실행할 수 있다는 장점이 됩니다. JDK, JRE, JVM이란 용어가 처음엔 무척 생소합니다. JDK는 자바 개발 도구로 Java Development Kit의 약자입니다. JRE는 자바 실행 환경으로 Java Runtime Environment의 약자입니다. JVM은 자바를 실행하는 가상 머신으로 Java Viru..

[이진탐색] Binary Search - Python

이진탐색 Binary Search 이진탐색과정 이진 탐색의 경우 정렬된 상태에서 수행해야합니다. 이진탐색의 경우 크기가 절반씩 줄어듦으로 순차탐색보다 빠릅니다. 중간 위치를 찾은 뒤 찾는 값과 비교합니다. 같으면 해당 위치를 return합니다. 찾는 값이 중간 위치보다 작으면 왼쪽에서 이진 탐색을 수행합니다. 찾는 값이 중간 위치보다 크면 오른쪽에서 이진 탐색을 수행합니다. def binary_search(data, var): left=0 right=len(data)-1 while left var: right = mid-1 elif data[mid] < var: left = mid+1 return -1 data = [1, 3, 6, 7, 10, 14, 29, 45] print(binary_search(d..

알고리즘 2020.12.25

[버블 정렬] Bubble Sort - Python

버블 정렬 Bubble Sort 버블 정렬 버블 정렬의 시간복잡도는 Worst case - O(n^2), Best case - O(n^2), Average acse - O(n^2)이다. 인접한 값과 계속 비교해나가며 루프를 1번 수행할때마다 1개의 값이 자리를 찾아간다. 앞의 값이 뒤의 값보다 클 경우 위치를 계속 바꿔나가며 마지막 index에 도달하므로 버블정렬이라 부른다. n개의 원소가 주어졌을 때, n*(n-1)/2만큼의 비교를 진행한다. def bubble_sort(data): # 비교 횟수를 저장할 변수 compare_count = 0 # 총 N(N+1)/2번만큼 계산 for j in range(len(data)-1): for i in range(0, len(data)-1-j): compare_..

알고리즘 2020.12.25

[프로그래머스] 정렬 - K번째 수

프로그래머스 정렬 문제 풀이 def solution(array, commands): # array는 0~100수 # commands는 100 x 3 answer = [] for i in range(len(commands)): start = commands[i][0] end = commands[i][1] k = commands[i][2] cut = array[start-1:end] cut.sort() answer.append(cut[k-1]) return answer 문제는 간단히 해결할 수 있었지만 다른 풀이들을 보며 배울 점이 많았습니다. 특히 map()과 lambda와 sorted()함수를 사용해 단 두 줄만에 작성한 코드도 있었습니다. lambda와 map, sorted관련해서 간단히 정리해보고 활..

알고리즘 2020.12.24

[퀵 정렬] Quick Sort - Python

퀵 정렬 Quick Sort 퀵 정렬 시간복잡도는 Worst 경우 O(n^2), Average : O(nlogn), Best - O(nlogn) pivot을 어떻게 설정하느냐에 따라 성능이 달라질 수 있음 값들이 이미 정렬되어 있는 경우 Worst Case : Random하게 섞어주는 방식 사용 가능 퀵정렬 과정 리스트 개수가 1개일 때 재귀 종료 0번째 값을 pivot으로 설정 pivot보다 작거나 큰 값을 low, high 리스트에 저장 저장한 low, high에 각각 재귀적으로 quick을 적용 최종 low, high, pivot을 병합 def quick(data): # 재귀 함수 종료 조건 if len(data) < 2: return data result = [] # pivot값 설정 pivot ..

알고리즘 2020.12.24