분류 전체보기 24

퀵 정렬

퀵 정렬(quick sort) 개념 분할 정복 알고리즘의 하나로, 평균적으로 매우 빠른 수행 속도를 자랑하는 정렬 방법 합병 정렬(merge sort)과 달리 퀵 정렬은 리스트를 비균등하게 분할한다 정렬 과정 리스트 안에 있는 한 요소를 선택한다. 이렇게 고른 원소를 피벗(pivot) 이라고 한다. 피벗을 기준으로 피벗보다 작은 요소들은 모두 피벗의 왼쪽으로 옮겨지고 피벗보다 큰 요소들은 모두 피벗의 오른쪽으로 옮겨진다. (피벗을 중심으로 왼쪽: 피벗보다 작은 요소들, 오른쪽: 피벗보다 큰 요소들) 피벗을 제외한 왼쪽 리스트와 오른쪽 리스트를 다시 정렬한다. - 분할된 부분 리스트에 대하여 순환 호출 을 이용하여 정렬을 반복한다. - 부분 리스트에서도 다시 피벗을 정하고 피벗을 기준으로 2개의 부분 리스..

RESTful API란?

REST란? Representational State Transfer의 약자 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미 REST의 구체적인 개념 HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다 REST 구성 요소 자원(Resource) : URI 행위(Verb) : HTTP Method 표현(Representation of Resource) (응답) Client가 자원의 상태에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representati..

개발 상식 2023.12.08

고정 소수점 & 부동 소수점

실수의 표현 방식 컴퓨터가 실수를 표현하려면 사람들이 일반적으로 사용하는 10진수가 아니고 기계어인 2진수 표현 방식을 사용한다. 하지만 실수를 2진법으로만 표현하기 어렵기 때문에 여러 가지 방법들이 연구되었고 지금 주로 사용하는 방법은 2가지다. 고정 소수점(Fixed Point) 방식 부동 소수점(Floating Point) 방식 이진기수법 고정 소수법과 부동 소수점을 설명하기 앞서 2진법 변환 방법을 설명하도록 하려고 한다. 1. 10진수에서 2진수로 변환 먼저 사진의 예를 들면 35라는 숫자를 2진법으로 변환하는 예시이다. 10진수에서 2진수로 변환하는 방법은 2진법으로 변환하려는 수를 몫이 1이 될 때까지 계속 2로 나눈다. 그리고 몫부터 시작해서 나머지를 거슬러 올라가면서 표기를 한 후 그 뒤..

카테고리 없음 2023.12.03

삽입 정렬

