본문 바로가기

Computer Science

(17)
[Software Architecture] REST API과 RESTful API REST API의 개념REST(Representational State Transfer) 원칙을 기반으로 만들어진 API웹의 기존 기술과 HTTP 프로토콜을 활용한 소프트웨어 아키텍처 스타일로 자원의 상태 정보를 주고받는 방식HTTP URI를 통해 자원을 식별하고, HTTP 메서드를 통해 해당 자원을 처리HTTP 메서드 : GET, POST, PUT, DELETERESTful API의 개념REST 원칙을 엄격히 준수하여 설계된 API를 의미REST의 이상적이고 완전한 구현을 뜻하며 자원 중심 설계와 HTTP 프로토콜의 올바른 사용을 강조일관성, 가독성, 유연성을 제공하여 개발자 경험과 시스템의 유지보수성을 높임RESTful API가 각광받는 이유멀티플랫폼 지원IoT, 모바일, 태블릿, 웹 브라우저 등 다..
[OOP] SOLID 원칙 SOLID 원칙이란?객체 지향 프로그래밍에서 코드 품질을 높이고 유지보수를 용이하게 하기 위한 다섯 가지 기본 원칙 SOILD 원칙 5가지SRP(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open Closed Priciple) : 개방 폐쇄 원칙 LSP(Listov Substitution Priciple) : 리스코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 DIP(Dependency Inversion Principle) : 의존 역전 원칙 단일 책임 원칙 - SRP (Single Responsibility Principle)'클래스(객체)는 단 하나의 책임만 가져야 한다'는 원칙 → 책임 = 기능 담..
[알고리즘] 시간 복잡도와 공간 복잡도 복잡도(Complexity)흔히 알고리즘에서 쓰이는 복잡도(Complexity)란 그 알고리즘이 얼마나 효율적인지를 나타내는 지표의 의미특정 알고리즘이 어떠한 입력에 대하여 연산을 수행할 때 얼마만큼의 시간이 걸리는지(시간 복잡도,Time Complexity)와 얼마만큼의 메모리를 사용하는지(공간 복잡도, Space Complextiy) → 이 2가지 관점에 대한 효율성을 측정하기 위한 개념즉, 알고리즘의 성능을 판단하는 척도시간 복잡도(Time Complextiy)알고리즘이 얼마나 시간적으로 효율적인지, 즉 얼마나 짧은 시간 안에 연산을 수행할 수 있는지를 나타내는 지표로 의미적으로는 시간적인 개념이지만 실제로 코드에서 측정되는 대상은 '실행되는 연산의 횟수'동일한 알고리즘이어도 실행되는 컴퓨터 성능이..
[알고리즘] 자주 사용하는 정렬 버블 정렬(Bubble Sort) 특징인접한 두 요소를 비교해 자리를 바꾸며 정렬하는 방식Loop가 끝날 때마다 가장 마지막에는 가장 큰 값 또는 가장 작은 값이 위치복잡도시간 복잡도 : O(n^2)공간 복잡도 : O(1)장점구현이 간단자료의 이동이 적음단점정렬 속도가 느리기 때문에 실무에서는 사용되지 않고 대부분 교육 목적이나 간단한 작업에만 사용삽입 정렬이나 선택 정렬과 같은 시간 복잡도를 갖지만, 평균적으로 버블 정렬의 교환 횟수가 더 많기 때문에 더 많은 시간 소비선택 정렬(Selection Sort)  특징전체 리스트에서 가장 작은(혹은 큰) 요소를 선택해 정렬하는 방식1번째부터 n번째까지 가장 작은 값을 찾아 1번째 데이터와 swap2번째부터 n번째까지 가장 작은 값을 찾아 2번째 데이터와 s..
[자료구조] 해시맵 개념과 해시 충돌 해시맵(HashMap)이란?키(Key)와 값(value) 쌍을 저장하는 자료구조각 키는 고유(unique)하며, 키를 사용하여 해당 값을 빠르게 검색 가능해싱(Hashing)HashMap의 핵심 원리키(Key)는 해싱 함수(Hashing Function)을 통해 정수값인 해시코드(HashCode)를 변환하고, 변환된 해시 코드는 Hash 배열의 각 요소인 '버킷(Bucket)'의 인덱스가 됨해시맵(HashMap) 예시각 배열의 요소를 버킷이라 함 정리키(key)가 해시 함수에 의해 해시 코드로 변환되고 해당 해시코드는 배열의 각 요소인 버킷의 인덱스 역할해당 버킷을 찾아가면 값을 삽입 및 조회 가능HashMap의 특징키 기반의 빠른 액세스 : 키를 사용하여 값을 빠르게 검색하거나 수정 가능순서를 보장하지..
[자료구조] 이진트리와 이진탐색트리 이진 트리(Binary Tree)란?모든 노드들이 둘 이하(0개, 1개, 2개)의 자식을 가진 트리이진 트리의 형태에 따라 명칭이 달라짐정 이진 트리(Full Binary Tree)각 노드가 0개 혹은 2개의 자식 노드를 가진 트리즉, 모든 노드가 자식을 완전히 가지거나 아예 가지지 않는 구조완전 이진 트리(Complete Binary Tree)마지막 레벨을 제외한 모든 노드가 가득 채워진 트리마지막 레벨의 노드는 전부 채워져 있지 않아도 되지만 노드들이 왼쪽부터 차례대로 채워져야 함이 구조는 힙(Heap) 자료구조의 조건과도 관련 있음포화 이진 트리(Perfect Binary Tree)모든 노드가 2개의 자식을 가지며(정 이진 트리) 모든 리프 노드가 같은 레벨에 위치하는 트리모든 레벨의 노드가 채워져..
[자료구조] Queue 개념 큐(Queue)란?들어온 순서대로 출력되는 First In First Out으로 FIFO(피포) 구조라고 하며 선입선출 형태의 선형 자료 구조입력과 출력이 동일한 스택과 달리 데이터가 입력되는 입구와 데이터가 출력되는 출구 총 2개의 입출구를 가짐큐의 특징선입 선출의 자료 구조기본 연산enqueue : 큐의 끝에 요소 추가dequeue : 큐의 맨 앞의 요소를 제거하고 반환peek : 큐의 맨 앞 요소를 확인하되 제거는 하지 않음큐의 front와 rearfront : 큐의 가장 앞에 있는 데이터 위치rear : 큐의 가장 마지막 위치큐 사용 시 주의 사항오버플로우(Overflow) : 고정된 크기의 큐를 사용할 경우 큐가 가득 찬 상태에 데이터 추가 시 발생언더플로우(Underflow) : 비어 있는 큐..
[자료구조] Stack 개념 스택(Stack)이란?가장 마지막에 삽입된 데이터가 가장 처음으로 출력되기 때문에 Last In First Out으로 LIFO(리포) 구조라고 하며 후입선출 형태의 선형 자료 구조데이터가 삽입되면 가장 안쪽부터 차곡차곡 쌓여, 꺼낼 때는 역순으로 꺼내지게 됨스택의 특징스택의 데이터는 top을 통해서만 접근 가능스택에 데이터를 삽입할 때는 top 위에 데이터를 추가(push)하고, top의 위치를 한칸 위로 변경스택에 데이터를 삭제할 때는 top에 위치한 데이터를 삭제(pop)하고, top의 위치를 한칸 아래로 변경스택 주의 사항스택의 데이터가 꽉 찼을 때 데이터를 삽입(push)하게 되면, 스택 오버플로우(Stack Overflow)가 발생스택이 비어있는 상태일 때 데이터를 삭제(pop)하게 되면, 스택..