단방향 연관관계 목표 객체와 테이블 연관관계의 차이를 이해해야 한다. 객체의 참조와 테이블의 외래 키를 어떻게 매핑하는지에 대해 이해한다. 용어 이해 방향(Direction): 단방향, 양방향 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리가 필요 연관관계가 필요한 이유 : 객체지향 설계의 목표는 자율적인 객체들의 협력 공통체를 만드는 것이다. 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원(N)과 팀(1)은 다대일 관계이다. 객체를 테이블에 맞추어 모델링 객체를 테이블에 맞추어 모델링 코드 @Entity public class Member { @Id @G..
객체와 테이블 매핑 엔티티 매핑 소개 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne,@JoinColumn @Entity @Entity가 붙은 클래스는 JPA가 관리하는 클래스로 엔티티라고 부른다. JPA를 사용해서 테이블과 매핑할 클래스는 반드시 @Entity 필수! 주의사항 기본 생성자 필수 (파라미터가 없는 public 또는 protected) final 클래스, enum, interface, inner 클래스 사용할 수 없다. 저장할 필드에 final 키워드를 사용할 수 없다. 속성 name JPA에서 사용할 엔티티 이름 지정. 기본값 : 클래스 이름을 그대로 사용(예: Member) 같은 클래스..
JPA 에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 (Object Relational Mapping) 영속성 컨텍스트 JPA를 보통 쓰게되면, 엔티티 매니저 팩토리와 엔티티 매니저에 대해 이해를 해야한다. 예를 들면, 고객의 요청이 올 때마다 엔티티 팩토리를 통해 엔티티 매니저를 생성한다. 엔티티 매니저는 내부적으로 데이터 커넥션을 사용해서 데이터베이스를 사용하게 된다. ❓그럼 영속성 컨텍스트란 뭘까? 영속성 컨텍스트란? 엔티티를 영구 저장하는 환경 EntityManager.persist(entity); : DB에 저장한다기보다 영속성 컨텍스트를 통해 엔티티를 영속화 한다는 의미이다. → 영속성 컨텍스트에 엔티티를 저장한다. 영속성 컨텍스트는 논리적인 개념이고, 눈에 보이지 않는다. 엔티..
JPA 시작하기 프로젝트 생성 DB 설치하기 ⇒ 실습용으로는 간단하게 사용되고 웹상황에서 콘솔창도 볼 수 있는 H2를 사용한다. H2 설치 가이드는 링크 글을 참고한다. 프로젝트 생성하기 Java 8 이상(8권장) Maven 프로젝트 groupId: jpa-basic artifactId: ex1-hello-jpa version: 1.0.0 프로젝트 설정 : Maven pom.xml 우리가 나중에 사용할 스프링 부트 버전에 있는 org.hibernate 버전을 확인하고, 그에 맞게 바꿔주어야 한다. https://spring.io/projects/spring-boot#learn → Reference Doc 클릭, → a single HTML page 클릭 H2 데이터 베이스 버전도 변경 필요! 4.0.0 ..
❓왜 jpa를 써야 할까? : SQL 중심적인 개발의 문제점 현재의 애플리케이션 개발 언어 트렌드 → 객체 지향 언어(ex : [Java, Scala, ...]) 현재 데이터베이스 세계의 헤게모니 → 관계형 DB(ex : [Oracle, MySQL, ...]) → 개발자가 객체로 데이터를 가공해도 DB에 저장할 땐, 결국 SQL을 사용한다. → SQL 중심적인 개발 ! → 객체를 관계형 DB에 관리한다는 것이 문제 ! ❓무엇이 문제일까? 1. 무한 반복, 지루한 코드 기능하나 추가해서 테이블을 생성할 때마다 CRUD SQL을 다 만들어주어야 한다. → Jdbc, MyBatis가 매핑에 도움을 주기는 하지만 그래도 개발자가 다 짜야함! Example : 회원 객체를 만들고 DB에 CRUD를 하는 기능이 있..
2529번 부등호 https://www.acmicpc.net/problem/2529 문제 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시된 부등호 순서열 A가 다음과 같다고 하자. A ⇒ 부등호 기호 앞뒤에 넣을 수 있는 숫자는 0부터 9까지의 정수이며 선택된 숫자는 모두 달라야 한다. 아래는 부등호 순서열 A를 만족시키는 한 예이다. **3 1 7 0** 이 상황에서 부등호 기호를 제거한 뒤, 숫자를 모두 붙이면 하나의 수를 만들 수 있는데 이 수를 주어진 부등호 관계를 만족시키는 ..
백준 1157번 단어공부 https://www.acmicpc.net/problem/1157 문제 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. 입력 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다. 출력 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다. 접근 방법 및 풀이 배열을 사용해도 되지만, HashMap의 getOrDefault를 사용해서 풀이하였다. getOrDefault 이란? : 찾는 키가 존재한다면 찾는 키의 값을 카운팅하..
useEffect useEffect : 리액트 컴포넌트가 렌더링될 때마다 특정 작업을 수행하도록 설정할 수 있는 Hook이다. 클래스형의 컴포넌트의 componentDidMount와 componentDidUpdate를 합친 형태로 보아도 무방하다. 예제 //Info.js import { useState, useEffect } from "react"; const Info = () => { const[name, setName] = useState(''); const[nickname, setNickname] = useState(''); useEffect(() => { console.log('렌더링이 완료되었습니다.'); console.log({ name, nickname }); }); const onChang..
11723 집합 https://www.acmicpc.net/problem/11723 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 문제 비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오. add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다. remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다. check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20) toggle x: S에 x가 있으..
비트 (bit) 비트(binary digit) : 데이터를 나타내는 최소 단위이다. 모든 데이터는 0과 1의 조합으로 구성되는데, 이 0또는 1이 하나의 비트이다. 1개의 비트는 두 가지 상태를 나타낼 수 있으므로, n비트 정수형 변수는 2^0 ~ 2^n-1까지 표현할 수 있다. 비트 연산자 AND 연산 (&) : 대응하는 두 비트가 모두 1일 때 1 반환 OR 연산 (|) : 대응하는 두 비트 중 하나라도 1이라면 1, 아니면 0 반환 XOR 연산 (^) : 대응하는 두 비트가 다르면 1, 같으면 0을 반환 NOT 연산 (~) : 비트의 값을 반전 Shift 연산 () : 왼쪽 또는 오른쪽으로 비트를 이동 쉬프트 연산에서 중요한 점 한가지는 바로 자리수다.int는 32bit 길이를 갖지만 첫 번째 비트..