애정코딩 💻

React - useReducer

userState보다 더 다양한 컴포넌트 상황에 따라 다양한 상태를 다른 값으로 업데이트 해 주고 싶을 때 사용하는 Hook 리듀서는 현재 상태, 그리고 업데이트를 위해 필요한 정보를 담은 액션 값을 전달받아 새로운 상태를 반환하는 함수이다.(새로운 상태를 만들 때는 반드시 불변성을 지켜 주어야 한다) 예제로 여러 인풋의 상태를 저장해봅시다! import React,{useReducer} from 'react'; function reducer(state,action){ retunr{ ...state, [action.name] = action.value }; } 우선 위와 같이 reducer 함수를 작성합니다. 1. ...state는 기존에 있는 state 값들을 복사 시키는것과 같습니다. 2. actio..

WEB/React 2021.05.24 Joana

React LifeCycle

import React, { Component } from 'react'; class LifeCycleSample extends Component{ state={ error:false, number:0, color:null, } myRef = null; // 컴포넌트를 만들 때 처음으로 실행된다. // 초기 state를 정한다. constructor(props){ super(props); console.log('constructor'); } // props로 받아 온 값을 state에 동기화시키는 용도 // 컴포넌트가 마운트될 때, 업데이트될 때 호출 static getDerivedStateFromProps(nextProps,prevState){ console.log('getDerivedStateFrom..

WEB/React 2021.05.24 Joana

7. 자바 ORM 표준 JPA 프로그래밍 - 프록시와 연관관계 관리

프록시 Team에 속해있는 Member 를 조회할 시 Team까지 조회할 필요가 있을까? 비지니스 로직에서 필요하지 않을 때가 있는데 항상 Team을 함께 조회한다면 낭비가 발생된다. 이 낭비를 하지 않기 위해 프록시라는 갠며으로 해결한다. - 실제 클래스를 상속 받아서 만들어지기 때문에 겉 모양이 같다 - 사용하는 입장에서는 진짜, 가짜 객체인지 구분하지 않고 사용하면 된다. - 프록시 객체는 실제 객체의 참조를 보관 -> 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 // 호출한 순간 쿼리 실행 Member findMember..

WEB/JPA 2021.05.18 Joana

6. 자바 ORM 표준 JPA 프로그래밍 - 고급매핑

상속관계 매핑 관계형 데이터베이스는 상속 관계가 없다.(슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다) 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 1. 각각 테이블로 변환 -> 조인 전략 (정석) - 테이블 정규화 - 외래 키 참조 무결성 제약조건 활용 가능 - 저장공간 효율화 - 조회시 조인을 많이 사용 -> 성능 저하, 조회 쿼리가 복잡함 - 데이터 저장시 INSERT 쿼리가 2번 호출 된다. 비지니스적으로 중요하고 복잡할 때 선택! 부모 클래스 설정 @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn 자식 클래스 설정 -> dtype에 표시될 이름을 정해 줄 경우 @DiscriminatorVa..

WEB/JPA 2021.05.17 Joana

5. 자바 ORM 표준 JPA 프로그래밍 - 다양한 연관관계 매핑

연관관계 매핑시 고려사항 3가지 1. 다중성 2. 단방향, 양방향 3. 연관관계의 주인 - 객체 양방향 관계는 참조가 2군데 있기 때문에 둘중 테이블의 외래 키를 관리할 곳을 지정해야함 - 외래 키를 관리하는 참조 - 주인의 반대편 : 외래 키에 영향을 주지 않음, 단순 조회 다대일[N:1] 가장 많이 사용함 단반향 아래와 같이 [N]에서 외래 키를 관리하고 Team을 조회 하고 추가할 수 있다. Team에 서는 조회하지 못함 -> Team에서 Member을 조회하는일이 빈번하다고 하면 -> 양반향 으로 매핑해주는게 좋음. 양반향 단반향에서 TEAM이 MEMBER를 mapped by 를 추가하여 MEMBER를 조회할 수 있다. (읽기 전용) 일대다[1:N] 1이 연관관계의 주인이다. 단방향 TEAM 에서..

WEB/JPA 2021.05.14 Joana

4. 자바 ORM 표준 JPA 프로그래밍 - 연관관계

목표 - 객체와 테이블 연관관계의 차이를 이해 - 객체의 참조와 테이블의 외래 키를 매핑 객체와 테이블 연관관계의 차이를 이해 객체를 테이블에 맞추어 모델링 했을 때 문제점 (참조 대신에 외래 키를 그대로 사용) 협력 관계를 만들 수 없다. 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾기 때문에 아래와 같이 번거로운 코드가 발생된다. Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); // 외래키 식별자를 직접 다룬다. member.setTeamId(team.getId()); em.persist(member); // 멤버의 ..

