분류 전체보기
신장 트리 하나이 그래프가 있을 때 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프를 의미한다. 반드시 모든 노드를 포함하고 있는 그래프여야 한다. 크루스칼 알고리즘 최소한의 비용으로 신장 트리를 찾는 알고리즘 예) 노드와 노드를 연결하는 다리에 각각 비용이 있을 때 최소한의 비용으로 연결하려면 얼마의 비용이 필요할까? class Edge implements Comparable{ private int nodeA; private int nodeB; private int distance; public Edge(int nodeA, int nodeB, int distance) { this.nodeA = nodeA; this.nodeB = nodeB; this.distance = distance; } ..
서로소 집합 수학에서 '서로소 집합'이란 공통 원소가 없는 집합을 의미한다. 트리 자료구조를 이용하여 집합을 표현한다. 연관되어있는 노드들을 서로 다른 집합으로 묶는 알고리즘이다. 트리 자료구조를 이용해서 집합을 표현하는 서로소 집합 계산 알고리즘은 다음과 같다. union(합집합) 연산을 확인하여, 서로 연결된 두 노드 A, B를 확인한다. A와 B의 루트 노드 A', B'를 각각 찾는다. A'를 B'의 부모 노드로 설정한다.(B'가 A'를 가리키도록 한다.) 모든 union(합집합) 연산을 처리할 때까지 1번 과정을 반복한다. public static int v, e; //노드의 갯수와 간선의 갯수 public static int[] parent = new int[100001]; //부모 테이블 생성..
JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능하다. 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식이 가능하다. 값 타입 int Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적이 불가능하다. 값 타입 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type, 복합 값 타입) 컬렉션 값 타입(collection value type) 기본값 타입 String name, int age 생명주기를 엔티티에 의존한다. 회원을 삭제하면 이름, 나이 필드도 함께 삭제된다. 값 타입..
프록시(Proxy) em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 특징 실제 클래스를 상속 받아서 만들어진다. 실제 클래스와 겉 모양이 동일하다. 사용하는 입장에서 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. 프록시 객체는 실제 객체의 참조를 보관한다. 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메서드를 호출한다. 프록시 초기화 프록시 객체는 처음 사용할 때 한 번만 초기화한다. 프록시 객체를 초기화 할때, 프록시 객체가 실제 엔티티로 바뀌는 것은 아니다. -> 초기화 되면 프록시 객체가 실제 엔티티에 접근이 가능한 것 뿐이다. 프록시 객체는 원본 엔티티를 상속받는다. -..
관계형 데이터베이스에는 상속관계가 존재하지 않는다. 슈퍼타입 서브타입 관계 모델링 기법이 객체의 상속과 유사하다. 따라서 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑한다. 상속관계 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환: 조인 전략 통합 테이블로 변환: 단일 테이블 전략 서브타입 테이블로 변환: 구현 클래스마다 테이블 전략 상속관계 매핑 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name="DTYPE"): 부모 클래스에 붙여주는 어노테이션..
Generic(제네릭) 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에서 사용하는 것으로, 컴파일 과정에서 타입체크를 해주는 기능을 수행한다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환이 번거로움을 줄여준다. 컴파일 시에 체크하기 때문에 Collection 내부에 들어온 값이 내가 원하는 값이 원하는 값인지 별도의 로직처리를 구현할 필요가 없어진다. Wrapper class(래퍼 클래스) 기본 자료형에 대한 클래스 표현을 Wrapper class라고 한다. 기본 자료형 래퍼 클래스 int Integer boolean Boolean 자바 컬렉션에서 제네릭을 사용하기 위해서는 래퍼 클래스를 사용해야한다. null값을 반환해야 하는 경우에도 사용한다. 위의 상황을 제..
JVM 이란? Java Virtual Machine(자바 가상머신)의 약자를 따서 줄여 부르는 용어이다. JVM의 역할 JVM은 자바 애플리케이션을 클래스 로더를 통해 읽어들여와서 자바 API와 함께 실행시키는 역할을 한다. JVM은 Java와 OS사이의 중개자 역할을 수행하여 Java가 OS에 구애받지 않고 재사용을 가능하게 해준다. JVM은 메모리관리와 Garbage collection을 수행한다. JVM은 스택 기반의 스택기반의 가상머신이다. Java 프로그램의 실행과정 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다. 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어들여서 자바 바이트코드(.class)로 변환시킨다. Class Loader를 통해 ..
Permutation String 문제 설명 주어진 문자열 s1, s2가 존재한다. s2 문자열에서 s1과 같은 연속된 문자열을 찾으면 true를 반환하고 아니면 false를 반환한다. 단, s1 문자열의 순서를 섞어도 s2 문자열 내에 존재하면 존재하는 것으로 간주한다. 문자열은 모두 소문자 알파벳이다. 문제 풀이 본 문제 풀이는 Sliding Window 라는 알고리즘으로 해결하였는데 전체 소스코드는 다음과 같다. class Solution { public boolean checkInclusion(String s1, String s2) { int len1 = s1.length(); int len2 = s2.length(); if(len1 > len2) return false; int[] count =..
단방향 연관관계 객체 관점 한쪽 객체에서만 참조가 가능 다른 한쪽 객체에서는 참조가 불가능한 관계 테이블 관점 한쪽 테이블에서 다른 한쪽 테이블의 FK를 가지고 있음 FK를 통해 같이 조회가 가능 @Entity public class Member { @Id @GeneratedValue private Long id; @ManyToOne @JoinColumn(name = "team_id") private Team team; } @Entity public class Team { @Id @GeneratedValue @Column(name = "team_id") private Long id; } 양방향 연관관계 객체 관점 양쪽 객체에서 모두 참조가능 한쪽 객체에서 연관관계의 주인이 된다. 테이블 관점 단방향 연관..



