객체 지향 프로그래밍 캡슐화 항상 요구 사항은 추가되거나 변경될 수 있다 1. 객체의 의인화 현실 세계와는 다르게 가상 세계에서의 객체는 능동적이다. 2. 클래스 설계 - 객체가 형태를 갖추면 비슷한 객체들끼리 타입으로 묶어 클래스를 추상화한다. - 외부와 내부를 구분 지어야 한다. 외부와의 협력은 public 인터페이스를 통해서만 한다. - 객체가 능동적이기 위해서는 외부로부터의 간섭을 최소화해야 한다. 3. 객체의 특징 1. 캡슐화 - 객체의 세부적인 상태는 감추고 메시지는 오직 public 인터페이스로만 주고받는다. 2. 단일 책임 - 모든 객체는 맡은 일을 외부의 도움 없이 할 수 있어야 한다. 3. 응집도 - 밀접하게 연관되어 있는 일만 수행하고 관련이 없는 일은 다른 객체에게 위임해야 한다. ..
Array - 조회: 논리적 저장 순서 = 물리적 저장 순서 (random access O(1) 가능) - 삭제, 삽입: 접근 O(1) + shift O(n) = O(n) Linked List - 조회: 논리적 저장 순서 != 물리적 저장 순서 O(n) - 삭제, 삽입: O(n) Stack - LIFO or FILO Queue - Heap 구현하기 Stack 2개로 Queue 구현하기 하나는 입력만 받고, 다른 하나는 pop 만 하게 한 후, pop 하는 쪽이 비면 입력 받는 stack 에 원소가 있다면 pop 시켜서 가져오게끔 구현하면 된다. Tree - 포화 이진 트리: 모든 노드가 2개의 자식 노드를 갖는 트리 - 완전 이진 트리: 위에서 아래로, 왼쪽에서 오른쪽으로 차곡차곡 채워져 있는 트리 - ..
프로세스와 스레드 프로세스는 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 실행중인 프로그램을 말한다. 운영체제로부터 주소 공간, 파일, 메모리 등을 할당받으며 이를 총칭하여 프로세스라고 부른다. 더 구체적으로는 프로세스는 함수 매개 변수와 복귀 주소, 로컬 변수와 같은 임시 자료를 갖는 프로세스 스택과 전역 변수들을 갖는 데이터 섹션을 포함한다. 또 동적으로 할당되는 메모리의 영역인 힙을 포함한다. 프로세스는 PCB(Process Control Block) 이라고 하는 중요한 정보를 저장해놓는 공간을 갖고 있다. CPU 를 할당 받고 작업하는 도중에 반환해야 하는 상황이 생기면 PCB 에 작업 상황을 저장해놓고 반환한 후에 나중에 CPU 할당 받았을 때 PCB 로부터 작업 상황을 불러와서..
🚩 Introduction 스터디 중 코테에 가끔 등장하는 유형인 웹 브라우저 탐색 문제를 풀게 되었다. 구글링을 해도 답이 많지 않고, 푼 사람도 적은 문제라 도움이 될까 싶어 올린다. 📌 문제 https://www.acmicpc.net/problem/23294 23294번: 웹 브라우저 1 첫째 줄에 접속할 수 있는 웹페이지의 종류의 수 N, 사용자가 수행하는 작업의 개수 Q 와 최대 캐시 용량 C 이 순서대로 주어진다.(1 ≤ N, Q ≤ 2,000, 1 ≤ C ≤ 200,000) 둘째 줄에는 N개의 정수 CAPi www.acmicpc.net 📝 설명 간단히 뒤로 가기와 앞으로 가기에 있는 페이지 번호들을 각각 Deque 과 Stack 에 넣어서 풀었다. volume 이라는 변수로 현재 사용되는 캐..
Introduction 스프링 부트로 프로젝트를 진행하던 도중, 분명 레포지토리 클래스 위에 @Repository 어노테이션을 붙였는데 레포지토리 클래스를 찾을 수 없다는 문구와 함께 에러가 발생했다. 오류 내용 이 문제를 해결하고자 'debug' 옵션과 함께 다시 실행해보았다. logging: level: root: WARN org: springframework: web: DEBUG hibernate: ERROR application.yml 파일에 위 코드를 추가해주었다. 발견한 원인 로그에서 발견한 내용은 사실상 'debug' 옵션을 켜기 전과 같은 설명을 하고 있었다. 아래는 쓰여 있던 내용이다. No qualifying bean of type 'com.example.fcmproject.reposi..
💡Remark DFS 재귀 호출 시 변동이 있는 매개 변수를 넣을 때 주의해야 한다. 그 이유는 재귀 호출을 할 때에는 매번 하나의 root 에서 살을 붙이는 방식을 사용하는데, root 자체에 변화를 주면 안되고 root 에 살을 하나 붙인 값에 대해 재귀 호출하고, 다시 root 그대로에 다른 살 하나를 붙인 값을 재귀 호출하는 식으로 root 에 변화가 생겨서는 안되고 매개 변수에만 변화되는 모양을 추적할 수 있게 넣어주어야 하기 때문이다. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/42839 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 ..
Introduction 새로운 프로젝트를 생성하면서 그동안의 Swagger 을 사용한 문서화 방식 대신 Spring REST docs 를 활용해보고자 했고, 이전에 사용하지 않은 플러그인을 추가했다. 개요 Gradle 로 빌드 시 발생한 에러를 자세히 읽어본 후 관련 코드를 찾아보다가 플러그인 중 ''org.asciidoctor.convert'' 가 추가된 것을 발견할 수 있었다. 해결 구글링을 하는 도중 asciidoctor 는 Spring Rest Docs 에서 사용하는 플러그인이라는 사실을 알게 되었다. Spring Rest Docs 공식 문서에서는 다음과 같이 build.gradle 파일을 작성하라고 되어 있다. plugins { (1) id "org.asciidoctor.jvm.convert" ..
Goal 캐시를 적용하여 같은 키워드 사용하여 검색 시 캐시에 저장된 쿼리문과 엔티티를 사용하도록 하여 검색 속도 개선 캐싱 적용하기 위한 준비 * 환경 - Spring Boot 3.x - Hibernate 6.x 우선 Hibernate 의 버전을 확인하고 버전에 맞는 EhCache 의존성을 build.gradle 에 추가해주었다. 출처의 첫 번째 링크를 참조해서 JCache 와 EhCache 의 의존성을 모두 추가 후 yml 파일을 설정해 1. L2 캐시를 사용하며 2. 콘솔 로그에서 L2 캐시가 적용이 올바르게 되었는지 확인하겠다고 명시했다. 아래는 build.gradle 에 추가한 dependencies 이다. implementation 'org.hibernate.orm:hibernate-jcach..
- Total
- Today
- Yesterday
- google cloud
- 실시간데이터
- Spring Boot
- N+1
- 깃랩
- Java Data Types
- DeSerialization
- 알고리즘
- json web token
- JOIN FETCH
- 도커
- 인증/인가
- JPQL
- 기지국 설치
- 프로그래머스
- ci/cd
- JPA
- 코테
- DTO
- Jackson
- 가상 서버
- 지연 로딩
- @RequestBody
- Firebase
- 역직렬화
- spring
- FCM
- docker
- LazyInitializationException
- gitlab
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |