인접행렬과 인접 리스트의 차이점

​ 인접 행렬과 인접 리스트는 둘 다 그래프를 정점과 간선으로 표현하는 방법입니다. 그래프는 무방향이거나 단방향일 수도 있구요.

인접행렬은 그래프의 정점의 총 수가 n 일 때 n x n 행렬이 필요합니다. 정점 i 에서 j 로 가는 간선이 있으면 행렬의 i 행 j 열이 1 이 됩니다. 행렬은 표현법은 쉽지만 $n^2$ 만큼의 공간이 필요하고, 원소를 채우는 데만 $n^2$ 에 비례하는 시간이 듭니다. 인접행렬은 간선의 밀도가 아주 높은 그래프에서 적합합니다. 하지만 반대로 간선의 밀도가 낮은 경우에 시간과 공간이 많이 낭비됩니다.

인접리스트는 각 정점마다 리스트를 하나씩 만들고 인접한 정점들을 하나의 연결 리스트를 할당하는 것입니다. 따라서 존재하지 않는 간선은 리스트에 나타나지 않습니다. 그렇기 때문에 인접 리스트는 인접 리스트는 간선의 수가 적을 때 유용합니다. 반대로 거의 모든 정점 쌍에 대해 간선이 존재하는 경우 오히려 링크 정보를 표현하기 위한 오버헤드 공간만 더 차지합니다. 또한 i -> j 간선이 존재하는지 확인하기 위해 리스트를 차례대로 훑어야 하기 때문에 인접 행렬 표현보다 시간이 많이 걸립니다. 6 13 15

REST API 란

​ API 란 소프트웨어 간 지정된 형식으로 요청, 명령을 받을 수 있는 수단입니다. 예를 들어 클라이언트와 서버가 통신을 할 때 요청과 응답을 줘야 하는데, 그 형식이 API 라고 할 수 있습니다. API 는 웹에만 국한되지 않고 모든 프로그램 간의 상호 작용에 사용됩니다.

​ REST API 는 이러한 API 를 어떻게 구성할지 정의된 아키텍처 스타일로 웹상에서 사용되는 여러 리소스를 HTTP URI로 표현하고, 해당 리소스에 대한 행위를 HTTP Method(POST, GET, PUT, DELETE, PATCH) 로 정의하는 방식을 말합니다.

Spring 에서 AOP 가 필요한 이유

​ AOP 는 관심 지향 프로그래밍으로, 공통된 관심사를 처리하기 위한 프로그래밍입니다. 관심사항은 공통 관심 사항(Cross-cutting concern)핵심 관심 사항(Core concern)으로 나뉩니다. 어플리케이션의 핵심 로직이 바로 핵심 관심 사항에 해당되고, 공통적으로 적용되는 기능(트랜잭션, 예외처리 등) 은 공통 관심 사항이 됩니다.

AOP 의 주 목적은 핵심 관심 사항에서 공통 관심 사항을 분리하는 것입니다. 둘을 나누면 코드가 간결해지고, 핵심 로직에 좀 더 집중할 수 있으며 유지보수도 편해집니다. 또한 객체 지향 설계 원칙에 맞는 코드 구현할 수 있습니다.

댓글남기기