반응형

CS 11

[자료구조] 힙(heap)이란? - 개념 정리

힙(heap) 힙은 이진트리로서 우선순위 큐(Priority Queue)를 사용하기 위해 만들어진 자료구조이다. 여러 개의 값들 중에서 최댓값이나 최솟값을 빠르게 찾을 수 있고, 이진 탐색 트리와는 달리 중복 값을 허용하는 것이 특징이다. 힙은 완전히 정렬된 것은 아니지만 그렇다고 정렬이 안된 것도 아니다. 이러한 상태를 느슨한 정렬 상태 또는 반정렬 상태라고 한다. 힙(heap)의 종류 최소 힙(Min heap) 부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진트리 부모 노드의 키 값 ≤ 자식 노드의 키 값 최대 힙(Max heap) 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진트리 부모 노드의 키 값 ≥ 자식 노드의 키 값 힙(heap)의 구현 힙은 배열을 이용..

[CS] 도메인 주도 설계(DDD: Domain-Driven Design)란?

DDD란? 애플리케이션을 개발함에 있어 성능, 생산성, 안정성 모두 뛰어난 애플리케이션을 만들기 위해서는 애플리케이션 설계를 잘하는 것이 중요하다. 어떻게 하면 더 나은 애플리케이션을 잘 설계할 수 있는지에 대해 고민하여 얻은 여러 결과물 중 하나가 DDD(Domain-Driven Design), 도메인 주도 설계이다. 의미 그대로 도메인 위주의 설계 기법이다. DDD는 굉장히 뛰어난 설계 및 구현 기법이지만, DDD의 개념을 완벽히 이해하는 것은 쉽지 않으며, 많은 학습과 설계 경험을 필요로 한다. 또한, DDD는 Spring Data JDBC라는 기술과 밀접한 연관이 있어 Spring Data JDBC를 사용하기 위해서는 DDD에 대한 개념을 이해하고 있어야 한다. 도메인(Domain) 애플리케이션 ..

[CS] 인증(Authentication)과 인가(Authorization, 권한 부여)

Intro 인증(Authentication)과 인가(Authorization, 권한 부여)는 컴퓨터에서 보안과 관련된 용어이다. 실생활에서 인증과 인가를 별도로 구분할 경우가 많이 없지만, 컴퓨터 세계에서는 이를 구분 지어 처리한다. 인증(Authentication)이란? 인증은 사용자 또는 디바이스 등의 신원 정보를 확인하는 과정이다. 특정 서비스에 회원 가입을 하고, 로그인하는 과정이 인증에 해당한다. 여러 웹 서비스들은 회원이어야 만이 이용할 수 있는 경우가 많다. 회원이 아닐 경우에는 해당 서비스를 이용하기 위해서는 회원 가입을 통해 아이디와 패스워드를 만들고, 회원 가입하려는 사용자가 본인이 맞는지 확인하는 절차를 가지게 된다. 회원일 경우에는 로그인을 함으로 회원이 맞음을 인증해야 한다. 아이..

[CS] 아키텍처(Architecture)란 무엇인가?

아키텍처(Architecture) 아키텍처는 건축 분야에서 유래된 용어로 요구 사항을 만족하는 건물을 짓기 위한 청사진과 같은 역할을 한다. 만약, 특정 건물을 짓는다면 여러 이해 관계자들이 만나 논의를 할 것이다. 이해 관계자들은 건물의 주인, 건물을 설계하는 건축가, 설계를 토대로 건물을 짓는 시공사 등이다. 이처럼 아키텍처는 이해 당사자들을 위한 어떤 건물이나 구조물에 대한 컨셉을 잡는 것으로부터 시작한다고 할 수 있다. 컴퓨터 공학에서도 이러한 아키텍처를 비슷한 의미로 사용하고 있다. 컴퓨터 분야에서는 크게 시스템 아키텍처, 소프트웨어 / 애플리케이션 아키텍처, 웹 애플리케이션 아키텍처 등이 있다. 시스템 아키텍처(System Architecture) 시스템 아키텍처는 하드웨어와 소프트웨어를 모두..

[CS] 프레임워크(Framework)란 무엇인가?

프레임워크(Framework) 디자인 패턴(Design Pattern)을 창시한 GoF의 한 명이자, 프레임워크 설계의 대가 랄프 존슨(Ralph Johnson)은 프레임워크를 “소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하도록 일련의 협업화된 형태로 클래스들을 제공하는 것”이라 정의했다. 하지만, 위 문장으로 소프트웨어 관점에서 프레임워크의 의미를 이해하기에는 쉽지 않다. Frame은 ‘뼈대’, ‘틀’, ‘구조’ 등의 의미를 가지고 있으며, 그림이나 사진을 담는 액자를 프레임이라 부르기도 한다. 자동차의 뼈대가 되는 강판으로 된 껍데기 또한 자동차의 프레임이라고 부른다. 이처럼 Frame은 어떤 대상의 큰 틀이나 외형적인 구조를 의미하는데, 프로그래밍에서도 Frame은 이와 비슷한..

객체지향 설계 원칙이란 무엇인가? - SOLID란?

