전체 글 140

Java의 설치 와 특징

자바란? 자바는 1996년 1월에 개발된 객체지향 프로그래밍(Object Oriented Programming, OOP) 언어이다. 자바의 특징으로는 1. 운영체제에 독립적 JRE(Java Runtime Environment: JVM(자바 가상머신) + 표준 클래스 라이브러리)가 설치된 모든 운영체제에서 실행이 가능 2. 객체 지향 언어(Object Oriented Programming, OOP) 모든 기능을 객체로 만들어 사용하며 하나의 프로그램을 실행하기 위해 여러 객체들을 만들고 조합한다. 3. 함수형 프로그래밍 지원 자바 8버전부터 람다식과 스트림이 추가되어 함수형 프로그래밍을 지원한다. 4. 자동 메모리 관리(Garbage Collection) 자바는 가비지 컬렉터를 실행시켜 자동으로 사용하지 ..

Java/Java 2023.02.18

Git and Github

Git Git은 분산형 버전 관리 시스템으로 소스코드 기록을 관리하고 추적할수 있는 버전 관리 시스템이다. Git의 핵심 기능으로는 버전관리, 협업, 백업이 있다. Github 깃을 이용하여 Repository를 관리할수 있는 클라우드 기반 서비스로 소스코드를 백업하거나 공유하는데 주로 쓰인다. Fork를 통해 다른사용자의 Github의 이미 생성된 Repo(Repository)를 자신의 Github의 Repo로 복사하여 작업할수 있으며 Pull Request를 통하여 메인 Repo의 관리자에게 자신의 Repo의 내용물을 병합해달라고 요청할수 있다. Git의 영역 깃의 영역은 총 3단계이며 각각 Work space, Staging area, Local repository이다. 처음 폴더나 파일이 만들어진..

Git and Github 2023.02.16

리눅스에서의 환경변수 설정

환경변수 어떠한 프로그램에서 외부의 다른 어떤 값을 읽어와 작업에 사용될때 사용하고 있는 운영체제에 환경변수를 설정하고 해당 프로그램이 환경변수를 찾아서 사용할수 있도록 도와준다. (node.js의 .env와 비슷해 보임) 환경변수에는 지역 환경변수와 전역 환경변수가 있으며 지역 환경변수는 그 환경변수를 생성한 특정 사용자만이 사용할 수 있으며 전역 환경변수의 경우 모든 사용자가 사용할 수 이쓴 환경변수이다. 환경변수 임시 적용 이 경우 환경변수가 메모리에 저장되며 터미널을 종료하면 환경변수 또한 사라진다. 지역 환경변수 MYNAME=Mason MYNAME="Mason Lee" 위와 같이 프롬프트에 작성하게되면 간단하게 지역 환경변수를 임시로 저장할수 있다. 이때 등호 '=' 앞뒤에는 공백이 없어야 하며..

Linux Ubuntu 2023.02.15

리눅스 우분투 명령어

기본 명령어 cd// 폴더이동 pwd// 현재 위치 확인 mkdir [폴더이름]// 폴더 생성 touch [파일이름]//파일생성 ls [위치경로]// 파일이나 폴더확인 ls -l// 파일 포맷을 전부 표시 ls -a// 숨긴파일이나 폴더를 포함한 모든항목 표시 echo [내용] > [파일명]//파일 편집기 없이 해당 내용을 파일명에 저장 파일이나 폴더의 삭제, 이동, 복사 rm [파일명]// 파일삭제 mv [현재파일명] [이동할파일명] // 파일이동 cp [현재파일명] [이동할파일명] // 파일삭제 -rf 옵셥을 이용하여 폴더나 보호되어있는 파일도 제어할수있다. ex) rm -rf [파일명] 문서확인 cat [파일명]// 해당 파일의 모든내용을 화면에 출력 head [파일명]// 해당 파일의 앞부분만 화..

Linux Ubuntu 2023.02.15

Binary Heap(이진 힙)과 Priority Queue(우선순위 큐)

Binary Heap 힙은 트리의 한 종류로 힙자체로도 많은 종류가 있다. 그중 하나가 바이너리 힙이며 이진 탐색 트리와 비슷하지만 조금 다른 규칙을 가지고 있다. 최대 이진 힙을 예로들어 부모노드는 항상 자식 노드보다 큰 값을 가지며 자식노드들 간의 순서가 존재 하지 않는다. (최소 이진 힙의 경우 부모노드는 항상 자식 노드보다 작은 값을 가짐) 또한 항상 최적의 용량을 가진다. 즉 자식노드가 생성되기 전에 모든 형제노드들이 채워지며 균형잡힌 트리구조로 만들어 진다. 그리고 항상 왼쪽의 자식 노드 먼저 채워지게 된다. 이진힙의 데이터들을 그 순서대로 배열에 나열할경우 어떠한 데이터의 인덱스가 n이라면 그의 왼쪽자식의 인덱스는 2n+1, 오른쪽 자식은 2n+2의 인덱스를 가지게 된다. 반대로 (n-1)/..

