일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 코드
- CleanCode
- mysql
- 정렬
- 마크다운 테이블
- 계산 검색 방식
- @NoArgsConstructor
- 배열
- @ComponentScan
- 인터페이스
- 클린
- code
- @RequiredArgsConstructor
- 내부 정렬
- 클래스
- 쿠키
- java
- 리스트
- query
- 쿼리메소드
- 선형 리스트
- WebClient
- 연결 리스트
- 빅 오 표기법
- 마크다운
- 자료구조
- JsonNode
- 트리
- 스택 큐 차이
- 클린코드
- Today
- Total
목록분류 전체보기 (149)
Developer Cafe
탐색을 위한 자료구조로 이진 트리를 사용하기 위해서 저장할 데이터의 크기에 따라 노드의 위치를 정의한 것이 이진 탐색 트리다. (1) 모든 원소는 서로 다른 유일한 키를 갖는다. (2) 왼쪽 서브 트리에 있는 원소의 키는 그 루트의 키보다 작다. (3) 오른쪽 서브 트리에 있는 원소의 키는 그 루트의 키보다 크다. (4) 왼쪽 서브 트리와 오른쪽 서브 트리도 이진 탐색 트리다. Select 예시 (11찾기) Insert 예시 (4삽입) Delete 예시 (8삭제) 왼쪽 서브 트리에서는 가장 오른쪽 링크필드가 후계자가 되고, 우측 서브 트리에서는 가장 왼쪽 링크필드가 후계자가 된다.
이진 트리에 있는 모든 노드를 한번식 모두 방문하여 노드가 가지고 있는 데이터를 처리하는 순회 방법에는 전위 순회와 중위 순회, 후위 순회의 세가지가 있다. 전위순회 (1) 현재 노드 N을 방문한다. : D (2) 현재 노드 N의 왼쪽 서브 트리로 이동한다. : L (3) 현재 노드 N의 오른쪽 서브 트리로 이동한다. : R 중위순회 (1) 현재 노드 N의 왼쪽 서브 트리로 이동한다. : L (2) 현재 노드 N을 방문한다. : D (3) 현재 노드 N의 오른쪽 서브 트리로 이동한다. : R 후위순회 (1) 현재 노드 N의 왼쪽 서브 트리로 이동한다. : L (2) 현재 노드 N의 오른쪽 서브 트리로 이동한다. : R (3) 현재 노드 N을 방문한다. : D
트리는 비선형 자료구조 중에서 자료들 간에 계층관계를 가진 계층형 자료구조이다. 이진트리 모든 노드의 차수를 2 이하로 정하여 전체 트리의 차수가 2 이하가 되도록 만든 이진 트리는 왼쪽 서브 트리와 오른쪽 서브 트리를 가지는데, 서브 트리 역시 이진 트리가 된다. n개의 노드로 구성된 이진 트리는 (n-1)개의 간선을 가지며, 높이가 h인 이진 트리가 가질 수 있는 노드의 최소 개수는 h+1개며, 노드의 최대 개수는 (2^h+1 - 1)개가 되는 성질을 가진다. 이진 트리를 순차 자료구조 방식을 이용하여 표현하는 방법은 높이가 h인 포화이진트리의 노드 번호를 배열의 인덱스로 사용하여 1창원 배열로 표현하는 것이다. 1차원 배열에서 인덱스 계산을 간단히 하기 위해서 인덱스 0번은 실제로 사용하지 않고 비..
@Column 테이블의 칼럼을 나타내며 굳이 선언하지 않더라도 해당 클래스의 필드는 모두 칼럼이 된다. 그럼에도 선언하는 이유는 기본값 외에 추가로 변경이 필요한 옵션이 있으면 사용합니다. 문자열의 경우 기본값 VARCHAR(255)인데 사이즈를 늘리거나 @Column(length = 500, nullable = false) private String title; 타입을 TEXT로 변경학고 싶거나 등에 사용한다. @Column(columnDefinition = "TEXT", nullable = false) private String content; @NoArgsConstructor 기본 생성자 자동 추가
@Entity 테이블과 링크될 클래스임을 나타냅니다. 기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍(_)으로 테이블 이름을 매칭합니다. ex) SalesManager.java -> sales_manager table 절대 Setter 메소드를 만들지 않습니다. 해당 클래스의 인스턴스 값들이 언제 어디서 변해야 하는지 코드상으로 명확하게 구분할 수가 없기에 차후 유지보수가 너무 복잡하다 잘못된 예 public class Order { public void setStatus(boolean status) { this.status = status; } } public void OrderCencel() { order.setStatus(false); } 올바른 예 public class Order { pu..
1. 옵티마이저 SQL 실행 계획을 수립하고 SQL을 실행하는 데이터베이스 관리 시스템의 소프트웨어이다. 데이터 딕셔너리에 있는 오브젝트 통계, 시스템 통계 등의 정보를 사용해서 예상되는 비용을 산정한다. 여러 개의 실행 계획 중에서 최저 비용을 가지고 있는 계획을 선택해서 SQL을 실행한다. 개발자가 작성한 SQL문을 어떻게 실행하느냐에 따라 성능이 달라진다. 2. 데이터 딕셔너리 데이터베이스를 운영하기 위한 정보들을 모두 특정한 테이블에 모아두고 관리하는데 그 테이블을 데이터 딕셔너리라고 합니다. 3. DML에서 Delete의 기능 데이터삭제 구문이나, 실제로 삭제되지 않고 해당 블록에 그대로 남아있으며 특별한 툴을 이용하면 복구 가능 데이터 삭제 후 테이블의 크기까지 줄이려면 수동으로 재구성 작업까..
1. AOP 관점 지향 프로그래밍을 의미하며 핵심 비즈니스 기능과 공통 기능으로 구분하고 공통 기능은 개발자의 코드 밖에서 필요한 시점에 적용하는 프로그래밍 방법이다. 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지다. 2. PSA 잘 만든 인터페이스, 이식 가능한 서비스 추상화를 의미한다. PSA를 사용하면 확장성이 좋아지고 기술 자체를 유동적으로 바꿔서 사용할 수 있다. 스프링이 제공하는 거의 모든 API는 PSA다. 3. IOC 프로그램의 제어 흐름 구조가 바뀌는 것이다. 즉, 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조다. 4. DI 모듈간의 의존성을 외부에서 주입시켜주는 기능이다. 런 타임시 사용하게 될 각 모듈 간의 의존 관계..
REST API란? REST(Representational State Transfer)는 네트워크를 통해서 컴퓨터들끼리 통신할 수 있게 해주는 아키텍처 스타일입니다. REST API는 인터넷 식별자(URI)와 HTTP 프로토콜을 기반으로 합니다. REST는 HTTP 프로토콜 덕분에 ‘단순함’이 핵심이라고 할 수 있습니다. 데이터 포맷으로는 브라우저 간 호환성이 좋은 제이슨(JSON)을 사용합니다. REST API는 구축과 확장이 간단하지만, 크고 복잡하게 만들 수도 있습니다. 이는 API를 어떻게 만들고, 무엇을 추가하고, 어떤 목적으로 설계되었는지에 따라 달려있습니다. REST API는 클라이언트와 서버 사이에서 통신할 수 있게 하고, 아키텍처를 만들 수 있게 해줍니다. REST 방식의 API라면, 클..
1. 가비지 컬렉션 시스템에서 더 이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것으로 시스템에서 가비지 컬렉션을 수행하는 부분을 가비지 컬렉터 라고 부른다. 2. Primitive type과 Reference type Primitive type byte short int long double float char boolean Reference type class interface array 3. 스레드 프로세스 내에서 동시에 실행되는 독립적인 실행단위 빠른 프로세스 생성, 적은 메모리 사용, 쉬운 정보공유, 교착상태에 빠질 수 있다. 4. 소캣통신(TCP/UDP) 데이터를 보내기 위해 사용하는 프로토콜이 있는데, 그 프로콜들이 TCP와 UDP입니다. T..
오버로딩 오버라이딩 차이 오버로딩 같은 이름의 메소드를 여러개 정의하는 것 매개변수의 타입이 다르거나 갯수가 달라야한다. return type과 접근제어자는 영향을 주지 않음 public class Overloadingtest { // test() 호출 void test(){ System.out.println("매개변수 없음"); } // test에 매개변수로 int형 2개 호출 void test(int a, int b){ System.out.println("매개변수 "+ a + "와 " + b); } // test에 매개변수 double형 1개 호출 void test(double d){ System.out.println("매개변수 " + d); } } public class test { public s..