분류 전체보기
[백준] 13156 Selling CPUs - Java
[백준] 13156 Selling CPUs - Java
2022.09.14입력을 먼저 해석하자. 5 3 1 4 10 1 1 1 1 8 1 1 1 1 9 1 1 5개의 CPU를 받았고 3명의 상인이 있다. 1번 상인) CPU를 한 개 팔 때는 1원을 준다 / 두 개 팔 때는 4원을 준다 / 세 개 팔때는 10원을 준다 ... 2번 상인) CPU를 한 개 팔 때는 1원을 준다 / 두 개 팔 때는 1원을 준다 / 세 개 팔 때는 8원을 준다 .. 3번 상인도 위와 마찬가지이다. 상인은 1번부터 순서대로 만나야 하고, 거래도 한 번만 할 수 있다. dp[i][j] = i번 상인을 만나고 있고, j개의 CPU를 팔았을 때 얻는 이익의 최댓값 import java.io.*; import java.util.*; public class Main { public static void main..
[C++] OOP (1) 개념 / namespace
[C++] OOP (1) 개념 / namespace
2022.09.14C++은 C에 객체지향 개념이 추가된 언어로 이해하면 편하다. 문법과 메모리 관리 등 여러 부분이 C와 유사하지만, char 리터럴의 바이트 크기와 같이 다른 부분이 있어 아예 동일하지는 않다. Class & Object 클래스는 설계도이고, Object는 설계도를 통해 만든 결과물이다. Abstraction 사용자가 객체의 구체적인 구현을 몰라도 기능을 사용할 수 있도록 한다. 메서드를 호출하면 메서드가 실행돼 실행 결과를 얻지만, 사용자는 메서드가 어떻게 구현됐는지 몰라도 된다. Encapsulation 객체 내부의 상태를 검증되지 않은 접근으로부터 보호한다. 즉, 사용자가 객체 내부 상태에 직접 접근하는걸 방지하고 메서드를 통해 접근하는 등 접근 방법을 제한한다. Inheritance 객체가 다른 ..
[HTML] HTML 정리 (3)
[HTML] HTML 정리 (3)
2022.09.14HTML의 모든 표현은 대소문자를 구분하지 않지만 소문자로 표현하는걸 권장함. : 사용자에게 보여지지 않는 부분. 브라우저가 HTML문서를 처리할 때 필요한 정보들이 포함된다. (메타) : 사용자에게 보여주는 부분. : 문서가 뭘로 쓰였는지 알려준다. 은 html로 쓰였다는걸 의미. : 제목. 숫자 작을수록 중요도 높음 1 ~ 6 : 한 단락. 화면은 알아서 조정되고 공백과 개행문자도 적절히 처리됨. block : block : in-line : 공백과 개행문자를 그대로 해석함. 태그와 함께 사용해서 소스코드를 명시할 수 있음. : 행 바꾸기 (줄바꿈) p 태그랑 함께 사용해서 단락을 구성할 수 있다. : 줄 긋기. 주제 전환 시 사용. , : 굵게 , : 이탤릭체 : 주석 : 특정 영역을 만들고 해당 ..
[Spring Database] 트랜잭션
[Spring Database] 트랜잭션
2022.09.13데이터 접근 기술들은 트랜잭션을 처리하는 방법이 조금씩 다르다. 따라서 데이터 접근 기술을 바꾸게 되면 트랜잭션을 처리하는 코드들도 모두 바꿔야 한다. 스프링은 PlatformTransactionManager 인터페이스를 통해 트랜잭션 추상화를 제공한다. 인터페이스를 통해 트랜잭션을 사용하면 데이터 접근 기술이 달라져도 동일한 방법으로 트랜잭션을 사용할 수 있다. 많이 사용되는 데이터 접근 기술에 대한 구현체도 함께 제공하고, 사용하는 기술을 인식해 구현체를 스프링 빈으로 등록해준다. 스프링에서는 더 구체적이고 자세한 요소가 더 높은 우선순위를 가진다. 트랜잭션에서도 마찬가지인데, 메서드와 클래스에 @Transactional 애너테이션을 붙일 수 있으면 메서드가 더 높은 우선순위를 가진다. @Spring..
[백준] 1823 수확 - Java
[백준] 1823 수확 - Java
2022.09.13https://www.acmicpc.net/problem/13002 13002번: Happy Cow 천나라에 살고있는 민호는 애지중지하는 소 한마리가 있다. 소의 행복은 곧 민호의 행복이기 때문에 가지고 있는 전재산을 털어 최고로 맛있는 여물 N개를 구매 했다. 민호는 여물을 관리하기 www.acmicpc.net 위의 문제와 동일한 문제이다. 항상 그렇듯 dp배열부터 정의해보자. dp[i][j] = i ~ j 구간에서 수확했을 때 얻을 수 있는 최대 이익 이제 재귀를 사용한 top-down으로 풀지, 반복문을 사용한 bottom-up 방식으로 풀지 생각해야 한다. 여기서 판단의 기준이 되는 건 dp배열의 형태인데.. 지금은 재귀를 사용하는 편이 더 쉬워 보인다. import java.io.*; impor..
[Spring Database] QueryDSL
[Spring Database] QueryDSL
2022.09.11QueryDSL (Query Domain Specific Language) 특정 도메인에 초점을 맞춘 프로그래밍 언어이다. 쿼리에 특화된 프로그래밍 언어이고, JPA / MongoDB / SQL 같은 데이터베이스 관련 기술들을 사용할 때 쿼리를 type-safe하게 개발 할 수 있게 지원하는 프레임워크이다. Entity 혹은 데이터베이스의 테이블의 정보를 바탕으로 QueryDSL Annotation Processing Tool 를 사용해 쿼리 전용 멤버 객체인 Q(Entity이름).java 를 만든다. (생성된 객체를 바탕으로 쿼리를 자바 코드로 작성한다) 즉, Q().java 파일을 사용해 자바 코드를 작성하고, 작성된 자바 코드는 JQPL로 변환되고 JQPL은 SQL로 변환돼서 실행된다. @Repos..
[Spring Database] Spring Data JPA
[Spring Database] Spring Data JPA
2022.09.11스프링 데이터 JPA 기술의 가장 대표적인 기능은 두 가지이다. 1. 공통 인터페이스 2. 쿼리 메서드 JpaRepository 인터페이스는 기본적인 CRUD 및 공통화가 가능한 기능들을 모두 제공한다. JpaRepository 인터페이스를 사용할 리포지토리에서 상속받고(extends), 제네릭에 관리할 를 입력해주면 스프링 데이터 JPA 기술 내부에서 프록시 기술을 통해 구현 클래스가 생성된다. 만들어진 구현 클래스의 인스턴스는 스프링 빈으로 등록되고, 개발자는 구현 클래스를 신경쓰지 않고 JpaRepository 인터페이스가 제공하는 기술을 사용할 수 있다. 인터페이스에 메서드만 적어두면 스프링 데이터 JPA 기술이 메서드 이름을 분석해 쿼리를 자동으로 만들고 실행해준다. JPA만 사용했을 경우 복잡..
[Spring Database] JPA 적용
[Spring Database] JPA 적용
2022.09.10JPA의 핵심은 객체와 관계형 데이터베이스간의 매핑이다. 애너테이션 기반으로 객체와 데이터베이스를 매핑해보자. @Data @Entity @Table(name = "item") public class Item { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "item_name", length = 10) private String itemName; private Integer price; private Integer quantity; public Item() { } public Item(String itemName, Integer price, Integer quantity) { this.itemN..
[Spring Database] JPA
[Spring Database] JPA
2022.09.09JPA를 사용하기에 앞서 JPA가 도입된 배경에 대해 살펴보자. 애플리케이션을 개발할 때는 Java와 같이 객체지향언어를 사용한다. 또, 데이터베이스는 Oracle / MySQL 과 같은 관계형 데이터베이스를 사용한다. 즉 애플리케이션은 객체로 관리하고, 데이터는 관계형 데이터베이스에 저장한다. 그런데, 데이터베이스는 SQL만 받아들이고 실행할 수 있는데.. 여기서 문제가 발생한다. SQL 반환값을 자바 객체로 변환해야 하고.무엇을 개발하든 SQL에 의존 할 수 밖에 없다. 객체에 멤버 변수가 추가된다면? SQL도 추가된 변수에 따라 모두 수정 해 줘야 한다. 또, 객체지향과 관계형 데이터베이스의 패러다임이 다르다는 문제가 있다. 객체에는 상속이라는 개념이 있어 설계할 때 유용하게 사용할 수 있지만, 테..
[Spring Database] MyBatis
[Spring Database] MyBatis
2022.09.09MyBatis는 JdbcTemplate가 제공하는 대부분의 기능을 제공한다. SQL을 XML을 통해 관리하고, 동적 쿼리 문제를 쉽게 해결할 수 있다는 장점이 있다. 프로젝트에서 동적 쿼리와 복잡한 쿼리가 많이 사용된다면 MyBatis를 사용하는 편이 합리적이고, 단순한 쿼리가 대부분이면 JdbcTemplate을 사용하는 것도 괜찮다. #MyBatis mybatis.type-aliases-package=hello.itemservice.domain mybatis.configuration.map-underscore-to-camel-case=true logging.level.hello.itemservice.repository.mybatis=trace application.properties에 MyBatis 관..
[Spring Database] 데이터베이스 테스트
[Spring Database] 데이터베이스 테스트
2022.09.07데이터베이스를 연동한 상태에서 잘 동작하는지 확인하기 위해 테스트 코드를 작성 해 보자. 우선 test 디렉토리의 application.properties 파일에도 데이터베이스 관련 정보를 넣어 줘야 한다. spring.profiles.active=test spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.username=sa logging.level.org.springframework.jdbc=debug @SpringBootTest 애너테이션은 @SpringBootApplication 애너테이션을 찾아서 설정으로 사용한다. 테스트 시 로컬에서 사용하는 데이터베이스가 로컬에서 사용하는 데이터베이스가 겹치면서 테스트에서 문제가 발..
[Spring Database] JdbcTemplate
[Spring Database] JdbcTemplate
2022.09.06SQL을 자바 문자열로 직접 사용할 때 JdbcTemplate을 사용하면 편하다. JdbcTemplate은 spring-jdbc 라이브러리에 기본적으로 포함돼있어 별도의 설정 없이 바로 사용할 수 있고, 템플릿 콜백 패턴을 사용해 JDBC를 직접 사용할 때 발생하는 여러 가지 귀찮은 작업을 대신 처리해준다. (커넥션 획득, 스프링 예외 변환기 실행 등..) /** * jdbc template 구현 */ @Slf4j public class JdbcTemplateItemRepositoryV1 implements ItemRepository { private final JdbcTemplate template; public JdbcTemplateItemRepositoryV1(DataSource dataSource..