1. 개념 새로운 숫자가 삽입될 때 정렬된 배열 안에서 자신의 위치를 찾아가며 정렬하는 알고리즘 2. 구현 (kotlin) fun insertionSort(arr: IntArray) { for (i in 1 until arr.size) { // i = 현재 정렬된 배열의 크기 val key = arr[i] var j = i - 1 // 정렬된 배열에서 제일 큰 숫자의 인덱스(가장 오른쪽에 있는 숫자의 인덱스) while (j >= 0 && arr[j] > key) { // 정렬된 배열에서 제일 큰 숫자의 인덱스부터 0번 인덱스까지 비교하면서 현재 값이 key보다 크면, arr[j + 1] = arr[j] // 현재 값을 한 칸 오른쪽에 덮어 씌운다. j -= 1 } arr[j + 1] = key // 올..

CPU의 구조와 원리

중앙처리장치 (CPU) CPU는 컴퓨터의 두뇌와 같다. 메모리에 저장된 명령어를 읽어 들이고, 읽어 들인 명령어를 해석하고, 실행하는 부품이다. 이는 컴퓨터에서 가장 중요한 부품으로 연산과 제어 회로가 포함되어 있다. 아래 사진과 같이 다양한 입력 장치로부터 입력 받아 처리한다. 그리고 그 결과를 출력 장치로 보내는 일련의 과정을 제어하고 조정하는 일을 수행한다. CPU의 구성요소 CPU는 전에 컴퓨터의 구성에서도 이야기 한 것 처럼 제어 장치 연산 장치 레지스터 이렇게 3가지와 각 구성 요소를 연결하는 내부 버스로 이루어진다. 제어 장치 (CU, Control Unit) 제어 신호라는 전기 신호를 내보내고 명령어를 해석하는 장치이다. 컴퓨터 시스템의 작동을 통제한다. CPU가 메모리에 저장된 값을 읽고..

키(Key)

1. 키(Key)란? 테이블의 column 중에서 식별자로 이용 가능한 column 2. 유일성, 최소성, 무결성 유일성 : 하나의 키 값으로 row를 유일하게 찾아낼 수 있는 성질 최소성 : 키를 구성하는 column들 중 꼭 필요한 최소한의 column들로만 키를 구성하는 성질 무결성 : 데이터가 항상 정확한 값을 유지하는 성질 3. 키의 종류 1. 슈퍼키(Super Key) 테이블에서 row를 유일하게 식별할 수 있는 1개 이상의 column들의 집합 유일성을 만족시킨다. 예시) (학번) (학번, 이름) (학번, 이름, 과목) (주민등록번호) … 2. 후보키(Candidate Key) 테이블에서 row를 유일하게 식별할 수 있는 최소한의 column들의 집합 기본키로 사용할 수 있는 column 유..

데이터베이스 2023.11.19

SOLID 원칙

SOLID 원칙 SOLID 원칙이란 객체 지향 설계에서 지켜줘야 할 5개의 소프트웨어 개발 원칙을 말하며 5개의 원칙의 앞글자를 따서 SOLID라고 부른다. 각각 SRP, OCP, LSP, ISP, DIP를 말한다. SPR (Single Responsibility Principle) 단일 책임 원칙 단일 책임 원칙이란 모든 클래스는 하나의 책임만 가져야 한다는 원칙을 말한다. 여기서 책임은 기능으로 해석할 수 있고 하나의 클래스가 여러 기능을 담당하게 되면 수정을 해야 할 상황이 발생하면 복잡한 상황이 발생할 수 있다. 하지만 하나의 기능만 담당한다면 수정할 상황이 생기더라도 그 클래스만 수정하면 되기 때문에 프로그램의 유지보수성을 높일 수 있다. class Chef() { fun cook() { pri..

개발 상식 2023.11.19

합병 정렬

합병 정렬(merge sort) 개념 분할 정복 방식을 이용해서 하나의 리스트를 두 개의 리스트로 분할한 다음 각각의 분할된 리스트를 정렬한 후에 합해서 정렬된 하나의 리스트로 만드는 정렬 알고리즘 정렬 과정 분할 단계 주어진 배열의 중간 인덱스를 구한다. 중간 인덱스를 기준으로 배열을 반토막 낸다. 정복 단계 반복해서 반토막을 내다가 마침내 배열의 크기가 0이나 1이 된다. 그러면 주어진 배열을 바로 '답'으로 반환한다. 합병 단계 왼쪽 배열, 오른쪽 배열을 인자로 넣어서 각각 정렬된 결과를 얻는다. 양쪽 배열의 맨 앞을 비교해 더 작은 수를 찾는다. 더 작은 수를 꺼내서 새로운 배열에 집어넣는다. 새로운 배열에 모든 숫자가 들어갈 때까지 반복한다. 예제 합병 단계 예제 예제 코드 (코틀린) const..

데이터베이스 기초

1. 데이터베이스란? 여러 사람이 공유하고 사용할 목적으로 통합, 관리되는 데이터의 집합 2. 데이터베이스 특징 실시간 접근성 : 사용자의 질의(query)(ex. 검색/삽입/갱신/삭제)에 실시간으로 처리와 응답이 가능하다. 지속적인 변화 : 새로운 데이터의 삽입(insert), 삭제(delete), 갱신(update)을 통해서 항상 최신 데이터를 유지한다. 동시 공유 : 서로 다른 목적, 여러 사용자에게 동시에 같은 내용의 데이터가 공유된다. 내용에 의한 참조 : 데이터베이스에 저장된 데이터를 참조할 때 데이터의 주소나 위치가 아닌, 사용자가 요구하는 데이터 내용으로 데이터를 찾는다. 예시) 우리가 로그인을 할 때, 아이디와 비밀번호를 입력한 후 로그인 요청을 보내면 실시간으로 서버로부터 응답을 받을 ..

데이터베이스 2023.11.18

OSI 7계층 구조

OSI 7계층 구조란? OSI (Open System Interconnection -개방형 시스템간 상호 접속-) 7계층 구조는 컴퓨터 네트워크에서 사용되는 통신 프로토콜을 계층 별로 분류한 모델입니다. 이 모델은 네트워크 통신을 단계적으로 처리하여 효율적인 통신을 가능하게 합니다. OSI 7계층 구조는 네트워크 통신의 이해와 문제 해결을 돕는 중요한 개념입니다. 계층을 나눈 이유? 단계 별로 쉽게, 한눈에 알아 볼 수 있기 위해서 입니다. 데이터의 흐름이 한눈에 보이며, 특정한 계층에 문제가 생길 경우 해당 계층의 하드웨어나 소프트웨어를 고쳐 문제를 해결할 수 있습니다. 예를 들어 뼈가 아프면 정형외과를 찾아가고 위장이 아프면 내과를 찾아가는 것과 같은 이치입니다. 각 계층에 대하여 자세히 알아보겠습니..

네트워크 2023.11.18