결합도와 응집도 결합도(Coupling) 결합도는 클래스 간의 의존성이 낮을수록 결합도가 낮다고 볼 수 있다. 하나의 클래스를 수정하는데 의존하는 다른 클래스를 모두 수정해야 한다면 결합도가 높은 것이다. 따라서 개발함에 있어 낮은 결합도로 개발하는 것이 주된 목표이다. 응집도(Cohesion) 응집도는 비슷한 일을 하는 기능(모듈 내부의 구성 요소)들이 기능적 관련성으로 잘 뭉쳐져 있다면 높은 응집도를 가진다고 볼 수 있다. 하나의 기능을 변경할 때, 다른 곳에서도 변경해야 할 곳이 많다면 응집력이 낮은 것이다. 따라서 개발함에 있어 높은 응집도로 개발하는 것이 주된 목표이다. 즉, 좋은 소프트웨어 설계를 위해서는 결합도는 낮추고, 응집도는 높여야 한다. 객체지향 설계 원칙(SOLID) SOLID는 컴..

[CS] 그래프(Graph)란 무엇인가?

그래프 (Graph) 그래프는 여러 개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료구조이다. 컴퓨터 공학에서 사용하는 그래프는 X축과 Y축의 값을 나타내는 그래프와는 다른 모습을 가지고 있다. 여러 개의 점들이 선으로 이어져 네트워크 망과 비슷한 모습을 가지고 있다. 컴퓨터 공학의 그래프는 지하철 노선도, 전기 회로, 도로 교통망, 거미줄 등과 같은 모습과 유사하다. 그래프는 트리 그래프와는 달리 루트 노드의 개념이 없고, 사이클이 존재하며, 방향 그래프와 무방향 그래프로 나눌 수 있다. 또한, 부모-자식 관계의 개념이 없다. 그래프의 용어 정점 (Vertex) 하나의 점을 표현하는 것으로, 그래프의 위치를 나타낸다. 이를 노드라고도 한다. 간선(Edge) 위치 간의 관계를 선으로 나타낸 것..

[CS] 트리(Tree)란 무엇인가?

트리란? 트리구조는 나무를 뒤집어 놓은 모습과 유사한 구조를 가지고 있어 붙여진 이름이다. 하나의 뿌리(루트 노드)로부터 가지를 뻗어 값을 이룬 형태가 나무와 닮아 있다. 트리는 그래프의 여러 구조 중 단방향 그래프의 한 구조이다. 트리구조는 데이터가 하나 이상의 다른 데이터에 무방향으로 연결된 계층적 자료구조이다. 데이터를 순차적으로 나열시킨 선형 구조가 아닌 하나의 데이터 아래에 여러 개의 데이터가 존재할 수 있는 비선형 구조이다. 또한, 단방향으로 연결되어 아래로만 뻗어 나가기 때문에 사이클이 존재하지 않는다. 트리의 구조와 특징 루트(Root) 최상위에 존재하는 데이터는 루트(Root)라고 한다. 루트부터 시작하여 여러 개의 데이터를 간선(edge)으로 연결한다. 노드(Node) 노드는 루트를 포..

[CS] 스택(Stack)이란 무엇인가?

스택(Stack) 스택은 ‘쌓다.’, ‘쌓이다.’와 같은 뜻을 가진 용어로, 접시를 높이 쌓아 놓은 형태와 비슷한 자료구조이다. 즉, 데이터를 순서대로 쌓는 자료구조이다. 실생활에서 흔히 접할 수 있는 스택은 프링글스와 같은 원통에 들어가 있는 과자를 떠올리면 이해하기 쉽다. 가장 위에 있는(가장 나중에 들어간) 과자를 먼저 꺼내어 먹는 구조이기 때문이다. 스택은 가장 나중에 들어온 데이터가 가장 먼저 빠져나가는 후입 선출(LIFO : Last In First Out) 구조로 되어 있어, 프로그래밍에서 데이터가 입력된 순서대로 처리되는 것이 아닌, 가장 나중에 들어온 데이터를 먼저 처리할 때 사용한다. 스택의 특징 후입선출 (LIFO : Last In First Out) 먼저 들어간 데이터는 나중에 나오..

[CS] 네이티브 앱과 웹 앱의 개념 정리 및 장단점 (Native App & Web App)

네이티브 애플리케이션(Native-application) 네이티브 애플리케이션은 모바일 환경에서 모바일용 애플리케이션을 설치해서 사용하는 애플리케이션이다. 즉, 특정 기기에 설치하여 사용하는 애플리케이션을 네이티브 애플리케이션(Native-application)이라 하며, 네이티브 앱(Native App)이라고도 한다. 네이티브 앱은 애플의 iOS, 안드로이드 OS, Windows 등과 같은 특정 운영체제의 실행환경에 종속되게 된다. 즉, 아이폰에서 설치하도록 만들어진 애플리케이션은 갤럭시나 윈도우에서 실행할 수 없다. 따라서, 같은 애플리케이션이라도 iOS용과 안드로이드 OS용으로 만들어야 한다. 네티이브 애플리케이션의 장단점 장점 웹 앱(웹 애플리케이션) 보다 빠르다. 애플리케이션이 설치된 기기의 시..

반응형