익명클래스 java에서는 아래와 같은 클래스가 있을 때, 익명 클래스로 만들 수 있다. // 부모 클래스 class Animal { public String bark() { return "동물이 웁니다"; } } // 자식 클래스 class Dog extends Animal { @Override public String bark() { return "개가 짖습니다"; } } public class Main { public static void main(String[] args) { Animal a = new Dog(); a.bark(); } } class Animal { public String bark() { return "동물이 웁니다"; } } public class Main { // 익명 클래스 ..
정규화란? 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다. 데이터를 정규화하지 않으면 쿼리의 성능이 저하되고, 삽입이상, 갱신이상, 삭제이상 등의 이상현상이 발생한다. 삽입이상은, 원치 않은 데이터가 삽입되는것, 갱신이상은 원치 않게 일부 데이터만 갱신되는 것, 삭제이상은 원치 않는 데이터가 삭제되는 것 을 말한다. 정규화의 종류에는 1NF(1정규화), 2NF, 3NF, BCNF(보이스-코드 정규화), 4NF, 5NF, (6NF)가 있다. 비공식적으로 3NF면 정규화되었다고 한다. 반대로 테이블을 합쳐서 중복되게 하는 것을 반정규화라고 한다. 성능상의 이유로 반정규화를 진행하기도 한다. 1NF 1. 도메인(각 칸의 값)이 원자값(..
지연로딩과 즉시로딩 JPA는 객체 그래프로 연관된 객체들을 탐색하는데, 객체가 DB에 저장되어있으므로 마음껏 탐색하기 어렵다. 따라서 처음부터 객체를 조회하지 않고, 실제 사용하는 시점에 조회한다.(이때 프록시를 이용한다.) 이것을 지연로딩이라고 한다. 하지만, 자주 함께 사용하는 객체들은 조인을 사용해서 함께 조회하는게 효과적이다. 이렇게 로딩하는 방식을 즉시 로딩이라고 한다. 아래 예제를 보자. @Data @Entity public class Member { private String username; @ManyToOne private Team team; } @Data @Entity public class Team { private String name; } //비즈니스로직 1 : 회원의 팀을 조회 ..
java에서 코드 실행시간을 측정하려면 아래처럼 하면 된다. long start = System.currentTimeMillis(); //로직 long end = System.currentTimeMillis(); System.out.println("수행시간: " + (end - start) + " ms");
Collection Collection을 공부하다가, 내게 익숙치 않지만 유용해 보이는 메소드들이 있어서 정리해보았다. Collection을 처음 만들 때 List, Set, Map으로 분리했다가, List와 Set만 공통되는 점이 있어서 Collection이라는 인터페이스를 상속받도록 했다고 한다. List 리스트는 위의 사진과 같은구조로 되어있다. 메소드 목록이다. 아래 외에도 많은 메소드가 있으니 API를 살펴보자. boolean addAll(int index, Collection c) 저장된 위치 index에 컬렉션의 모든 객체를 추가한다. ListIterator listIterator() ListIterator listIterator(int index) List의 객체에 접근할 수 있는 List..
mapstruct를 쓰다가 jpa의 entity변수명과 다른 변수명이 mapping이 안됬다면서, 빌드가 안되는 오류가 발생했다. 엔티티의 변수명은 xCrdnt인데 mapstruct에서는 XCrdnt로 해야 된다. JPA에서 두번째 글자가 대문자면 첫번째 글자가 자동으로 대문자로 바뀌어 버린다고 한다...........
예제 Entity, Member와 Order Member와 Order 두가지 Entity를 생성해준다. H2데이터베이스를 사용했다. 두 엔티티는 아래와 같다. @Entity @Table(name = "MEMBER") @SequenceGenerator( name = "HIBERNATE_SEQUENCE", sequenceName = "MEMBER_SEQ", initialValue = 1, allocationSize = 1 ) public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @NotNull private String name; @Nullable private String city; @Nullable pr..
1. 아래 링크에 들어가서 설명대로 hELLO 스킨을 적용한다. https://pronist.dev/5 hELLO 티스토리 스킨을 소개합니다. hELLO 스킨은 본래 기능의 많이 없었다가, 티스토리 블로거 여러분의 호응에 힘입어 기능의 추가와 함께 업데이트를 여러 번 하게 되었습니다. hELLO 1.0 때와 비교하면 비교할 수도 없을 만큼의 기 pronist.dev 2. hilight-line-number를 적용하고 싶은 분들 이미 highlight.js는 적용이 되어있지만, 나는 line-number까지 적용하고 싶었다. https://github.com/wcoder/highlightjs-line-numbers.js/ GitHub - wcoder/highlightjs-line-numbers.js: Li..