본문 바로가기

분류 전체보기81

Spring에서 자주 사용되는 디자인 패턴 디자인 패턴이란 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 할 수있는 훌륭한 해결책 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 ‘규약’ 형태로 만들어 놓은 것 디자인 패턴의 종류는 다양하지만, 그 중 스프링과 관련이 있는 패턴인 싱글톤 패턴, 템플릿 메소드 패턴, 팩토리 메소드 패턴, 프록시 패턴에 대해 살펴보고자 한다. 싱글톤 패턴 하나의 클래스에 오직 하나의 인스턴스만 갖도록 하고, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴이다. 사용처 보통 싱글톤 패턴이 적용된 객체가 필요한 경우는 그 객체가 리소스를 많이 차지하는 역할을 하는 무거운 클래스일때 적합하다. 대표적으로 데이터베이.. 2023. 2. 7.
MVC 패턴이란? MVC 패턴이란 MVC 는 소프트웨어 디자인 패턴의 하나로, Model, View, Controller의 약자이다. 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴이다. 각 컴포넌트에 대해 살펴보면, 1) 모델 모델은 어플리케이션의 정보, 데이터를 나타낸다. 비즈니스 로직을 처리한 후 모델의 변경 사항이 컨트롤러와 뷰에 전달된다. 2) 뷰 사용자에게 보여지는 부분, 즉 유저 인터페이스(User interface)를 의미한다. 뷰는 받은 데이터를 화면에 표시해주는 역할을 하는데, 모델에게 전달받은 데이터를 별도로 저장하지 않고 사용자가 화면에 표시된 내용을 변경하게 되면 모델에게 전달하여 모델 자체를 변경해야 한다. 3) 컨트롤러 모델(Model)과 뷰(View) 사이.. 2023. 2. 6.
ORM과 JPA ORM이란 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하여 둘 사이에 불일치가 존재한다. 그러나 ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성함으로써, 불일치를 해결할 수 있다. 장점 ORM을 이용하면 SQL Query가 아닌 메서드로 데이터를 조작할 수 있다. 재사용과 유지보수가 편리하다. 객체마다 코드를 별도로 작성하기 때문에 코드의 가독성이 높아진다. SQL의 절차적이고 순차적인 접근이 아닌 객체지향적인 접근으로 인해 생산성을 높여준다. DBMS에 대한 종속성이 저하된다. -> 프로그래머는 Object에 집중함으로 극단적으로 DBMS를 교체하는 거대한 작업에도 비교적 적은 리스크와.. 2023. 2. 3.
Quick Sort vs Merge sort Quick sort, Merge sort는 이전 게시물인 https://nueahx7674.tistory.com/6 에서 확인 할 수 있다. 해당 게시글에서는 Quick Sort와 Merge sort의 차이를 중점적으로 다룬다. Quick Sort와 Merge Sort의 차이 퀵소트는 불안정 정렬, 병합 정렬은 안정 정렬이다. 퀵 정렬은 최악의 경우(오름차순 정렬이거나 내림차순 정렬일 경우) O(n^2)의 시간 복잡도를 가지지만 병합 정렬은 O(n log n)으로 동일하다. 병합 정렬은 추가 메모리 공간을 필요로 한다. 퀵 정렬이 평균 시간 복잡도에서는 Merge Sort보다 빠르다. 이는 아래에서 자세히 설명하겠다. Quick Sort가 Merge Sort보다 빠른 이유 이를 설명하기 위해서는 지역성의.. 2023. 1. 31.
정렬 알고리즘 정렬 알고리즘이란? 정렬 알고리즘은 원소들을 일정한 순서대로 열거하는 알고리즘을 말한다. 정렬 알고리즘의 대표적인 예시로는 삽입 정렬(Insertion sort), 선택 정렬(Selection Sort), 버블 정렬(Bubble sort), 합병 정렬(Merge Sort), 퀵 정렬(Quick Sort), 힙 정렬(Heap sort)이 있다. Stable vs Unstable 정렬을 진행할 때, 같은 값의 원소더라도 상대적인 위치가 유지 되면 stable한 정렬 방식, 그렇지 않으면 unstable한 정렬 방식이다. 예를 들어, 아래의 숫자들을 오름차순으로 정렬해보자. 이때, 1’과 1은 같은 숫자이다. 5 3 1` 9 2 1 정렬 알고리즘이 수행 된 이후 1` 1 2 3 5 9 로 정렬 되었다면 상대적.. 2023. 1. 31.
정렬 - sort 함수 다루기 (기본 정렬부터 커스텀까지) 배열의 정렬에는 sort()함수가 기본적으로 사용된다. 이 함수를 사용하면 pair의 경우 첫 번째 원소를 기준으로 먼저, 오름차순으로 정렬된다. int main(){ vector v; for(int i=5; i>=1; i--) v.push_back(i); // 기본 정렬 sort(v.begin(),v.begin() + 2); for(int i : v) cout 2023. 1. 24.