WEB/JPA 2021.05.14 Joana

3. 자바 ORM 표준 JPA 프로그래밍 - 엔티티 매핑

객체와 테이블 매핑 @Entity - @Entity가 정의되어있는 클래스는 JPA가 관리한다. - 기본 생성자가 꼭 있어야 한다. - 속성: name ->JPA에 사용할 엔티티 이름을 지정한다, 기본값 : 클래스 이름을 그대로 사용 @Table - name, catalog, schema 등등. . 필드와 컬럼 매핑 @Column 데이터베이스 컬럼명을 설정해줄 수 있다. unique(실무에서 잘 사용하지 않는다 -> 유니크 제약조건 이름을 설정할 수 없다 대신 @Table(uniqueCons.. 사용), length 등 설정할 수 있다. @Temporal 날짜 타입 매핑 하지만 LocalDate, LocalDateTime을 사용할 때는 생략 가능하다. @Enumerated enum 타입 매핑 default..

WEB/JPA 2021.05.13 Joana

2. 자바 ORM 표준 JPA 프로그래밍 - 내부 동작 방식

JPA에서 가장 중요한 2가지 - 객체와 관계형 데이터베이스 매핑하기 - 영속성 컨텍스트 영속성 컨텍스트가 뭘까? JPA를 이해하는데 가장 중요한 용어이다. "엔티티를 영구 저장하는 환경"이라는 뜻. -> EntityManager.persist(entity); - persist는 사실 DB에 저장하는게 아니고 Entity를 영속성 컨텍스트에 저장한다는 뜻이다. - 논리적인 개념으로 눈에 보이지 않는다. EntityManager를 통해서 영속성 컨텍스트에 접근한다. - 여러개의 EntityManager가 하나의 영속성 컨텍스트를 바라본다. 엔티티의 생명주기는 어떻게 될까? 비영속 - 영속성 컨텍스트와 전혀 관계과 없는 새로운 상태 영속 - 영속성 컨텍스트에 관리되는 상태 준영속 - 영속성 컨텍스트에 저장되..

WEB/JPA 2021.05.13 Joana

1. 자바 ORM 표준 JPA 프로그래밍 - 간단한 실습

아래와 같이 작성했을 때 저장이 될까? 에러가 생긴다. 왜냐하면 JPA는 트렌젝션이는 단위가 매우 중요하기 때문에 JPA의 모든 기능은 트렌젝션 안에서 이루어져야 한다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); Member member = new Member(); member.setId(1L); member.setName("AE"); em.persist(member); em.close(); emf.close(); 트렌젝션을 추가한 코드 EntityManagerFactory emf = Persistence.createEntityMa..

WEB/JPA 2021.05.13 Joana

[프로그래머스] 하샤드 수

문제 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요. 다른 사람이 푼 문제를 보니 간결하게 푼 사람도 많지만 알고리즘의 취지는 그게 아니지 않나... 싶기도 하고 속도도 느린게 많아서 그냥 내 방식으로 풀고 속도이슈가 크지 않는 이상 수정하지 않기로 했다! class Solution { public boolean solution(int x) { boolean answer = true; int calValue = 0; if(x/10>0){ String stringValue = St..

알고리즘 2021.05.11 Joana

0. 자바 ORM 표준 JPA 프로그래밍 - 기본편

www.inflearn.com/course/ORM-JPA-Basic/dashboard 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔 www.inflearn.com 인프런에 있는 강의를 보며 정리한 내용입니다! 목표 : 객체와 테이블 설계 매핑 - 객체와 테이블을 제대로 설계하고 매핑하는 방법 - 기본 키와 외래 키 매핑 - 1:N, N:1, 1:1, N:M 매핑 - 실무 노하우 + 성능 고려 - JPA 내부 동작 방식 이해하기 - JPA가 언제, 어떤 SQL을 만들어 실행하는지 이해 J..

WEB/JPA 2021.05.11 Joana

[프로그래머스] 핸드폰 번호 가리기

문제 설명 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 s는 길이 4 이상, 20이하인 문자열입니다. 내가 푼 답 처음에는 replace를 쓰려고 했는데 다르게 해보려고 잘 안쓰는 toCharArray 를 써봤는데 생각보다 속도가 빨라서 만족 class Solution { public String solution(String phone_number) { char[] toChar = phone_number.toCharArray(); for(int i=0;i

알고리즘 2021.05.10 Joana