목록전체보기 (101)
먹었으면 뇌를 쓰자
1. JPA란 무엇인가 1.1 기본 CRUD 1.2 기초 지식 2. 연관관계 2.1 다대일 연관관계 2.2 일대다 연관관계 3. 상속 3.1 상속관계 3.2 CASCADE 4. SQL 4.1 JPQL 4.2 Querydsl 1.2 기초 지식 - 어노테이션 - 엔티티 어노테이션은 간단히 말해 '이름표'이다. 앞선 예제에서 다음과 같은 어노테이션이 사용되었다. @Entity 해당 클래스가 영속성 컨텍스트에서 관리될 엔티티임을 나타낸다. @Id 해당 필드가 식별자(pk)임을 나타낸다. @Column 해당 필드의 세부 속성을 나타낸다. (name = 필드명, nullable = null값 허용 여부 등) @Id 에서 식별자를 할당하는 방식에는 직접 할당과 자동 생성 두 가지가 있다. 예제에서는 직접 할당 방식을..
1. JPA란 무엇인가 1.1 기본 CRUD 1.2 기초 지식 2. 연관관계 2.1 다대일 연관관계 2.2 일대다 연관관계 3. 상속 3.1 상속관계 3.2 CASCADE 4. SQL 4.1 JPQL 4.2 Querydsl 1.1 기본 CRUD - 실습 환경 준비하기 - 엔티티 작성하기 - CRUD 구현하기 ① 실습에 사용할 RDB는 MySQL, IDE는 인텔리J이다. MySQL - jpa_playground 데이터베이스 생성하고 movie 테이블을 만든다. 인텔리J - maven 빌드툴로 프로젝트를 생성한다. ② 프로젝트의 pom.xml에 RDB/JPA 의존 설정을 추가한다. RDB 라이브러리 - MySQL Connector/J 를 설치한다. JPA 라이브러리 - Hibernate EntityManag..
1. JPA란 무엇인가 1.1 기본 CRUD 1.2 기초 지식 2. 연관관계 2.1 다대일 연관관계 2.2 일대다 연관관계 3. 상속 3.1 상속관계 3.2 CASCADE 4. SQL 4.1 JPQL 4.2 Querydsl 1. JPA란 무엇인가 - JPA는 자바 ORM - JPA의 장점은 무엇일까 - 스프링 데이터 JPA 자바는 객체 지향이지만 데이터베이스는 객체 지향 개념이 없다. ORM(객체 관계 매핑)은 객체 지향 프로그래밍과 관계형 데이터베이스의 간극을 채우는 기술이다. JPA는 자바에서 사용하는 표준 ORM이다. JPA를 파자해보면 다음과 같다. 'Java Persistence API' JPA는 자바가 RDB를 사용하는 방식을 정의하는 인터페이스이다. 인터페이스는 일종의 형식으로, 실제 내용은..

문제 함수형 프로그래밍을 이용해 코드를 구현하기. 내 코드(무려 정상 작동함) Stream api에 대해 새로 알게 된 사실 - 일단 스트림의 함수는 메소드가 아니라 api라고 부름. - filter는 boolean true 타입을 반환함. - map은 연산 결과를 반환함. - toArray는 int 타입 배열로 반환함.

문제 쓰레드 적용해서 실행 시간 단축하기. 내 풀이(무려 정상 작동함) import java.util.ArrayList; class HeavyWork extends Thread{ // Thread 상속하기 String name; HeavyWork(String name){ this.name=name; } public void run() { // 기존의 work() 메소드를 Thread의 run() 메소드로 변경하기 for (int i = 0; i < 5; i++) { try { Thread.sleep(100); } catch (Exception e) { } } System.out.printf("%s done.\n",this.name); } } public class coding { public static..

람다는... 인터페이스-구현체(클래스) 방식이 사라지고 람다 함수만 사용해서 객체를 만들어낼 수 있음. 스트림은... 내용물은 똑같은데 데이터 타입이나 메소드 특징 때문에 껍데기를 바꿔 끼워야 할 때 내용물을 스트림으로 생성해서 스트림 메소드로 처리할 수 있음. 조건식 수행하는 .filter() 라든지 중복 제거하는 .distinct() 라든지 다양한 스트림 메소드가 있음.
자바에서 예외를 처리하는 구문은 다음과 같다. try&catch 구문 try { ... } catch (예외1){ ... } catch (예외2){ ... } finally { 예외에 상관없이 실행되는 코드 } try 안에 실행될 코드를 넣는다. try 안에서 예외가 발생하면 catch 안의 코드가 실행된다. 이 때 try 안의 남은 코드는 실행되지 않는다. 만약 예외에 상관없이 어떤 코드를 실행하려면 finally 안에 작성해주면 된다. RuntimeException RuntimeException은 실행 시 발생할 수도, 발생하지 않을 수도 있는 예외이다. 다음과 같이 RuntimeException을 상속한 예외를 선언하여 메소드 단에서 발생시킨다. class FoolException extends R..
(22.12.17 작성) 아래 코드에서 Predator 인터페이스에 디폴트 메소드 printFood()와 스태틱 메소드 speed()를 정의했다. 둘 다 구현체(Tiger, Lion)에 명시하지 않고 메인 메소드에서 호출하면 잘 작동되는데 그렇다면 둘의 차이는 무엇일까? interface Predator{ String getFood(); default void printFood() { System.out.printf("my food is %s\n", getFood()); } int LEG_COUNT = 4; // 앞에 public static final이 생략된 인터페이스 상수 static int speed() { // 메인 메소드 호출은 Predator.speed() return LEG_COUNT * ..

스프링의 구조를 알아보고, 각 구조별로 예시를 정리해보자. 컨트롤러 사용자의 요청과 함께 들어온 데이터를 받고, 필요한 메소드를 실행한다. 메소드는 서비스에게 로직 실행을 지시한다 (필요한 경우 서비스에 데이터를 전달한다). @Controller : 서비스에게 응답을 받아 모델에 담고, 뷰 리졸버에게 HTML 페이지 만들 것을 지시한다. @RestController : 서비스에게 받은 응답을 문자열로 반환한다. 서비스 컨트롤러에게 로직 실행을 지시받는다. 리파지토리에게 CRUD를 요청한다. 응답 데이터를 넘겨받고 이상 유무를 검사한 뒤 로직을 실행한다. 하나의 트랜잭션이 수행되고, 커밋된다. 리파지토리 서비스에게 CRUD 요청을 받는다. DB에 접근해서 SQL문을 실행한다. (김성렬 교수님 강의 'See..

문제 잘못된 코드(*ArrayIndexOutOfBounds) 코드를 짜면서도 아 이건 틀리겠지만 한번 짜기나 해보자 하는 마음으로 짜봤다. 메인 메소드의 if문 조건에서 런타임 에러가 날 거란 예상도 했다. 그리고 실제로 그것이 일어났습니다. 그래도 어떻게 풀었는지 기록을 남겨보면 입력 값의 자릿수를 배열로 만들고 -> 이웃한 배열 값의 차가 같으면 count++ 함수 알고리즘 자체는 뭐... 아예 엉뚱한 건 아니다^^ 자릿수를 배열로 만들기보다 따로 구하는 편이 나았던 것 같다. 정답 다들 수학 1등급인가? 너무 예쁘고 깔끔한 코드다. 틀려서 기분이 안 좋았는데 이 코드를 보고 갑자기 기분이 좋아졌다. 관건은... 케이스를 세 가지로 나누는 것이었다. 첫번째 1~99까지는 자동 등차수열 두번째 100~..