본문 바로가기

분류 전체보기167

1. 질문 1) 멀티 프로세스로 처리 가능한 걸 굳이 멀티 스레드로 하는 이유? : 프로세스를 생성하여 자원을 할당하는 시스템 콜이 감소함으로써 자원의 효율적 관리가 가능, 프로세스 간의 통신보다 스레드 간의 통신 비용이 적어 작업들 간 부담이 감소한다. 대신, 멀티 스레드를 사용할 때는 공유 자원으로 인한 문제 해결을 위해 동기화에 신경써야한다. 교착상태는 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태를 못한다.(시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생하는 문제이다.) - 상호 배제 : 프로세스들이 필요로 하는 자원에 대해 배타적 통제권을 요구한다. - 점유대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다. - 비선점 : 프로세스가 어떤 자원의 사용을 끝날 때.. 2022. 7. 20.
5. 개념 1. 클래스(class) 자바에서 클래스(class)란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다.자바에서는 이러한 설계도인 클래스를 가지고, 여러 객체를 생성하여 사용하게 됩니다.  클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성됩니다.즉, 필드(field)란 클래스에 포함된 변수(variable)를 의미합니다. 또한, 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다. 클래스는 생성된 객체의 필드를 초기화해주는 특별한 메소드인 생성자(constructor)   2. 생성자(constructor) 클래스를 가지고 객체를 생성하면, 해당 객체는 메모리에 즉시 생성됩니다. 하지만 이렇게 생성된 객.. 2022. 7. 18.
4. 나의 마음에 새겨진 문구 가야 할 때가 언제인가를 분명히 알고 가는 이의 뒷모습은 얼마나 아름다운가 봄 한 철 격정을 인내한 나의 사랑은 지고 있다 한 잔은 떠나간 너를 위하여 한 잔은 너와 나의 영원했던 사랑을 위하여 2022. 7. 14.
4. 스프링 웹 개발 기초 간단하게 알아보는 웹 개발 방식 3가지 1. 정적 페이지 : 웹브라우저 localhost:8080/hello-static.html을 url에 입력 ->  내장 톰캣 서버가 요청을 받고 이를 스프링에 전달 -> 그러면  controller에서 우선순위로 hello-static이 있는지 검색 후 존재하지 않다면 resources에서 검색 -> 찾으면 이를 변환하지 않고 그대로 웹브라우저로 처리  2. MVC (Model, View, Controller) : localhost:8080/hello-mvc을 url에 입력 -> 내장 톰캣 서버 -> helloController에서 hello-template(View로 지정한 html 파일명)를 return, (model의 키는 name이고 값은 spring) ->.. 2022. 7. 14.
3. Java (TDD, GCC) 🏴‍☠️ TDDTip실패하는 테스트를 만들어라 → 빨간색꼼수를 써서 테스트를 통과하게 만들어라 → 그린리팩토링을 하라 → 블루👉🏻Tip 2 ❗ctrl + 함수 클릭수정할 곳 드래그 후 alt + shift + r 누르고 이름 변경하면 한번에 모두 변경됨.  리팩터링은 동작을 변경하지 않으면서도 보다 간편하게 유지 관리하고 파악하며 확장할 수 있도록 코드를 수정하는 프로세스리팩토링의 목적은 소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 만드는 것이다. 👉🏻왜 리팩토링을 해야 하는가?코드의 구조가 망가지는 효과는 누적된다.코드의 디자인을 유지하도록 도와준다.중복을 제거함으로써 각각의 작업에 대한 코드가 오직 한 곳에만 있게 할 수 있다.소프트웨어의 디자인을 개선시킨다.소프트웨어를 더 이해하기 쉽.. 2022. 7. 14.
2. 객체지향 Java 객체지향의 4대 특성인 캡슐화, 상속, 추상화, 다형성 을 이용하여 객체 지향을 올바르게 설계할 수 있도록 도와주는 원칙객체 지향을 공부해봤고, 객체 지향으로 향 후 프로그래밍을 하려면 반드시 알아야 하는 중요한 원칙들이어서. 굉장히 중요하기 때문에 하나하나 원칙들을 정리해봤다.  아무리 객체 지향 4대 특성인 캡슐화, 상속, 추상화, 다형성을 잘한다고 해서 설계를 잘하는 것은 아니다. 물론 4대 특성의 묘미를 잘 살릴수록 설계가 좋다. 하지만 설계 원칙이라는 게 엄연히 존재하고, 또 나름 중요하기 때문에 각 원칙의 맨 앞 알파벳만 따와 "SOLID"라고까지 했을까? SOLID 원칙들은 결국 자기 자신 클래스 안에 응집도는 내부적으로 높이고, 타 클래스들 간 결합도는 낮추는 High Cohesion - .. 2022. 7. 14.
1. Java 🦤 JAVA일반 변수 값 할당👉🏻1️⃣ 오직 정수만 담을 수 있는 변수 x 생성. 규칙상 x에 정수 아닌 값이 들어있으면 안 되기 때문.👉🏻2️⃣ x에 기존에 저장되어 있던 쓰레기값이 사라지고 20이 저장된다.초기에는 x에 쓰레기 값인 0이 들어간다. 레퍼런스변수 값 할당👉🏻1️⃣ 오직 자동차 리모컨만 저장할 수 있는 변수 a자동차를 만든다.👉🏻2️⃣ 자동차 설계도(클래스)로 자동차 객체를 변수 외! 부! 에 만든다. 자동차 객체는 자신을 조종할 수 있는 리모컨(this)을 가지고 태어난다.👉🏻3️⃣ a자동차 변수에 안에 있는 리모컨의 달리다 버튼을 누른다. 해당 신호가 리모컨과 연결되어 있는 자동차 객체에 전달되어 달리다 기능이 실행된다.👉🏻5️⃣ 달리다 함수. 메서드 (함수)... 2022. 7. 13.
Python 재귀 알고리즘 재귀(recursion)는 어떠한 이벤트에서 자기 자신을 포함하고 다시 자기 자신을 이용하여 정의되는 경우를 의미합니다. 재귀를 효과적으로 사용하면 프로그램을 간결하고 효율성 좋게 작성할 수 있습니다. 재귀를 사용하는 대표적인 예로 양의 정수 곱을 구하는 팩토리얼(factorial) 문제가 있습니다. 팩토리얼은 양의 정수를 순서대로 곱한다는 의미로 순차 곱셈이라고도 합니다. 팩토리얼 n! 의 정의(n은 양의 정수)는 1) 0!=1 2) n>0이면 n!=nx(n-1)! #factorial.py factoial함수는 매개변수 n에 전달받은 값이 0보다 크면 n*factorial(n-1)의 값을 반환하고, 그렇지 않으면 1을 반환합니다. 파이썬에서는 팩토리얼 값을 구하는 표준 라이브러리로 math모듈에서 fa.. 2021. 8. 10.
Python Stack,Queue 스택(stack)은 데이터를 임시 저장할 때 사용하는 자료구조로, 데이터의 입력과 출력 순서는 LIFO 방식입니다. 데이터를 넣는 작업을 푸시(push), 데이터를 꺼내는 작업을 팝(pop), 푸시와 팝이 이뤄지는 윗부분을 꼭대기(top)이라 하며 아랫부분을 바닥(bottom)이라고 합니다. 스택 배열은 stk, 푸시한 데이터를 저장하는 스택 본체인 list형 배열입니다. 인덱스가 0인 원소를 스택의 바닥이라고 하고, 가장 먼저 푸시하여 데이터를 저장하는 곳은 stk[0]입니다. 스택 크기는 capacity, 스택의 최대 크기를 나타내는 int형 정수이고 이 값은 배열 stk의 원소 수인 len(stk)와 일치합니다. 스택 포인터는 ptr, 스택에 쌓여 있는 데이터의 개수를 나타내는 정숫값을.. 2021. 8. 8.
Python 검색 알고리즘 선형 검색이란(Linear search) 직선 모양으로 늘어선 배열에서 검색하는 경우에 원하는 키값을 가진 원소를 찾을 때까지 맨 앞부터 스캔하여 순서대로 검색하는 알고리즘입니다. 배열 맨 앞부터 순서대로 원소를 스캔하는 원소의 값이 정해지지 않은 배열에서 검색할 때 사용하는 유일한 방법이다. #ssearch_while.py for i in range(len(a)): 이진 검색(binary search)은 원소가 오름차순이나 내림차순으로 정렬된 배열에서 좀 더 효율적으로 검색할 수 있는 알고리즘입니다. 이진 검색 범위는 맨 앞, 맨 끝, 중앙의 인덱스를 각각 pl, pr, pc라고 한다면 값은 0, n-1, (n-1)//2로 초기화시킵니다. 하나씩 이동하여 검색하는 선형 검색과 달리 주.. 2021. 8. 7.
3. Deep Learning(Hidden layer) 입력 부분 - Input layer 추가한 부분 - Hidden layer 출력 부분 - Output layer 결과를 만들기 위해서는 Hidden layer의 모든 값들을 입력으로 하는 하나의 Perceptron이 필요하다. 위의 그림 중 왼쪽을 보면 13개의 입력(input layer) 5개의 출력(hidden layer), 오른쪽을 보면 5개의 입력(hidden layer) 1개의 출력(output layer) -> 딥러닝, 인공 지능망의 토대라고 볼 수 있다. 모델의 구조(회귀모델)를 만드는 코드에 위의 hidden layer 추가해서 살펴보면, hidden layer의 활성화 함수(activation)는 'swish'를 사용해주고 X, H, Y는 순서대로 앞의 것을 입력으로 받아 연결시키면 되는.. 2021. 7. 28.
2. Deep Learning(보스턴 집값 예측, 아이리스 품종 분류) 평균의 대표성을 무너뜨리는 값들을 이상치라고 하는데 이상치로 인해 평균의 대표성을 사용하기 힘들 때 중간값을 사용한다. # 컬럼 설명 1 범죄율 4 강변 5 평균 방수 13 하위계층 비율 1~13까지 14에 영향을 미치는 독립변수 14 종속변수 X=tf.keras.layers.Input(shape=[13]) Y=tf.keras.layers.Dense(1)(X) 13개의 입력으로부터 1개의 출력을 만든다 model = tf.keras.models.Model(X, Y) model.compile(loss=‘mse’) 종속변수 1개의 결과를 만들 때 수식이 1개가 필요한데 만약 독립변수의 개수가 12개, 종속변수의 개수가 2개라면 Perceptron 2개가 병렬로 연결된 모델이 되는 것이고, 찾아야 하는 가중치.. 2021. 7. 28.
1. Strat Deep Learning (레모네이드 판매 예측) 데이터 준비하기 1 데이터를 불러온다 종속변수와 독립변수로 분리한다. 실습을 통해 배울 도구들 파일 읽어오기: read_csv('/경로/파일명.csv') 모양 확인하기: 데이터.shape 칼럼 선택하기: 데이터[['칼럼명1', '칼럼명 2', '칼럼명 3']] 칼럼 이름 출력하기: 데이터.columns 맨 위 5개 관측치 출력하기: 데이터.head() 샘플 데이터 GitHub github link: https://github.com/blackdew/tensorflow1/tree/master/csv 레모네이드: https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/lemonade.csv 보스턴:https://raw.githubuserconte.. 2021. 7. 26.
Python 알고리즘 자료구조와 배열(하) max로 정의된 max.py() 함수를 사용할 수 있도록 import를 통해 가져오고, 난수를 뽑기 위해서 random 도 함께 import 하였습니다. from [가져올 모듈=파일 이름]에서 max_of() 함수를 import 하겠다는 의미이고, x라는 빈 리스트를 입력할 개수만큼 공간 None으로 만듭니다. 그 후 random.randint(low,high)를 통해 최솟값과 최댓값 사이의 값 중 1개를 뽑게 한 후, for 문을 통해 입력할 개수만큼 작동시키면 가져온 max_of() 함수를 사용해 원하는 값을 뽑아낼 수 있습니다. 배열 원소를 역순으로 정렬하는 알고리즘을 생각해봅시다. 예로 배열 a의 원소가 7개이고 [2,5,1,3,9,6,7]로 저장되어 있다면 이것.. 2021. 7. 21.
1. Start TensorFlow 기계를 학습시켜 인간의 판단능력을 기계에 위임하는 것이 Machine Learning이다. TensorFlow는 다양한 직업에 대해 데이터 흐름 프로그래밍을 위한 오픈소스 소프트웨어 라이브러리이다. Symbolic 수학 라이브러리이자, 인공신경망 같은 기계 학습 응용프로그램에도 사용된다. Python API를 제공하며 문서화가 약간 부족하지만 C/C++ API 도 제공한다. 보통 텐서 플로우를 이용해 해결하려 하는 문제는 Machine Learning 지도 학습(Supervised Learning)의 회귀(Regression, 숫자 예측)와 분류(Classification, 범주 예측)이다. TensorFlow는 수많은 라이브러리 중 하나이다. 딥러닝 이론을 코딩으로 쉽게 이용해 줄 수 있는 여러 라이브.. 2021. 7. 21.
3. 누군가에게 힘이 되고 싶은 문구 아무런 가능성이 없었다면 처음부터 시작하지도 않았을 거야 시련을 겪어야 한다면 차라리 극한의 시련을 겪자 2021. 7. 20.
6. Finished Machine Learning 지금까지 Machine Learning이라는 도구를 이루고 있는 여러 기능을 살펴보았습니다. 하지만 응용을 하고, 선택을 해야 할 때 막막한 느낌이 들 수 있어 참고할 수 있는 좋은 표를 가져왔습니다. 위의 지도가 모든것을 해결해주지 않습니다. 현실에 적용되는 것들은 훨씬 어렵고 복잡하기 때문입니다. 그동안 배웠던 것만을 기반으로 만든 것입니다. 지난 6일간 큰 그림을 멀 리버 보듯 가볍게 Machine Learning에 대해 배워보았습니다. 여기서 더 나아가 자신의 필요한 부분이 있다면 알아서 검색하고, 지식을 늘려나가겠지요? 숙련된 Machine Learning Engineer와 현실적으로는 큰 차이가 있겠지만, 철학적으로는 큰 차이가 없다고 말해도 될 것 같아요. 개인의 노력과 발전으로 인해 현실적.. 2021. 7. 20.
5. Machine Learning Types 이번에는 비지도 학습(Unsupervised learning)에 대해 배워보려 합니다. 비지도 학습 대표적으로 군집화, 연관, 변환으로 크게 나눌 수 있습니다. 1. 군집화(Clustering) 군집화(clustering)는 비슷한 것들을 찾아 그룹을 만드는 것입니다. 분류(classification)와 구분이 안 갈 수 있는데, 예를 들면 물건들을 정리한다 하였을 때 비슷한 것들끼리 모아서 적당한 그룹을 만드는 것이 군집화입니다. 그룹을 만들고 난 후 각각의 물건을 적당한 그룹에 위치시키는 행위를 분류라고 할 수 있습니다. 즉 어떤 대상들을 구분해서 그룹을 만드는 것이 군집화라면 분류는 어떤 대상이 어떤 그룹에 속하는지를 판한다는 것이라고 볼 수 있습니다. 표의 숫자만 보고 군집화를 하는 것은 쉽지 않.. 2021. 7. 19.
4. Machine Learning Types Machine Learning Types 중 가장 많이 쓰이는 것들을 그림으로 표현하면 아래와 같습니다. 1. 지도 학습(Supervised Learning)의 ‘지도'는 기계를 가르친다(supervised)는 의미입니다. 문제집으로 학생을 가르치듯이 데이터로 컴퓨터를 학습시켜서 모델을 만드는 방식을 ‘지도 학습’이라고 합니다. 앞서 살펴본 손톱 감시 앱은 지도 학습을 이용한 것입니다. 지도 학습은 과거의 데이터로부터 학습해서 결과를 예측하는 데에 주로 사용됩니다. 지도 학습은 '역사'와 비슷합니다. 역사에는 과거에 있었던 사건이 원인과 결과로 기록되어 있습니다. 역사를 알면 어떤 사건이 일어났을 때, 그것의 결과로 어떤 일이 일어날지를 예측할 수 있게 됩니다. 마찬가지로, 지도 학습은 과거의 데이터로부.. 2021. 7. 18.
Python 알고리즘 자료구조와 배열(상) 자료구조의 개념은 논리적인 관계로 이루어진 데이터 구성을 말합니다. 즉 데이터 단위와 데이터 자체 사이의 물리적 또는 논리적인 관계를 얘기합니다. 자료구조를 알아야 하는 이유는 컴퓨터에서 처리해야 할 많은 데이터를 모아 효율적으로 관리하고 구조화하는 데 있다. 하나의 값을 저장하는 변수가 아니라 묶음 단위로 값을 저장하는 자료구조 중 배열(array)이 있습니다. 배열에는 객체가 저장되고, 배열에 저장된 객체 하나하나를 원소(element)라고 합니다. 또한 각 원소는 0,1,2,… 순으로 인덱스(index)를 부여받습니다. 배열을 사용하면 좋은 점은 대표적으로 아래와 같이 2가지가 있다. 1. 배열을 생성할 때 원소 개수를 자유롭게 지정할 수 있다. 2. 인덱스를 이용하여 원소에 접근할 수 있어 편하다.. 2021. 7. 18.
3. Start Machine Learning 오늘날 아이디어를 현실화하기 위해서는 데이터가 필요합니다. 현실을 데이터로 표현할 수 있다면, 컴퓨터의 엄청난 힘으로 데이터를 저리 할 수 있게 됩니다. 그 처리 방법 중의 하나가 Machine Learning 입니다. Machine Learning으로 무엇인가 하려면 당연히 데이터가 필요합니다. 현실을 데이터화 할 수 있다면, 복잡한 현실에서 발견하기 어려운 통찰을 단순해진 데이터로부터 찾아낼 수 있을 것입니다. 이를 통해 현실을 변화시키는 일을 하는 것이 '데이터 산업' 입니다. 데이터 산업은 크게데이터 과학(Science)과데이터 공학(Engineering)으로 분리해볼 수 있습니다. 데이터 과학 - 데이터를 만들고, 만들어진 데이터를 이용하는 일을 합니다. 데이터 공학 - 데이터를 다루는 도구를 .. 2021. 7. 17.
2. About Machine Learning 앞의 1번 글의 작업에 더해 추가적으로 나아가 다른 작업을 해볼 것입니다. 만약 손톱을 깨물면 화면에 '손톱'이라는 메시지가 표시되고 큰소리를 나게 하는 앱을 만드는 것입니다. https://ml-app.yah.ac 이 링크를 따라가면 아래 같은 그림을 볼 수 있습니다. 이 서비스는 Teachable Machine 에서 다운로드 한 모델 파일을 이용하여 애플리케이션을 만들어주는 서비스입니다. 1번 작업에서 만든 Model 을 저장했던 파일을 드래그하여 업로드합니다. 업로드가 끝나면 아래와 같은 화면이 나옵니다. 오른쪽 아래의 카메라를 따라 손 동작에 의해 % 값이 달라집니다. 숫자로 표현할 수 있게 되면 비교가 가능해집니다. 비교를 할 수 있으면 선택이 수월해집니다. 손톱과 정상의 수치를 합치면 100%.. 2021. 7. 16.
1. About Machine Learning 평소 AI에 관심을 가지고 있었다. 학교에서도 이번 학기에 AI 수업을 들었지만 내용이 어렵고 광범위한 범위를 빠르게 배우다 보니 정확하게 이해, 따로 활용하기 어려워 여름방학에 추가로 공부할 곳을 알아본 결과 머신러닝 야학 인터넷 강의를 찾게 되어 공부하게 되었다. 배울 것은 너무나 광범위하고 어렵기 때문에 차근차근 조금씩 정리하려 한다. Machine Learning 은 기계를 학습시켜 인간의 판단을 위임하기 위해 고안된 기술이다. 예로 전염병의 양성 판정, 자동 번역, 자율 주행과 같이 수많은 작업들이 Machine Learning이라고 불리는 여러 기술들에 의해 구현되고 있고, 구현 되려 한다. 이를 위해 가장 간단하면서 어려운 준비물이 있는데 그것은 'Imagination'이다. 숫자는 인간에게.. 2021. 7. 15.
2. 나에게 열정을 준 문구 네가 지금 편한 이유는 내리막길을 걷고 있기 때문이야 인생에서 성공하려거든 끈기를 죽마고우로 경험을 현명한 조언자로 신중을 형으로 희망을 수호신으로 삼아 2021. 7. 15.
Python 알고리즘 기초 알고리즘이란? 알고리즘은 수학과 컴퓨터 과학, 언어학 또는 관련 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 의미한 것, 계산을 실행하기 위한 단계적 절차를 의미한다. 즉 문제 해결에 필요한 계산 절차 또는 처리과정의 순서를 뜻하며 프로그램 명령어의 집합을 의미하기도 한다. 현재 DO IT 자료구조와 함께 배우는 알고리즘 입문, 저자 BohYoh Shibata의 책으로 공부를 하고 있고, 터득한 지식을 정리해서 올릴 것이다. 파이썬이 아직 생소한 부분이 많아 쉬운 부분 또한 함께 정리하려 한다. 1) while 문을 이용한 합계 구하기 while i 0: break cf) // -> 몫 연산자, %-> 나눗셈 연산자 아래는 a와 b를 오름차순으로 정렬하는.. 2021. 7. 15.
Python 기초 프로그래밍의 간단 정리6 1. Matplotlib 그래프 간단 정리 Matplotlib는 파이썬에서 데이터를 차트나 플롯(Plot)으로 그려주는 라이브러리 패키지로서 가장 많이 사용되는 데이터 시각화(Data Visualization) 패키지로 알려져 있다. (Matplotlib 안의 설정을 하나씩 바꿔가면서 기본적인 그림만 보여주며 설명하려 한다.) Line plot fig, ax = plt.subplots() # 괄호 안이 공란이면 1개의 fig 만 만들어 준다. x = np. arrange(15) # 0~14 y = x**2 # x의 2 승 ax.plot( x, y, intstyle=“:”, # 선이 점선으로 표시 marker=“*” # 값들을 *표시 color = “#524 FA1” # 색깔 표시 ) Line style .. 2021. 7. 11.
Python 기초 프로그래밍의 간단 정리5 1. Pandas 심화 간단 정리 데이터 프레임 정렬 1) 인덱스 값 기준으로 정렬하기 axis=0 : 행 인덱스 기준 정렬(default 오름차순) df = df.sort_index(axis =0) axis=1 : 열 인덱스 기준 내림차순 정렬 df.sort_index(axis=1, ascending= False) # ascending -> True = 오름차순, False = 내림차순 2) column 값 기준 정렬 df.sort_values(‘칼럼 이름’ , ascending = true) 3) 컬럼 2가지도 오름, 내림차순 정렬 가능 df.sort_values([‘먼저 바꿀 열’, ascending = [True, False]) 집계 함수 - count count 메서드 활용하여 데이터 개수 확인.. 2021. 7. 8.