자료구조에서의 그래프는 굉장히 일반적인 개념이고 그 예가 많지만, 특정 기준을 이용해 둘로 나누면 아래와 같이 구분할 수 있다. 바로 무방향 그래프(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 이에 반해 큐는 입력과 출력의 방향이 따로 정해진, 선입선출 구조를 지니고 있다. 스택과의 공통점은 데이터를 한 번에 하나씩만 넣거나 뺄 수 있다는 점이 있으며 프린터의 출력 알고리즘 같은 작업/데이터의 순..
제네릭(Generic)은 직역하면 일반적인, 포괄적인 이라는 뜻이다. 자바의 맥락에서는 클래스나 메서드가 사용하는 데이터 타입의 일반화(Generalization)를 의미한다. 특정 기능을 가진 클래스와 메서드를 생성한 뒤, 필요에 의해 다양한 데이터 타입을 지정하고 싶을 때 사용한다. 조금 구체적으로는 데이터 타입의 경계를 정해 컴파일 타임에 사용될 타입으로 캐스팅하는 것인데, 이 덕분에 해당 객체에 의도하지 않은 타입이 지정되는 것을 미리 막을 수 있어 관리가 편하다. 이외의 특징은 아래와 같다. 한 클래스에서 여러 개의 제네릭 매개변수 혹은 타입 매개변수를 사용할 수 있다. static 변수에는 타입 매개변수를 사용할 수 없다. 이는 static 변수는 모든 객체에 공유되기 때문이다. 클래스와 메서..
목차 Abstract Class 자바에는 abstract라는 제어자가 있다. 이는 직역하면 '추상적'이라는 뜻인데, 이 맥락에서는 '미완성'이라고 받아들여도 크게 틀리지 않는다. 해당 제어자는 주로 클래스와 메서드를 정의할 때 사용되는데, 이를 각각 추상 클래스와 추상 메서드라 부른다. 계속해서 추상 메서드는 미완성이라는 이름대로 시그니처만 있고 바디가 없으며, 추상 메서드를 하나 이상 포함하면 추상 클래스가 된다. 또한 추상 클래스 역시 미완성이기 때문에 이를 기반으로 객체를 생성할 수가 없으므로 상속과 오버라이딩을 통해 메서드를 완성시켜 사용해야 한다. 이는 보통 클래스보다 추상화의 정도가 높으며 OOP의 추상화를 달성하는데 도움을 준다. Interface 인터페이스는 추상 클래스에서 한 걸음 더 높..
프로젝트를 진행하다보면 당연하게도 개발/테스트/배포 실행 설정이 달라지게 된다. 이를 스프링에서는 yml파일 하나로 간결하게 설정할 수 있는데, 예를 들면 아래와 같다. spring: profiles: active: dev # 개발 서버 설정 spring: config: activate: on-profile: dev # 테스트 서버 설정 spring: config: activate: on-profile: test # 배포 서버 설정 spring: config: activate: on-profile: server 여러 설정파일을 나눠 작성할 필요 없이 이렇게 작성한 뒤에, 가장 위 active의 값만 원하는 대로 바꾸면 된다. 단계별로 사용하는 DB나 시크릿 키 등을 한 눈에 관리할 수 있어서 편리하다.
목차 Transaction 더 이상 쪼갤 수 없는 일처리의 최소 단위 -> 모두 성공하거나 모두 실패해야 함 안정성을 보장하기 위해 다음의 원칙을 지킨다. 원자성 - 트랜잭션은 쪼갤 수 없으며 모두 성공하거나 모두 실패해야 한다. 일관성 - DB에 대한 비즈니스 로직이 트랜잭션 전후로 일관되어야 한다. 고립성 - 모든 트랜잭션은 다른 트랜잭션의 영향을 받지 않는다. 지속성 - 성공한 트랜잭션의 결과는 안정적으로 보존되어야 한다. 작업 도중 시스템 오류가 발생해도 마찬가지다. 커밋 - 모든 작업을 정상 처리하겠다고 확정하는 명령어. 결과를 DB에 저장하고 트랜잭션을 종료한다 롤백 - 작업 중 문제가 발생하여 트랜잭션 처리과정의 모든 변경사항을 취소하겠다고 확정하는 명령어이다. JPA 역시 Hibernate..
목차 JDBC 먼저 JDBC는 영속성을 보장하기 위해 자바에서 자체적으로 제공하는 기능이자, DB 커넥터이며 특징으로는 다양한 DB Driver들의 작성방식을 통일시켜 표준화했다는 점이 있다. 자바의 모든 데이터 액세스는 내부적으로 이 JDBC를 사용하고 있으며, 앞으로 알아볼 기술도 마찬가지다. Spring JDBC 이 JDBC에는 특유의 단점이 있었는데 바로 DB 연결과 SQL 사용, Data Mapping 등의 모든 과정을 개발자가 직접 입력해주어야 한다는 점이었다. 이는 개발 생산성 저하로 이어지는 치명적인 문제였으며, Spirng JDBC는 이 반복적인 작업에서 개발자를 해방시켜주었다. DB 커넥션을 가져오는 DataSource를 빈으로 등록하기만 하면, 실행할 SQL과 파라미터 등을 넘겨주는 ..
DTO란 이름 그대로 프로세스 사이에서 데이터를 전송하는 객체이다. 클라이언트 - 서버 간의 반복된 요청/응답에 따른 지연시간을 줄이기 위해 여러 요청에 대한 데이터를 한 번에 담는 객체로서 도입되었다. 조금 더 구체적으로는 클라이언트 - 서버 간의 요청/응답에 따르는 반복되는 직렬화를 맡아하는 객체라 할 수 있으며, DTO를 구성하는 원칙은 다음과 같다. DTO는 가능하면 POJO(Plain Old Java Objects)로 생성한다. 순수하게 데이터를 저장하는 역할과, 데이터에 대한 getter(), setter() 메서드만을 가진다. 저장, 검색, 직렬화, 역직렬화 로직을 제외한 어떠한 비즈니스 로직도 갖지 않는다. 직렬화 - 서버가 DTO 같은 Java 객체를 JSON 형식으로 변환하는 것 역직렬..
REST(ful) API API란 쉽게 말해 클라이언트를 위해 서버와의 소통법을 적어둔 매뉴얼이다. 이 매뉴얼의 디자인에는 BEST Choice가 존재하며, 이를 REST API라 부른다. 중간 내용을 건너뛰고 간단하게 정리하면 REST API란 규칙을 통한 리소스 중심의 올바르고 유일한 엔드포인트 작성 적절한 HTTP 응답 코드와 리소스에 대한 정보 기재 CRUD에 적합한 HTTP 메서드(POST, GET,...) 사용 응답에 리소스에 대한 링크 삽입 을 모두 만족하는 API를 말한다. Spring MVC의 REST API 엔드포인트(애너테이션) @RestController = @Controller + @ResponseBody, 컨트롤러 클래스에 달아준다. @Request/ResponseBody - H..
- Total
- Today
- Yesterday
- java
- 야경
- 면접 준비
- 알고리즘
- 맛집
- 스트림
- 세모
- 칼이사
- 유럽여행
- Backjoon
- 지지
- 리스트
- Algorithm
- 유럽
- 스프링
- 여행
- 백준
- RX100M5
- spring
- 세계여행
- 세계일주
- Python
- 기술면접
- 중남미
- 동적계획법
- 남미
- 자바
- BOJ
- a6000
- 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |