오늘은 구현에 대해 알아보려고 합니다. 최근에 보았던 코딩테스트에서 구현에 관련된 문제가 많이 나왔던 것 같아서 이 부분도 잘 공부해 두면 좋을 것 같습니다. 구현이란 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정입니다. 구현 문제를 풀어보면서 느낀 건 알고리즘이라고 말하는 것도 조금 그렇지만 머릿속에 있는걸 소스코드로 옮기는 작업은 생각보다 쉽지 않다는 것이었습니다. 난이도도 너무 다양해서 쉬운걸 풀면서 뿌듯해 하기도 하고 좌절도 많이 주었던 유형인 것 같습니다. 그리고 그냥 구현만 하면 되다보니, 아이디어를 떠올리고 소스를 작성해 나가면 어느순간 엄청 길어지기도 합니다. 뭔가 느낌상 코딩 연습하기 좋은 것 같습니다. 이제 문제로 한 번 알아보도록 하겠습니다. 1. 상하좌우 n = int(input(..
오늘은 그리디 알고리즘에 대해 알아보려고 합니다. 그리디 알고리즘은 매 순간마다 미래를 생각하지 않고 당장 눈앞에 보이는 최적의 상황을 선택하는 기법입니다. 기준에 따라 좋은 것을 선택하는 알고리즘으로 문제에서 '가장 큰 순서대로', '가장 작은 순서대로'와 같은 기준을 알게 모르게 제시해줍니다. 따라서 이 기준은 정렬 알고리즘을 사용했을 때 만족시킬 수 있으므로 그리디 알고리즘 문제는 자주 정렬 알고리즘과 짝을 이뤄 출제됩니다. 예제 문제와 함께 소스코드로 알아보도록 하겠습니다. 참고로 문제를 연습해 보면서 실행 시간을 측정하고 싶다면 아래과 같이 시작과 끝 부분에 시간을 출력하는 메서드를 넣어줄 수 있습니다. # 수행 시간 측정하기 import time start_time = time.time() ...
오늘은 코딩테스트를 준비하면서 학습했던 내용을 정리해 보려고 합니다. 요즘 취업 시장에서 코딩테스트는 거의 필수로 자리 잡은 만큼 까먹지 않도록 주요 개념들을 기록해 두도록 합시다. 그리고 알고리즘을 알아두면 확실히 코딩을 하면서 사고력을 높이는데 도움이 되는 것 같습니다. 그리고 코딩테스트를 위해서는 파이썬이 가장 유리한 것 같아서 파이썬으로 학습을 진행해 보도록 하겠습니다. 기장 기본이 되기도 하면서 유명한 알고리즘은 바로 정렬 알고리즘이라고 생각합니다. 정렬 알고리즘 몇 개를 알아보도록 하겠습니다. 설명으로만 알아보는 것보다 소스와 함께 이해하는 게 빠르니 소스코드 위주로 이해해 봅시다. 1. 선택 정렬 데이터가 무작위로 여러 개 있을 때, 이 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터..

드디어 Spring 시작해보기의 마지막 ! 오늘은 AOP에 대해 알아보려고 한다. AOP는 나도 어려운 개념이었고, 실제로 개념만 듣고 보면 이해하기 어려운거 같다. 그러니 최대한 이해하기 쉽게 풀어 나가 보자 ! 먼저 AOP가 필요한 상황에 대해 먼저 알아보자. 모든 메서드의 호출 시간을 측정하고 싶을 때, 공통 관심 사항(cross-cutting concern) vs 핵심 관리 사항(core concern)이 겹친다면? 실제로 모든 메서드의 호출 시간을 측정하고 싶을 때는 아래와 같이 메서드 마다 일일이 호출 시간을 출력해 줘야 한다. 이렇게 되면 메서드가 너무 많을 때 처리하기 힘들 것이다. 위에서 시간을 측정하는 로직은 핵심 기능이 아니라 공통적으로 있는 관심 사항이다. 그리고 핵심기능과 공통기능..

스프링 부트와 JPA만 사용해도 개발 생산성이 정말 많이 증가하고, 개발해야할 코드도 확연히 줄어든다. 여기에 Spring Data JPA를 사용하면, 기존의 한계를 넘어 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있다. 그리고 반복 개발해 온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공한다. 스프링 부트와 JPA라는 기반 위에, 스프링 데이터 JPA라는 프레임워크를 더하면, 지금까지 조금이라도 단순하고 반복이라고 생각했던 개발 코드들이 확연하게 줄어든다. 따라서 개발자는 핵심 비즈니스 로직을 개발하는데 집중할 수 있다. 실무에서 관계형 데이터베이스를 사용한다면 스프링 데이터 JPA는 이제 선택이 아닌 필수라고해도 과언이 아니다 ! 이제 구현을 진행해 보자. 기본 초기 ..

어제 MariaDB와 연결 하였으니 오늘은 JPA에 대해 알아보려고 한다. 회사에서 JPA 말고 MyBatis를 사용하긴 했지만 JPA는 중요하고 좋은 기술이니까 잘 알아보도록 하자! 앞서 JDBC Template이 JDBC 보다 편리하긴 했지만 여전히 SQL문을 직접 입력해 주어야 한다는 불편사항이 있다. 그런데 JPA를 사용하면 SQL 쿼리도 자동으로 처리를 해준다. JPA를 사용하면 SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있다고 한다. 그래서 개발의 생산성을 높일 수 있다! 우선 build.gradle에서 JPA관련 의존성을 추가해 주자. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' ..

오늘은 DB와 직접 연동하는 것을 해보려고 한다. 나는 open source인 MariaDB를 사용할 예정이다. db tool로는 DBeaver를 사용한 것이다. db 설치와 tool 사용법 등은 여기에 적진 않겠다. 우선 member 테이블을 하나 생성해 보도록 하자. 사용하는 db 문법에 맞게 sql문을 작성해 주면 된다. 그러면 아래와 같이 테이블이 생성된 것을 확인할 수 있을 것이다. create table member ( id bigint AUTO_INCREMENT, name VARCHAR(255), PRIMARY KEY (id) ); 위 SQL문에서 AUTO_INCREMENT는 값을 세팅하지 않고 insert 하면 자동으로 값이 증가하는 일련번호가 매겨 진다. 이제 데이터를 조금 넣어 보자. ..

오늘은 화면과 함께 Controller를 통해서 회원을 등록하고 조회하는 예제를 만들어 보자. 우선 홈 화면을 추가한다. 이때 HomeController도 생성해 준다. 소스는 아래와 같이 구성하고 8080 도메인만 입력했을 때 진입하는 화면이 될 것이다. package com.demoproject.demo.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } ret..