자료구조에서의 그래프는 굉장히 일반적인 개념이고 그 예가 많지만, 특정 기준을 이용해 둘로 나누면 아래와 같이 구분할 수 있다. 바로 무방향 그래프(G1)와 방향 그래프(G2)인데, 이와 같은 자료구조를 자바에 구현하는 방법은 크게 두 가지가 존재한다. 하나씩 알아보자. Adjacency Matrix 인접 행렬은 말 그대로 노드간의 관계를 행렬로 나타낸 것이다. 노드가 n개인 그래프의 인접행렬은 n X n 정사각 행렬이 되며, 인접한 경우엔 1, 그렇지 않은 경우엔 0을 채워 넣는다. 추가로 무방향 그래프의 경우엔 인접 행렬이 대칭을 이루고 있는 것이 특징이다. 방향 그래프의 경우엔 반드시 대칭 행렬을 이루지는 않는다. 인접 행렬의 장점은 노드 사이의 빠른 경로를 찾기 편하다는 점이며 단점은 간선의 유무..
목차 Tree Traversals 특정 목적을 가지고 모든 노드를 한 번씩 방문하는 것을 트리 순회라 한다. 순회 방법은 크게 네 가지가 있으며, 공통적으로 왼쪽에서 오른쪽으로 진행한다. 이진트리는 그 정의상 서브 트리 역시 이진트리이기 때문에, 재귀 함수를 적용하기 편하다. 먼저 루트와 좌 우 서브트리 순서에 따른 분류를 보자. 전위 순회(Preorder Traversal)는 VLR의 순서로 방문한다. 아래와 같다. 참고로 이 방식은 그래프 순회의 깊이 우선 탐색(DFS)과 동일한 방법이다. 이어서 중위 순회(Preorder Traversal) 순회는 LVR이다. 아래와 같다. 마지막으로 후위 순회(Postorder Traversal) 순회는 LRV이다. 아래와 같다. 추가로 VRL 분류와 별개로 레벨..
목차 Stack Stack은 더미, 쌓다 등의 의미를 지니고 있다. 하나의 입출력 방향만을 가진 구조에 데이터를 넣는 것으로 생각할 수 있는데, 때문에 가장 큰 특징은 후입 선출 구조라는 점이다. 추가로 데이터를 한 번에 하나씩만 넣고 뺄 수 있다는 특성도 존재한다. 주로 브라우저의 앞으로 가기나 뒤로 가기, 실행 취소(컨트롤+z), 혹은 함수의 호출이나 재귀 함수 역시 스택에 기반을 두고 있다. 보통 고정된 크기를 가지기 때문에 다 사용하면 넘치게 되며, 이를 스택 오버플로우라고 부른다. Queue 이에 반해 큐는 입력과 출력의 방향이 따로 정해진, 선입선출 구조를 지니고 있다. 스택과의 공통점은 데이터를 한 번에 하나씩만 넣거나 뺄 수 있다는 점이 있으며 프린터의 출력 알고리즘 같은 작업/데이터의 순..
static 키워드는 클래스의 멤버(필드, 메서드, 내부 클래스)에 붙일 수 있는 키워드이다. 키워드가 붙어있는 멤버를 정적 멤버(static member)라 부르며 다른 멤버와 구분한다. static멤버의 특징은 아래와 같다. static 키워드를 한 마디로 정의하면 '객체와의 분리'이다. 객체 생성 없이 접근할 수 있기 때문이다. 인스턴스 생성 없이도 사용이 가능하다. 즉, 공유가 가능하다. static method의 경우 인스턴스의 공통 기능을 담당한다. static method는 인스턴스 변수나 인스턴스 메서드를 사용할 수 없다. 메모리에 딱 한 번만 할당되어 메모리 사용에 이점이 있다. static class는 하위 클래스에서만 만들 수 있다. 이렇게 생성된 하위 클래스를 static neste..
먼저 테스트 케이스의 5대 원칙이다. Fast - 빨라야 한다. Independent/Isolation - 실행 순서에 독립적이어야 한다. Repeatable - 어떤 환경에서도 반복해서 작동, 같은 결과를 내보내야 한다. Self-Validating - 자체적으로 검증 결과를 판단할 수 있어야 한다. Timely - 기능 구현 직전에 작성해야 한다. 혹은 기능의 업데이트에 맞춰 즉시 개선해야 한다. JUnit JUnit은 스프링에서 지원하는, 가장 많이 사용되는 테스팅 프레임워크이다. Spring Boot Initializr에서 Gradle 기반의 프로젝트를 생성하면 기본적으로 테스트 패키지가 생성되며, JUnit을 포함한 testImplementation 'org.springframework.boot..
목차 Transaction 더 이상 쪼갤 수 없는 일처리의 최소 단위 -> 모두 성공하거나 모두 실패해야 함 안정성을 보장하기 위해 다음의 원칙을 지킨다. 원자성 - 트랜잭션은 쪼갤 수 없으며 모두 성공하거나 모두 실패해야 한다. 일관성 - DB에 대한 비즈니스 로직이 트랜잭션 전후로 일관되어야 한다. 고립성 - 모든 트랜잭션은 다른 트랜잭션의 영향을 받지 않는다. 지속성 - 성공한 트랜잭션의 결과는 안정적으로 보존되어야 한다. 작업 도중 시스템 오류가 발생해도 마찬가지다. 커밋 - 모든 작업을 정상 처리하겠다고 확정하는 명령어. 결과를 DB에 저장하고 트랜잭션을 종료한다 롤백 - 작업 중 문제가 발생하여 트랜잭션 처리과정의 모든 변경사항을 취소하겠다고 확정하는 명령어이다. JPA 역시 Hibernate..
DTO란 이름 그대로 프로세스 사이에서 데이터를 전송하는 객체이다. 클라이언트 - 서버 간의 반복된 요청/응답에 따른 지연시간을 줄이기 위해 여러 요청에 대한 데이터를 한 번에 담는 객체로서 도입되었다. 조금 더 구체적으로는 클라이언트 - 서버 간의 요청/응답에 따르는 반복되는 직렬화를 맡아하는 객체라 할 수 있으며, DTO를 구성하는 원칙은 다음과 같다. DTO는 가능하면 POJO(Plain Old Java Objects)로 생성한다. 순수하게 데이터를 저장하는 역할과, 데이터에 대한 getter(), setter() 메서드만을 가진다. 저장, 검색, 직렬화, 역직렬화 로직을 제외한 어떠한 비즈니스 로직도 갖지 않는다. 직렬화 - 서버가 DTO 같은 Java 객체를 JSON 형식으로 변환하는 것 역직렬..
DI(의존관계 주입)는 특정 객체가 의존할 객체나 메서드를(즉, 의존관계를) 해당 객체 외부에서, 정확하게는 스프링 컨테이너에서 주입받는 디자인 패턴이다. 여기서 A가 B에게 의존한다는 말은 B의 구성이나 로직이 변하면 A에게 영향을 끼칠 가능성이 있는 관계라는 뜻이다. 이어서 주입이란 의존성을 사용하려는 객체에게 전달하는 것이라 받아들이면 되며, 디자인 패턴이란 공통적인 문제에 대한 재활용 가능한 솔루션이라 생각하면 된다. 또한 스프링 컨테이너란 객체의 생명주기를 관리하는 모듈이며, 스프링 컨테이너가 관리하는 객체를 빈(Bean)이라 부른다. 이는 스프링의 핵심 원칙인 IoC를 구현하는 수단이기도 하며, 객체의 설계와 사용이라는 관심사를 분리해 느슨한 결합으로 의존도를 낮추는 것이 그 목적이다. 구체적..
목차 두 버전의 비교보단 11에서 추가된 기능 위주로 정리한다. String 클래스에 새로운 메서드 추가 strip(): 문자열 앞/뒤 공백 제거 stripLeading(): 문자열 앞 공백 제거 stripTrailing(): 문자열 뒤 공백 제거 isBlank(): 문자열이 비어있거나 공백만 포함된 경우 true 반환 repeat(n): 문자열을 n번 붙여서 반환 java.nio.file.Files 클래스(파일 처리 클래스)에 새로운 메서드 추가 Path writeString(Path, String, Charset, OpenOption): 파일에 문자열을 작성하고 Path로 반환. OpenOption에 따라 다르게 작동하며 Charset의 기본값은 UTF-8이다. String readString(Pat..
목차 Authentication 인증이란 사용자가 식별정보(Cridential)를 이용해 본인이 맞음을 증명하는 절차이다. 스프링 시큐리티 내부에서는 이를 위해 제법 길고 촘촘한 과정이 이어지는데, 요약에 도전해보자. 당연하게도 사용자가 크리덴셜을 담아 보낸 요청이 필터에 도달하면서 과정이 시작된다. UsernamePasswordAuthenticationFilter 제출된 크리덴셜을 통한 인증을 처리하는 필터이다. 가장 앞에서 크리덴셜만 담은, 인증이 완료되지 않은 토큰을 생성(UsernamePasswordAuthenticationToken) 후 AuthenticationManager 호출. AuthenticationManager 인증을 총괄하는 관리자 인터페이스. 실질적인 인증관리는 해당 클래스를 구현..
- Total
- Today
- Yesterday
- java
- 남미
- RX100M5
- 기술면접
- Python
- 맛집
- Backjoon
- 알고리즘
- 유럽여행
- 자바
- 지지
- 세계여행
- spring
- a6000
- 칼이사
- 면접 준비
- 동적계획법
- Algorithm
- BOJ
- 세모
- 스프링
- 리스트
- 백준
- 야경
- 중남미
- 세계일주
- 스트림
- 파이썬
- 여행
- 유럽
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |