Garbage Collection Very Short Introduction GC는 JVM의 메모리 영역 중 메서드 영역과 힙 영역의 객체 중 더 이상 참조되지 않는 것들을 제거해 메모리를 확보하는 기법이다. 메서드 영역도 포함된다고 적긴 했지만, 클래스 로더를 직접 조작하지 않는 이상 해당 영역의 객체들은 언제나 참조되기 때문에 사실상 GC의 대상이 되지 않는다. 계속해서 GC의 통계적 배경은 무려 77년도에 처음 언급된 '약한 세대 가설'이며, 출처: https://docs.oracle.com/en/java/javase/16/gctuning/garbage-collector-implementation.html#GUID-16166ED9-32C6-402D-BB22-FD85BCB04E57 HotSpot V..
모든 반복문은 언제나 재귀 함수로 변환할 수 있으며, 그 반대도 마찬가지다. 따라서 개발자의 필요에 따라 적절히 골라서 사용하는 것이 중요한데, 그 장단점과 차이를 정리해보자. 반복문(Iteration) 선언 - 이 곳에서 반복이 일어난다는 것을 명시. 직관적이며 가독성 좋음. 시작 - 초기화, 반복 조건, 제어 변수의 변경, 반복문 내의 명령문 실행에 대한 정보 명시 종료 - 특정 조건에 도달 할 때까지 반복적으로 실행 무한반복 - 반복 조건에 따라 발생하며 CPU 사이클을 반복적으로 사용 메모리 - 힙 메모리 사용(넘칠 시 Out Of Memory 에러 발생) 속도 - 빠름 변수 - 많음. 이는 변경 가능한 상태의 증가로 이어지며 프로그램 오류가 발생할 가능성이 상대적으로 높음. 재귀 함수(Recur..
재귀란 일반적으로 정의하자면 자기 언급이다. 수학으로 봤을 땐 일종의 점화식이라고 할 수 있으며, 프로그래밍적으로 이야기하자면 재귀 함수란 정의 단계에서 자시 자신을 호출하는 함수를 가리킨다. 주어진 문제를 풀 때 자기 자신을 다시 호출함으로써 코드의 복잡도를 줄이기 위해 사용한다. 하지만 꼬리재귀 최적화가 되어있지 않은 환경에서 재귀 호출은 스택 메모리를 빠르게 잡아먹게 되므로 실행 속도 측면에서 반복문이 더 좋은 선택이 된다. 여기서 꼬리재귀 최적화란 메서드를 재귀 호출 메서드와 꼬리 메서드로 구분해 재귀 호출 이후 추가적인 연산을 실행하지 않도록 막는 방법이며, C++, Swift, Kotlin 컴파일러에는 자동으로 구현되어 있으나 보안상의 이유로 자바 컴파일러엔 구현되지 않았다. 다만 이에 영향을..
자료구조에서의 그래프는 굉장히 일반적인 개념이고 그 예가 많지만, 특정 기준을 이용해 둘로 나누면 아래와 같이 구분할 수 있다. 바로 무방향 그래프(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..
- Total
- Today
- Yesterday
- 스프링
- 스트림
- 맛집
- RX100M5
- 리스트
- 백준
- spring
- a6000
- 남미
- BOJ
- 세계여행
- 알고리즘
- Python
- 동적계획법
- java
- 파이썬
- 여행
- 자바
- 면접 준비
- 기술면접
- 지지
- 세계일주
- Algorithm
- 야경
- 유럽
- Backjoon
- 칼이사
- 중남미
- 세모
- 유럽여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |