일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- react
- framework
- BOJ
- 우아한형제들
- 웹프로그래밍
- TypeScript
- Database
- Vue.js
- JavaScript
- DFS
- 탐색알고리즘
- Vue
- 백준
- mobx
- 연습문제
- Backtracking
- 프레임워크
- JPA
- BAEKJOON
- 우아한테크캠프
- Algorithm
- 단위테스트
- 데이터베이스
- 알고리즘
- SQL
- codeground
- springboot
- Java
- Spring
- BFS
- Today
- Total
목록Java (25)
설모의 기록
상속 관계 매핑 여러 클래스를 구현할 때 공통된 기능이나 변수가 있다면 상위 클래스를 만들어 그 곳에 모아두는 '상속' 을 이용하는 경우가 많습니다. 가장 대표적인 예로 Animal 클래스라는 상위 클래스를 만들어 bark() 라는 함수를 만들어두고, 하위 클래스로 Dog, Lion, Cat 등을 만들어 bark() 함수를 오버라이딩하는 경우입니다. 그렇다면 객체의 상속 관계가 데이터베이스에서는 어떻게 매핑이 될까요? 이에 대한 설명을 아래에 기록하겠습니다. 상속 관계 매핑사실 RDB에서는 '상속' 개념이 따로 있지 않습니다. 따라서 ORM 에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것입니다.슈퍼타입-서브타입 논리 모델을 실제 물리 모델인 테이블..
Web Socket? 웹에서 채팅을 구현할 때 사용하는 Web Socket 에 대해 알아보겠습니다. 보통 서버에게 정보를 요청할 때 HTTP/HTTPS 통신을 거치게 되는데요. HTTP/HTTPS 통신은 클라이언트가 요청을 했을 때 서버가 해당하는 정보를 응답해주는 구조입니다. 그러나 채팅은 누군가가 대화를 보내면 내가 서버에 요청을 보내지 않아도 서버가 저에게 정보를 주어야 합니다. 이럴 때 사용하는게 웹소켓입니다. 내가 원하는 정보에 대해 구독을 신청하고, 토픽에 대한 메세지를 발행하면 해당 토픽을 구독하고 있는 모든 사용자에게 보내주는 방식입니다. HTTP/HTTPS 는 같은 사용자가 서버에게 여러 번 자원이나 정보를 요청하는 경우에 매번 연결을 요청해야 하며 그 때마다 Header 에 요청 정보를..
캐시 적용을 왜 해야 하는거지? 컴퓨터 전공자라면, 컴퓨터 관련 과목을 수강해 본 적이 있으시다면 '캐시(Cache)' 라는 말을 들어보신 적이 있을 것입니다. 캐시라고 구글링 해보시면 많은 자료가 나올텐데요. 결국 캐시는 성능을 개선하기 위해 적용합니다. 웹 사이트를 개발하는 데에 있어서 적용할 수 있는 캐시는 브라우저 캐시와 서버단에서의 캐시가 있을 것입니다. 브라우저 캐시는 이미 받아왔던 자원들은 캐시에 저장해둔 후 일정 기간동안 같은 리소스 요청은 캐시에 있는 내용을 반환하는 것입니다. 그러면 서버와의 통신에 따른 비용을 줄일 수 있습니다. 서버에서의 캐시는 DB를 조회하는 비용을 줄이기 위해서 많이 사용할 것입니다. 쇼핑몰을 예로 들면, 브라우저를 새로 로드할 때마다 상품 리스트를 보내줘야 하는..
HTTP통신과 Spring을 이용한 데이터 저장 오늘은 기본적인 HTTP통신이 이루어지는 간략한 과정과 h2database 를 이용해 Spring에서 데이터를 관리하는 방법에 대해 학습했습니다. HTTP통신 브라우저에서 http://hyeooona825.tistory.com/ 를 검색하면 그냥 해당 페이지 하나가 로드되는 것과 같아 보이지만, 실제로는 많은 일이 일어납니다. 위의 그림이 간략하게 나타낸 모습입니다. 1. http://hyeooona825.tistory.com/ 를 입력하면 해당 도메인에 대한 IP주소를 알기 위해 DNS 서버에게 요청합니다. 그림에는 DNS 서버가 한 대이지만, 실제로는 여러 상위 DNS 서버가 있을 수 있습니다. 2. DNS 서버는 요청받은 도메인에 해당하는 IP주소를 ..
이 포스트는 Java 언어를 이용해 프로그램을 구현해 나갈 때, 단위 테스트를 수행하기 위해 사용하는 프레임워크인 JUnit에 대한 내용입니다. 프로그램을 구현하다보면 지금 내가 작성하고 있는 코드가 정상적으로 수행되는 코드인지가 궁금한 경우가 많습니다. Java의 경우 System.out.print() 또는 디버깅 툴을 이용해 알아보고, JavaScript, TypeScript 의 경우에는 console.log() 를 이용하거나 debugger를 이용해 알아볼 수는 있습니다. 그러나 코드 중간중간의 단위에 대한 결과값을 빠르게 보기에는 어려움이 많습니다. 중간 결과를 알아보기 위해 이전에 수행해야하는 작업까지 모두 수행한 후 알아볼 수 있기 때문입니다. 이럴 때 유용한 프레임워크가 바로 JUnit 입니..
빌더 패턴(Builder Pattern)안드로이드 프로젝트 또는 자바 프로젝트를 진행하다보면 많은 라이브러리를 사용하게 되는데요. 라이브러리에서 제공하는 객체를 사용할 때 빌더 패턴이 자주 보입니다. 예전에는 그냥 구현한 코드인 줄 알았는데, 여러 곳에서 똑같은 패턴을 사용하는 것을 보고 공부하게 되었습니다. 서버와 HTTP 통신을 하기 위해 사용하는 라이브러리인 Retrofit2를 사용할 때에도 빌더 패턴을 이용하게 됩니다. 그렇다면 빌더 패턴은 무엇일까요? 클래스 작성객체지향 프로그래밍 언어를 사용하면 클래스를 사용해 객체의 틀을 정의하게 되는데요. 흔히 작성하는 클래스 코드 예제를 살펴보겠습니다. 123456789101112131415161718192021222324252627public class..
이 문제는 상, 하, 좌, 우로 1칸씩 이동하거나 말처럼 입력받은 K번만큼만 (상, 하) (좌, 우)로 두칸 또는 한칸씩 움직여 오른쪽 아래칸으로 이동하는데에 걸리는 시간을 구하는 문제입니다. 처음엔 DFS로 푸는게 더 간단할거라 생각해서 DFS로 풀다가 시간초과를 해결하지 못해 BFS로 방법을 바꿔 풀었습니다. 이번에는 계속 틀리길래 다른 분들의 코드를 검색해봤지만 로직이 뭐가 다른건지를 이해를 못했습니다T^T 2일동안 답답해하다 오류를 발견했는데, 저는 길을 찾지 못할 때 지금까지 걸린 시간을 출력해주고 있었습니다. -1을 반환해주는 코드로 바꾸니 맞았습니다. 너무 허탈하네요.. 기본 BFS에서 사용하는 dx, dy 배열을 12 길이의 배열로 바꾸고 for문에서 인덱스가 4보다 작을 때와 클 때를 나..
이 문제는 DFS와 Backtracking을 이용해 중복되지 않은 알파벳은 방문하지 않는 조건으로 (0, 0) 에서 갈 수 있는 경로의 최대거리를 구하는 문제입니다. 저는 char 자료형 특징을 이용할 생각을 못하고 지금까지 지나온 알파벳을 ArrayList에 저장해 다음 경로로 갈 때마다 체크해주는 코드로 짜봤는데요. 시간이 8000ms가 넘길래 너무 놀라서 검색해봤는데 char 자료형을 이용하면 훨씬 수월하게 탐색할 수 있는 방법이 있었습니다. 아래에 비효율적으로 짠 코드와 최적화한 코드를 차례로 첨부하겠습니다. 우선 대문자 알파벳이기 때문에 'A' ~ 'Z' 까지가 범위가 되며 int형으로 바꾸면 65 ~ 90이 됩니다. 그래서 저는 check 배열의 인덱스를 (입력 알파벳 - 'A' ) 이라 생각..
이 문제는 전형적인 bfs, dfs 문제로 배열을 돌면서 값이 1인 그룹이 몇개가 있는지를 출력하는 문제입니다. 아래의 코드는 bfs로 푼 문제입니다. 그룹의 개수가 배추흰지렁이의 최소한의 마리수입니다.
이 문제는 1 / m 만큼씩 1을 나눠 구간을 만들고 그 다음으로 주어지는 숫자들을 그 구간별로 나눈 후, 구간별로 몇 개의 숫자가 존재하는지 출력하는 문제입니다. 쉽다고 생각하고 몇번이나 코드를 제출했지만 계속 '틀렸습니다' 만 반복해서 대체 왜 그러는건가 double 에 대해 찾아봤습니다. 알게된 내용은 다음과 같습니다.컴퓨터가 숫자를 처리할 때에는 1.xxxxx(지수부) * 2^(가수부) 로 인식하기 때문에 2의 배수가 아니거나 소수인 값은 내가 저장한 값이 그대로 저장되지 않는 경우가 있다고 합니다. 이 상황에서 오차가 발생하기 때문에 그 오차를 해결하는 과정을 확인하기 위한 문제였다고 볼 수 있습니다. 예를 들어, double a = 0.1; 이러한 코드를 작성하였다 해도 a에는 0.1 이 아니..