CS
Observer Pattern
참고 자료https://inpa.tistory.com/entry/GOF-%F0%9F%92%A0-%EC%98%B5%EC%A0%80%EB%B2%84Observer-%ED%8C%A8%ED%84%B4-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90https://velog.io/@octo__/%EC%98%B5%EC%A0%80%EB%B2%84-%ED%8C%A8%ED%84%B4Observer-Pattern 00. 들어가기 전 원래 Observer Pattern에 대해서 알고는 있었으나, 최근에 로직을 구성하면서 관심사를 분리하여 결합을 낮출 수 있는 Spring Boot와 NestJS의 EventListner 기능을 애용하고 있는 데 이게 사실 Ob..
상대 패턴(State Pattern)
상태 패턴(State Pattern) 상태 패턴은 객체의 상태에 따라 행동을 해야하는 상황에서 객체 스스로 자신의 상태에 따른 행동을 하지 않고, 상태를 객체화하여 상태가 행동을 할 수 있게 위임한 패턴이다. 쉽게 말하면 상태를 Class에서 값으로 가지고 있는 것이 아니라, Class로 선언하고 해당 상태의 Class가 해야하는 행동을 메서드로 정의하고 이를 인터페이스로 캡슐화 후 호출하는 Class가 인터페이스를 호출하는 방식이다. 사용 예시 자 그러면 Person Class를 이용해서 예시를 들어보자. 사람은 나이에 따라 상태를 child(어린이), Adult(청년), Senior(노년)으로 구별된다. 해당 상태에 따라서 움직인다라는 메서드를 사용 가능하고 움직이면 나이가 들다가 다시 어린이로 돌아..
[Git] Git 사용법 - Git, Commit, Push, Repository
1. Git이란? 개발자라면 Git을 모를 수가 없을 것이다. 사이드 프로젝트에서든 실무에서든 개발 프로젝트에서는 Git 없이는 개발과 협업이 거의 불가능할 정도로 개발자에게는 필수적인 Tool이다. Git은 형상 관리 도구(버전 관리 시스템) 중 하나로 소프트웨어를 개발하는 집단에서 코드를 효과적으로 관리할 수 있게 도와주는 무료이자 공개 소프트웨어다. 한 마디로 Git은 여러명의 개발자가 하나의 소프트웨어를 개발할 때 소스코드를 관리를 하기 위해서 사용한다고 생각하면 된다. (1) Git의 필요성 위에 언급한 것과 같이 Git은 여러명의 개발자가 하나의 소프트웨어를 개발 할 때 소스코드 관리를 위해서 사용한다고 하는 데 그렇다면 어떤 점의 이유 때문에 Git과 같은 버전 관리 시스템을 사용해야할까? ..
Cookie, Session, Cache
참고 자료 : https://mangkyu.tistory.com/69 오늘은 Cache, Cookie와 Session에 대해서 공부하고자 한다. 먼저 Cache, Cookie, Session은 왜 사용하는가?? 바로 HTTP 특징 때문인데, HTTP의 특징 중에서는 Stateless Protocol과 Connectionless Protocol이 있다. Stateless Protocol Client의 상태 정보를 가지지 않는 서버 처리 방식으로, Client와 첫번째 통신에서 데이터를 주고 받았다고 하더라도 두번째 통신에서 이전 데이터를 유지하지 않는다. Connectionless Protocol Client가 Server에 요청을 했을 때, 그 요청에 맞는 응답을 보낸 후 연결을 끊는 처리 방식 하지만 ..
[자료 구조] Queue
Queue 컴퓨터의 자료구조로, 먼저 넣은 데이터가 먼저 나오는 FIFO(First In First Out) 구조로 저정하는 형식 Queue는 위에서 쌓이는 이미지로 설명한 Stack과 달리 위의 이미지와 같이 입구와 출구가 다른 구조라고 생각하면 쉽다. 데이터가 들어오는 입구와 나가는 출구는 동일하지 않기에, 입구로 먼저 들어온 데이터가 출구로 가장 먼저 나가는 구조를 가지고 있으며, Queue에서 데이터가 들어가는 입구를 rear이라고 하고, 데이터가 나오는 출구를 front라고 한다. Queue는 FIFO라고 하는 데, FIFO는 First In FIrst Out의 약자로, 처음 들어가는 데이터가 가장 먼저 나오는 구조라는 의미다. 전에 이야기 했던 Stack이 가지고 있는 LIFO 특성과 차이점은..
[자료 구조] Stack
Stack 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO(Last In First Out)형식의 자료 구조 Stack은 데이터가 한 줄로 위에서 아래로 들어간다고 생각하면 쉬운데, 아래로 데이터가 들어오거나 나갈 수 없고, 위에서 데이터가 들어와서 차곡차곡 쌓이고, 데이터가 나갈 때도 위에서부터 나가는 구조인데 이는 LIFO를 따르기 떄문이다. LIFO(Last In First Out)는 최근의 추가항 데이터가 가장 먼저 제거되는 것이다. Stack의 대표적인 기능은 아래와 같다. push : Stack에 요소를 추가한다. pop : Stack에서 요소를 뺀다. top : Stack의 입구와 가장 가까운 요소에 대해 반환한다. size : Stack의 크기를 반환한다.
Template Engine(템플릿 엔진)
참고 사이트 : https://velog.io/@hi_potato/Template-Engine-Template-Engine Template Engine 지정된 템플릿 양식과 데이터가 합쳐져서 HTML 문서를 출력하는 소프트웨어 Web Template Engine는 View(Html)와 Data Logic(DB)와 분리해주는 기능을 하며, 템플릿 엔진은 서버 사이드 템플릿 엔진과 클라이언트 사이드 템플릿 엔진으로 나누어진다. Server Side Template Engine 서버에서 DB 혹은 API에서 가져온 데이터를 미리 정의된 Template에 넣어서 HTML을 그리고 클라이언트에 전달해주는 역할을 수행하는 데, HTML 코드에 정적으로 사용되는 부분을 템플릿으로 만들어두고 동적으로 생성되는 부분(데..
[백준 - 1712] 손익 분기점
[문제] 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다. 예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다.노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.A, B, C가 주어졌..
[백준 - 13458] 시험 감독
[문제] 총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다. i번 시험장에 있는 응시자의 수는 Ai명이다. 감독관은 총감독관과 부감독관으로 두 종류가 있다. 총감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 B명이고, 부감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 C명이다. 각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다.각 시험장마다 응시생들을 모두 감시해야 한다. 이때, 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성하시오. [입력] 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다.둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다.셋째 줄에는 B와 C가 주어진다. ..
[백준 - 4344] 평균은 넘겠지(배열 응용)
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. [입력] 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다. [출력] 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 해당 문제는 크게 어렵지 않게 풀 수 있는 것 같다. 먼저 메인 메서드에서 스캐너를 활용하여 학생 숫자를 정수로 입력을 받는다. 정수가 1 ~ 1000이라는 조건이 있기에, 1보다 작거나 1000보다 크면 ERROR라는 메세지를 출력 ..