프로그래밍의 이해

프로그래밍 프로그래밍 언어를 사용하여 특정 목적을 달성하기 위한 알고리즘을 코드로 작성하는 과정이다. 프로그래밍 언어 컴퓨터가 사용하는 언어는 기계어이며 이 기계어와 사람의 언어를 매개해주는 언어가 프로그래밍 언어이며 기계어에 가까운 즉, 컴퓨터 친화적인 언어를 저수준 언어, Java와 같이 인간 친화적 언어를 고수준 언어라고 한다. 저수준의 언어는 컴퓨터가 직관적으로 이해할수 있도록 구체적이고 꼼꼼하게 작성해야 한다. 따라서 인간이 작성하기 어렵고 유지 보수가 불편하다는 단점이 있다. 반대로 고수준의 언어는 인간이 이해하기 쉽기 때문에 유지보수가 쉽다는 장점이 있다. 하지만 컴퓨터가 이해하는데 시간이 비교적 오래걸리고 고사양의 컴퓨터를 요구한다. 컴파일 프로그래밍 언어는 사람과 컴퓨터간의 소통을 매개할..

컴퓨터의 이해

컴퓨터란? 데이터를 외부(사람)에서 입력장치를 통해 입력받아 프로그램의 코드에 따라 정해진 규칙대로 CPU를 통해 연산을 수행하며 하드디스크, 램 등 여러 기억장치에 저장하며 출력장치를 통해 결과물을 출력하는 전자장치이다. 즉 컴퓨터는 내부에서 연산의 규칙을 정의한 프로그램(소프트웨어)와 기타 데이터를 읽고 저장하고 출력할수있는 물리적인 장치들(하드웨어)로 구성되어 있다. Software 소프트웨어란 물리적인 형태가 존재하지 않는 컴퓨터의 구성요소로 하드웨어가 어떻게 동작해야 하는지 규정해 놓은 명령어의 집합이며 시스템 소프트웨어와 응용 소프트웨어로 분류된다. 시스템 소프트웨어, System Software 응용소프트웨어를 실행하기위한 소프트웨어로 하드웨어와 직접적으로 소통하고 관리하며 대표적으로 Mac..

Tree Traversal (트리 순회), BFS, DFS

Tree Traversal 트리가 가지고있는 모든 노드를 순회하는 알고리즘으로 모든 트리구조에서 사용할수 있다. Breadth First Search(너비 우선 탐색)과 Depth First Search(깊이 우선 탐색)이 사용된다. Breadth First Search(너비 우선 탐색) root부터 시작하여 가로방향인 형제 노드들을 먼저 탐색하는 알고리즘이다. Queue를 이용하며 기본적인 작동원리는 큐의 첫번째 아이템의 자식노드들을 순서대로 큐에 추가해주고 큐의 값을 새로운 배열에 넣어준뒤 큐에서 제거한다. 이후 큐에 아이템이 없어질때까지 반복하면된다. BFS(node, queue = [], result = []) { if (!node) return result; result.push(node.val..

Binary Search Tree (이진 검색 트리)

이진 검색 트리를 알기 위해선 트리 구조와 이진 트리 구조를 알아야 한다. Tree (트리) 연결 리스트 처럼 노드로 이루어진 데이터 구조로 parent와 child 노드로 이루어저 있다. 연결 리스트는 한노드당 하나의 노드만을 한줄로만 연결 시키지만 트리의 경우 하나의 노드와 다른 여러 노드들로 연결시켜 여러갈래로 구성된다. 트리의 경우 몇가지 규칙을 가지고 있다. 부모노드는 여러 자식노드를 가질수 있지만 자식노드는 하나의 부모 노드만을 가지며 부모노드는 자식 노드만을 가리킬수 있다. 또한 트리의 시작점은 단하나의 노드에서 시작되며 이 노드를 root라 부른다. 몇가지 용어들을 더 정리 하자면 자식노드 루트에서 멀어지는 방향으로 연결된 노드 부모노드 자식노드와 반대의 개념 형제노드 같은 부모를 가진 노..

Stack & Queue 자료구조

Stack 데이터의 모음이 되는 자료 구조중의 하나로서 단순하게 LIFO, Last In Last Out(후입선출)의 특징을 가진 자료구조이며 여러한 곳에서 사용된다. 예를들면 자바스크립트에서 재귀함수 호출시, Undo와 같이 이전 작업으로 되돌릴때, 인터넷 브라우저의 방문기록을 쌓고 뒤로가기를 사용할때 혹은 트리나 그래프같은 알고리즘의 중간 매개체로도 사용된다. 배열을 이용한 Stack push()와 pop() 혹은 shift()와 unshift()의 조합을 이용하여 배열을 스택으로 사용할수 있지만 배열의 특성상 shift()와 unshift()의 경우 배열안의 아이템들의 인덱스를 모두 바꿔주는 작업이 생기므로 push()와 pop()을 이용한다. Linked list를 이용한 Stack class N..