분류 전체보기 55

복합 키와 식별 관계 매핑

식별 관계 vs 비식별관계 식별관계 : 부모 테이블의 기본 키를 내려받아서 자식 테이블의 기본 키 + 외래 키로 사용하는 관계 비식별관계 : 부모 테이블의 기본 키를 받아서 자식 테이블의 외래 키로만 사용하는 관계 비식별관계는 외래 키에 NULL을 허용하는지에 따라 필수적 비식별 관계와 선택적 비식별 관계로 나눈다. 필수적 비식별 관계(Mandatory): 외래 키에 NULL을 허용하지 않는다. 연관관계를 필수적으로 맺어야 한다. 선택적 비식별 관계(Optional): 외래 키에 NULL을 허용한다. 연관관계를 맺을지 말지 선택할 수 있다. 복합 키: 비식별 관계 매핑 기본 키를 구성하는 컬럼이 하나면 다음처럼 단순하게 매핑한다. @Entity public class Hello() { @Id privat..

JPA 2023.06.08

얕은 복사(Spread 연산자), 깊은 복사(JSON.parse()), Rest Parameter

얕은 복사: 주소값까지만 복사함 깊은 복사: 실제 데이터까지 복사함 ※ Spread 연산자(...) → 하나로 뭉쳐져 있는 값들의 집합을 전개해주는 연산자이다. // ex1) let arr = [1, 2, 3, 4, 5]; console.log(arr); // [1, 2, 3, 4, 5] console.log(...arr); // 1, 2, 3, 4, 5 // ex2) let str = "Hello"; console.log(str); // Hello console.log(...str) // H e l l o 참조 타입의 복사 let origin = { name: "otter", age: 25 }; let copy = origin; console.log(origin.name); // "otter" //복사..

JS 2023.05.24

구조분해할당

배열의 구조분해할당 const arr = [1, 2, 3, 4, 5]; let [one, two] = arr; console.log(one); // 1 console.log(two); //2 let 키워드를 통해 각각의 변수에 할당되고, 순서에 의해서 할당된다. 객체의 구조분해할당 const obj = {name: "otter", gender: "male"}; let {name, gender} = obj; console.log(name); // otter console.log(gender); // male let {name: newName, gender: newGender} = obj; // newName, newGender라는 새로운 변수로 할당 console.log(newName, newGender)..

JS 2023.05.24

createElement, appendChild

input 태그에 textContent를 입력하고 엔터키를 누르면 태그 하위에 를 append 하는 기능을 만든다. 할 일 createElement: document에서 엘리먼트를 생성하는 메소드 appendChild: 해당 태그 하위에 엘리먼트를 삽입해주는 메소드 cf) 지금은 스트립트를 내부에서 사용하고 있지만 외부 스크립트를 사용할 때는 defer 속성을 사용한다. defer 속성은 페이지가 모두 로드된 후에 해당 외부 스크립트가 실행됨을 명시한다. 참조된 외부 스크립트 파일을 다음과 같이 여러 가지 방법으로 실행시킬 수 있다. - async 속성이 명시된 경우 : 브라우저가 페이지를 파싱되는 동안에도 스크립트가 실행됨. - async 속성은 명시되어 있지 않고 defer 속성만 명시된 경우 : 브..

JS 2023.05.22

브라우저의 web storage

웹 스토리지: 브라우저에 데이터를 저장할 수 있는 기술 Session Storage 1. key-value 값으로 저장된다. 2. 로컬 환경 데이터에 저장된다. 3. 세션 단위로 구분되어 활용된다. *세션: 사용자가 브라우저를 통해 웹 페이지에 접속한 시점부터 종료하는 시점까지를 의미 Local Storage 1. key-value 값으로 저장된다. 2. 로컬 환경 데이터에 저장된다. 3. 도메인 단위로 구분되어 활용된다. ex) localhost -->뒤에 어떠한 url이 오든 공유됨(엔트포인트가 달라도) 4. 브라우저 자체를 종료해도 존재한다. 5. 컴퓨터를 껐다켜도 존재한다. // 로컬 스토리지에 저장함 localStorage.setItem('saved-date', targetDateInput); ..

JS 2023.05.21

@MappedSuperclass

지금까지 학습한 상속 관계 매핑은 부모 클래스와 자식 클래스를 모두 데이터베이스 테이블과 매핑했다. 부모 클래스는 테이블과 매핑하지 않고 부모 클래스를 상속 받는 자식 클래스에게 매핑 정보만 제공하고 싶으면 @MappedSuperclass를 사용하면 된다. @MappedSuperclass는 비유를 하자면 추상 클래스와 비슷한데 @Entity는 실제 테이블과 매핑되지만 @MappedSuperclass는 실제 테이블과는 매핑되지 않는다. 이것은 단순히 매핑 정보를 상속할 목적으로만 사용된다. 회원(Member)와 판매자(Seller)는 서로 관계가 없는 테이블과 엔티티다. 테이블은 그대로 두고 객체 모델의 id, name 두 공통 속성을 부모 클래스로 모으고 객체 상속 관계로 만들어보자. @MappedSup..

JPA 2023.05.11

상속 관계 매핑

관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신에 슈퍼타입(Super-type)과 서브타입(Sub-type) 관계라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. ORM에서 말하는 상속 관계 매핑은 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 여기서 저 중간에 엑스표는 Exclusive(상호배제관계)를 의미하고, 하나의 슈퍼타입 엔티티가 여러개의 서브타입 엔티티를 가질 수 없다는 것을 의미한다. 반대로 엑스표가 없으면 Inclusive(상호보완관계)를 의미하고, 하나의 슈퍼타입 엔티티가 여러개의 서브타입 엔티티를 가질 수 있다는 것을 의미한다. 슈퍼타입, 서브타입 논리모델을 실제 물리모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 ..

JPA 2023.05.11

[아이템4] 인스턴스화를 막으려거든 private 생성자를 사용하라

public class Utility{ //기본 생성자를 막기 위해 private 사용 private Utility(){ //기본생성자를 통한 객체 생성 방지를 위해 throw 발생 throw new Exception(); } } 명시적으로 만든 생성자가 private이기 때문에 클래스의 외부에서는 접근 불가능하다. 따라서 어떤 환경에서도 클래스가 인스턴스화 되는것을 막을 수 있다. throw new Exception처럼 예외를 발생시켜 직관적으로 명시해준다.

Effective Java 2023.04.27

[아이템3] private 생성자나 열거 타입으로 싱글턴임을 보증하라

싱글턴: 인스턴스를 오직 하나만 생성할 수 있는 클래스 주의점: 클래스를 싱글턴으로 만들게 되면 사용하는 클라이언트를 테스트하기가 어려워진다. ->MOCK객체를 만들 수 없기 때문에 ​ 1. public static final 방식의 싱글턴 public static final Elvis INSTANCE = new Elvis(); private Elvis(){...} 위 코드처럼 INSTANCE를 호출하게 되면 Elvis는 최초 한 번만 만들어진 이후에 쭉 재사용된다. ​ 장점: public static final 클래스이므로 맨 처음에 메모리가 올라오고 나서 변경이 불가능하니 명백히 싱글턴임이 드러난다. Elvis el = new Elvis(); //불가능 Elvis el1 = Elvis.INSTANCE..

Effective Java 2023.04.27