본문 바로가기

전체 글

Dart DataType Basic String, int , double, num num은 int와 double의 부모 클래스이므로 값이 변경 가능하다. num age = 2; age = 2.2; ​ List object를 상속 collection if 존재할 수 도 있고, 존재할 수도 없는 값을 넣어줄 수 있다. var isTest= true; List numbers = [1,2,3,4,5, if(isTest) 6]; //같은 의미 if(isTest){ numbers.add(6); } collection for 배열의 값에 다른 배열의 값을 추가할 수 있다. var koreaFoods = ['kimchi']; var allFoods = ['pizza', for(var str in koreaFoods) "$i made by ko.. 더보기
Dart 변수 Type 선언 var 또는 명시적으로 String, int와 같이 선언 가능 지역변수로 var를 사용, class나 property에 선언시 타입 명시를 해줌 Dynamic 타입에 Dynamic으로 선언해주면 어떤 타입으로도 값이 가능하다는 의미 nullable 타입에 ?를 붙여줌으로써 null도 가능하다는 것을 명시 기본적으로 변수들은 nullable이 아니다. String? name = 'kyw'; if(name != null){name.isNotEmpty;} name?.isNotEmpty; null 이 가능하다는 것을 명시함으로써 Dart는 null safety Final 타입을 final로 선언시 변수는 수정할 수 없다. final name = 'kyw'; final String name2 = '.. 더보기
Dart 및 환경설정 Flutter를 시작하기에 앞서 설정 및 Dart 언어에 대한 학습을 진행한다. IDE : intelliJ 개발 OS : Windows 1. Flutter SDK 설정 - https://docs.flutter.dev/release/archive?tab=windows 에 접속하여 Window 버전의 SDK를 설치 및 압축을 해제 (ex: C 드라이브에 압축을 해제 - C:\flutter\flutter ) - 시스템 환경 변수 들어가 사용자변수와 시스템변수의 path에 C:\flutter\flutter\bin를 추가한다. (위의 설치한 path의 bin 경로) 2. IntelliJ 설정 - IntelliJ 에서 Project가 있는 경우 file - close project로 종료 - 아래와 같은 창이 뜰 .. 더보기
값 타입 1. 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 2. 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 추적 불가능 ​ 기본값 타입 : 자바기본타입(int, double), 래퍼 클래스(Integer, Long), String 생명주기를 엔티티에 의존 공유하면 안됨 ​ 임베디드 타입 : 정의해서 사용 (복합 값) 새로운 값 타입을 직접 정의 JPA는 임베디드 타입이라함 기본값 타입을 모아 만듬(엔티티의 값일뿐) int, String과 같은 기본값 타입 특징 재사용, 응집력이 높음 해당 값만 사용하는 매소드 생성 가능 소유한 엔티티의 생명주기에 의존 사용하나 안사용하나 매핑하는 테이블은.. 더보기
영속성전이와 고아객체 1. 영속성 전이 CASECADE 특정엔티티를 영속 상태로 만들 때, 연관 된 엔티티도 영속상태로 하고 싶을 때 부모 엔티티를 저장할 때, 자식 엔티티까지 저장 매핑하는 것과는 상관없음, 영속화하는 편리함을 제공하는 것 옵션 : ALL, PERSIST, REMOVE @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) private List childList = new ArrayList(); 참조하는 곳이 하나인 경우에만 (소유자(부모엔티티)가 하나일 경우에만 사용) 2. 고아객체 부모 엔티티와 연관관계가 끊어진 자식엔티티를 자동으로 삭제 @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orpha.. 더보기
프록시와 지연/즉시 로딩 1. 프록시 em.find() vs em.getReference() em.find() : 데이터베이스를 통해 실제 엔티티 객체를 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회 프록시 초기화 실제 클래스를 상속 받아서 만들어짐 겉 모양이 같음 실제 객체의 참조를 보관 요청 -> 초기화 확인 -> 영속성 컨텍스트 통해 DB 조회 -> 실제 엔티티 생성 -> 프록시 연결 특징 객체는 처음 사용할 때 한번만 초기화 초기화시 프록시 객체가 실제 엔티티로 바뀌는 것이 아니라 참조하여 실제 엔티티에 접근 실제 인티티를 상속 받으므로 (== 비교 실패, instance of 사용) 영속성컨텍스트에 찾는 엔티티가 있으면 em.gerRefence()를 호출해도 실제 .. 더보기
상속관계 매핑 1. 상속관계 매핑 관계형 데이터베이스는 상속관계 X 슈퍼타입 서브타입 관계 모델링 기법이 상속관계와 유사 2. 조인전략 테이블을 조인(PK, FK)로 구성 메인테이블에 TYPE(enum과 유사)을 둔다 장점 : 테이블 정규화, 외래키 참조 무결성 제약조건, 저장공간 효율화 단점 : 조회시 조인을 많이 사용(성능 저하), 조회 쿼리가 복잡, 데이터 저장시 INSERT 2번 호출 3. 단일테이블전략 테이블 하나에 자식의 모든 속성을 다 명시 (불필요한 칼럼은 null) DTYPE을 두어 구분하여 조회(필수) JPA default 전략 장점 : 조인이 필요 없어서 빠름, 조회 쿼리가 단순 단점 : 자식엔티티가 매핑한 칼럼은 null 허용, 테이블이 커지기 때문에 성능 저하가 올 수 있음 4. 구현 클래스마다.. 더보기
연관관계의 종류 1. 다대일 다(Many)가 연관관계의 주인 일인쪽에서 참조를 하려면 @OneToMany(mappedby = '연관관계 주인의 변수명')를 사용 2. 일대다 일(One)이 연관관계의 주인 테이블에서는 다 쪽에 외래키가 존재 객체와 테이블의 차이 때문에 반대편의 외래키를 관리하는 구조 @JoinColumn(name = "team_id")를 써주지 않으면 조인테이블 방식을 사용하게 됨 실무에서 권장하지 않음 Update 쿼리가 발생 3.일대일 외래키를 주 테이블이나 대상 테이블 중 선택 가능 외래키에 데이터베이스 유니크 제약 조건 추가해야 됨 다대일 양방향 매핑처럼 외래키가 있는 곳이 연관관계의 주인(반대편에 mappedBy 적용) 단방향은 JPA에서 지원하지 않음, 일대일 관계는 양방향으로 해줘야함 DBA.. 더보기