전체 글158 힙과 우선순위 큐 힙(Heap) 힙이란 완전 이진 트리의 일종으로 우선순위 큐를 위해 만들어진 자료구조라고 한다. 여러 개의 값들 중에서 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조이다. 힙은 일종의 반정렬 상태(느슨한 정렬 상태)를 유지한다.(큰 값이 상위에 작은 값이 하위 레벨이 있다는 정도) =>부모 노드의 키 값이 항상 자식 노드의 키 값보다 크다. 최대힙(Max heap) vs 최소 힙(Min heap) 최대 힙은 부모 노드의 key가 자식 노드의 키보다 크거나 같은 이진 트리, 최소 힙은 부모 노드이 key가 자식 노드의 키보다 작거나 같은 이진 트리이다. 힙의 구현 힙을 저장하는 표준적인 자료구조는 배열이다. 구현을 쉽게 하기 위해 배열의 첫번째 인덱스로 1을 사용한다. 왼쪽 자식의 인덱스 = (부.. 2021. 9. 29. 트리 Tree는 스택과 큐와 달리 비선형 자료구조로, 계층적 관계를 표현하는 자료구조이다. 트리의 구성 요소 노드(Node) : 트리를 구성하고 있는 각각의 요소를 의미한다. 루트(Root) : 트리의 가장 상단에 있는 노드를 의미한다. 간선(Edge) : 노드와 노드를 연결하는 선을 의미한다. 단말 노드(Leaf Node) : 하위에 다른 노드가 연결되어 있지 않는, 즉 자식이 없는 노드를 의미한다. 트리에서는 각 층별로 숫자를 매겨서 이를 트리의 레벨이라고 한다. 레벨의 값을 0부터 시작하고, 루트 노드의 레벨은 0이다. 트리의 최고 레벨을 가리켜 해당 트리의 높이라고 한다. 트리에는 대표적으로 이진트리가 있다. 이진트리란 루트 노드를 중심으로 두개의 서브 트리로 나뉘어 지고, 나누어진 서브트리 또한 이진.. 2021. 9. 29. 큐와 스택 큐(Queue) 큐는 선형 자료구조의 일종으로 First In First Out(FIFO)의 성질을 가지고 있다. 먼저 들어간 원소가 가장 먼저 나오게 되는 구조이다. 큐가 사용되는 예로는 은행 번호표 시스템, OS의 스케줄링, 리그오브레전드 매칭큐 시스템 등이 있다. 스택(Stack) 스택도 선형 자료구조의 일종으로 Last In First Out(LIFO)의 성질을 가지고 있다. 나중에 들어간 원소가 먼저 나오게 된다. 스택의 예시로는 웹 브라우저 방문기록(뒤로가기), 실행취소(undo), 수식의 괄호 검사 등에서 사용된다. 2021. 9. 29. 배열과 연결리스트 배열(Array) 배열은 가장 기본적인 자료구조로, 논리적 저장 순서와 물리적 저장 순서가 일치한다. 따라서 인덱스(index)로 해당 원소에 접근할 수 있고, O(1)의 시간만에 해당 원소에 접근할 수 있다. 하지만 원소를 삽입, 삭제하는 경우에는 뒤의 원소들을 한칸씩 shift 해줘야하기 때문에 O(n)의 시간이 걸린다. 연결리스트(Linked List) 연결리스트는 원소 각각이 자기 자신 다음 순서가 어떤 원소인지만 기억한다. 그래서 어떤 특정 인덱스의 원소에 접근하기 위해서는 첫번째 원소부터 순차적으로 검색해야 하므로 O(n)의 시간이 걸린다. 어떤 특정 원소의 주소를 알고 있을 때 그 원소를 삭제하던가 삽입하는 시간은 O(1)의 시간이 걸리지만, 주소를 모르고 몇번째 원소인지(인덱스)만 알고 있.. 2021. 9. 29. MVC패턴이란 무엇인가? MVC는 Model, View, Controller로 나눠져서 서버를 구성하는 모델을 말한다. 그렇다면 Model은 무엇이고, View는 무엇이고, Contoller는 무엇인가? Controller 클라이언트의 요청을 받았을 때, 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출한다. 또한 클라이언트가 보낸 데이터가 있다면, 모델에 전달하기 쉽게 데이터를 가공한다. 모델이 업무를 마치면 그 결과를 뷰에게 전달한다. Model 컨트롤러가 호출할 때 요청에 맞는 역할을 수행한다. 비즈니스 로직을 구현하는 영역으롤 응용프로그램에서 데이터를 처리하는 부분이다. 비지니스 로직이란 업무에 필요한 데이터처리를 수행하는 응용프로그램의 일부라고 할 수 있다. DB에 연결하고 데이터에 대한 CRUD 작업을 수행한.. 2021. 9. 29. TDD란 무엇인가? TDD는 Test-Driven Development의 약자로 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다. 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성한다. 테스트를 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거치는 것이다. 테스트가 코드 작성을 주도하는 개발방식인 것이다. 테스트를 작성하기 위해서, 개발자는 요구사항과 명세를 분명히 이해하고 있어야 한다. 이는 개발자가 보다 요구사항에 집중할 수 있도록 도와준다. 한번에 좋은 코드를 작성하기는 쉽지 않기에 계속해서 리팩토링을 해줘야한다. 이 때 TDD를 해왔다면 간단한 테스트를 통해 리팩토링을 신뢰성있게 진행할 수 있다. 결국 리팩토링의 속도와 코.. 2021. 9. 29. Spring - AOP AOP란 무엇인가? AOP는 Aspect Oriented Programming(관점 지향 프로그래밍)의 약자이다. OOP를 보완해주는 역할을 합니다. Controller, Service, Repository 같은 핵심 관심 사항에 시간측정 같은 공통 관심 사항을 적용해줄 수 있다. 공통 관심 사항을 핵심 관심 사항과 별도로 작성해서 관리해주면 유지보수에 용이하다. 인프라 로직 애플리케이션의 전 영역에서 나타날 수 있음 중복코드를 만들어낼 가능성 때문에 유지보수가 힘들어짐 비지니스 로직과 함께 있으면 비즈니스 로직을 이해하기 어려워짐 Target 어떤 대상에 부가 기능을 부여할 것인가 Advice 어떤 부가 기능을 부여할 것인가? Join point 어디에 적용할 것인가? 메서드, 필드, 객체, 생성자 등.. 2021. 9. 28. RESTful한 API란 무엇인가 REST란 REpresentational State Transfer의 약자이다. RESTful이란 REST의 기본 원칙을 성실히 지킨 서비스 디자인을 말한다. REST는 하나의 아키텍처로 볼 수 있다. REST는 Resource Oriented Architecture이다. API 설계의 중심에 자원(Resource)가 있고, HTTP Method를 통해 자원을 처리하도록 설계하는 것이다. REST 6 가지 원칙 Uniform Interface Stateless Caching Client-Server Hierarchical system Code on demand RESTful하게 API를 디자인 한다는 것은 무엇을 의미하는가? 1. 리소스와 행위를 명시적이고 직관적으로 분리한다. 리소스는 URI로 표현되는.. 2021. 9. 28. Spring - 빈 등록 스프링 빈을 등록하는 방법은 두 개가 있다. 1. 컴포넌트 스캔과 자동 의존관계 설정 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection), 의존성 주입이라고 한다. 아래 코드가 그 예시이다. MemberService는 MemberRepository에 의존하고 이 관계를 외부에서 주입해준다. @Service public class MemberService { private final MemberRepository memberRepository; @Autowired public MemberService(MemberRepository memberRepository) { t.. 2021. 9. 27. 21/09/24 부스트코스에서 네이버 예약 시스템 프로젝트를 마치고, 졸업프로젝트 준비와 취업 준비로 바쁘던 와중에 개발을 조금씩 안하게 되는 것 같았다. 쌩으로 나만의 토이프로젝트를 진행하려니까 배운 것을 활용하는 부분에서도 막막한 부분이 들었고, 아직 공부가 부족하다는 생각이 들어서 추석 연휴부터 인프런의 스프링강의를 듣기 시작했다. 부스트코스보다 조금 더 차근차근 범위를 늘려서 설명해줘서 디테일을 캐치하기 좋은 것 같다. 개발자로써 개발하고 싶은 것은 굉장히 많은데 시간이나 실력같은 현실적인 문제에 막혀서 진행을 못하고 있다. 아무 개발이나 시작할 수 있는 단단한 개발자로써의 기반을 다지고 싶다. 2021. 9. 24. 이전 1 ··· 8 9 10 11 12 13 14 ··· 16 다음