본문 바로가기

전체 글

(107)
[Java] Collections framework 이해하기 이번 포스팅에서는 Collections Framework에 대해 이해하는 시간을 갖도록 하겠습니다. 본 포스팅은 생활코딩님의 Java Collections framework를 참고하였습니다. (https://www.youtube.com/watch?v=KaPbVAxi5LE) 1.ArrayList import java.util.ArrayList; public class MainClass { public static void main(String[] args) { String[] objectArr = new String[2]; objectArr[0] = "1"; objectArr[1] = "2"; // objectArr[2] = "3"; ArrayList al = new ArrayList(); al.add("..
[Java] 제네릭 이해하기 안녕하세요. 오늘 포스팅에서는 JDK1.5 이후로 추가된 자바의 제네릭스에 대해 포스팅해보겠습니다. 1. 제네릭이란? Generics add stability to your code by making more of your bugs detectable at compile time. – Oracle Javadoc 제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. – 생활코딩 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다. – 자바의 정석 기본적으로 클래스 내부에서 사용할 데이터타입을 사전에 정의하지 않기 때문에 인스턴스 생성 시에 해당 클래스 안의 데이터 타입을 동적으로 넘겨줄 수 있습니다. 또한 ..
[Database] 예제로 보는 데이터베이스 정규화 안녕하세요. 오늘 포스팅에서는 데이터베이스의 정규화에 대해 알아보겠습니다. 우선 본 포스팅에 앞서 사용한 자료는 이 링크에서 참조하였으며, 유튜브 생활코딩님의 강의를 기반으로 합니다. 1. 정규화란? 우선 기본적인 정규화의 의미를 살펴보면, 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라 합니다. 즉 데이터베이스가 크고 구조화되지 않은 상태라면, 이를 작고 잘 구조화시켜서 저희가 원하는 비즈니스 로직을 수행하는 데에 있어 이상이 없고 효율적으로 처리할 수 있는 데이터베이스 설계를 구축하는 것에 그 목적이 있습니다. 여기서 말하는 이상(문제)란 다음과 같습니다. 갱신 이상 ( Modification Anomaly ) 중복된 데이터 중 일부를 갱신할 때 의도치 않은 데..
[Spring] 전통적인 Spring의 Transaction과 JPA의 OSIV 전략 오늘은 Spring의 전통적인 Transaction 처리의 과정과 JPA의 OSIV전략에 대해 이해해보는 포스팅을 진행해보겠습니다. 스프링을 사용해보신 분이라면 @Transactional이라는 어노테이션을 많이 보셨을 겁니다. Transaction이란 어떠한 일을 처리하는 단위를 말합니다. 가령 저희가 "6번 게시글을 수정한다"라는 로직을 수행하려면 1. "6번 게시글을 가져온다" 2. "6번 게시글을 수정한다" 3. "수정된 6번 게시글을 DB에 commit 한다" 이렇게 하나의 로직의 처리 묶음을 하나의 Transaction이라 합니다. 그러면 Spring에서는 Transaction 처리를 어떤 순서로 진행할까요? 전통적인 Transaction 처리부터 알아보겠습니다. 저희가 Spring Applic..
[SpringBoot] PasswordEncoder 사용하기 안녕하세요. 이번 포스팅에서는 Password Encoder를 활용하여 Database에 raw값이 아닌 Hashing이 완료된 비밀번호 값을 저장하는 방법에 대해 알아보겠습니다. 기본적으로 DB에 비밀번호를 바로 저장하게 되면 굉장히 위험합니다. 물론 현재 제공 중인 서비스가 개인정보를 많이 포함하고 있지 않다고 하더라도, 보통 사람들은 여러 사이트의 비밀번호를 동시에 사용하기 때문에 굉장히 위험한 상황이 발생됩니다. https://www.boannews.com/media/view.asp?idx=78058&page=1&kind=1 페이스북, 내부 서버에 사용자 비밀번호를 평문으로 저장해왔다 페이스북이 수천만 개가 넘는 사용자 비밀번호를 평문으로 보관해왔던 사실을 인정했습니다. 페이스북 라이트, 공식 페..
[Algorithm] DFS, BFS 정리 안녕하세요. 이번 포스팅에서는 코딩 테스트의 단골 주제라 할 수 있는 DFS, BFS를 정리해보는 시간을 갖도록 하겠습니다. DFS, BFS는 그래프 탐색 알고리즘의 일종입니다. 그래프란 정점들과 그 정점들을 연결하는 간선으로 이루어진 자료구조입니다. 1. 깊이 우선 탐색, DFS (Depth First Search) 한 정점으로부터 시작하여 리프 노드(더 이상 갈 수 있는 연결된 노드가 없는 노드)까지 탐색을 한 뒤, 최초의 갈림길을 만날 때까지 역행하여 다른 길을 탐색합니다. 위와 같은 그래프가 있다고 해보겠습니다. 깊이 우선 탐색, 너비 우선 탐색은 기본적으로 탐색입니다. 즉 모든 노드를 탐색하는 것에 가장 큰 의의가 있습니다. 따라서 왼쪽부터 갈지, 오른쪽부터 갈지 즉 어떠한 노드를 시작으로 다음..
[BaekJoon 2852] NBA 농구 안녕하세요. 오늘은 백준 2852번 NBA 농구라는 문제를 가져왔습니다. 문자열, 구현 쪽 문제입니다. 문제는 다음과 같습니다. Team 1이 골을 넣었는데, 만약에 Team 2가 다음 골을 넣었으면 Team 1이 이기고 있던 시간에 Team 2가 방금 골 넣은 시간 - Team 1 이 마지막으로 넣은 시간을 더해주면서 문제를 해결하면 됩니다. 간단하게 제가 푼 소스코드를 먼저 살펴보겠습니다. #include using namespace std; int n, team; int score[3]; string winning[3]={"00:00", "00:00", "00:00"}; string last_goal, inp; string calc(string cur, string last) { int cur_h=..
[BaekJoon 4659] 비밀번호 발음하기 오늘은 오랜만에 재미있는 문제가 있어서 한번 가져와 보았습니다. (코딩 테스트 준비 재밌....) 바로 백준 4659 비밀번호 발음하기라는 문제입니다. 저번 학기에 제가 본 코딩 테스트 결과를 보았을 때 확실히 제가 문자열 부분이 조금 약한 듯해서 관련 문제를 여러 개 풀어보고 있습니다. 여담은 여기까지 하고 문제를 읽어볼게요! 해당 문제는 이 링크에서 확인하실 수 있습니다. 솔직히 분류는 문자열이긴 한데, 단순 구현 문제와 비슷합니다. 제가 문제를 보고 떠오른 생각은 다음과 같습니다. 1. c++ string.find() 메소드를 확인해서 a, e, i, o, u 가 있는지 없는지 확인 2. 1에서 하나라도 존재한다면, 이제 for loop를 돌며 연속하는 3개의 자음이 있는지, 3개의 모음이 있는지 ..