공부방/JAVA (24) 썸네일형 리스트형 [Java] Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리 (1/2) 1. Garbage Collection(가비지 컬렉션)이란? [ Garbage Collection(가비지 컬렉션)이란? ] 프로그램을 개발 하다 보면 유효하지 않은 메모리인 가바지(Garbage)가 발생하게 된다. C언어를 이용하면 free()라는 함수를 통해 직접 메모리를 해제해주어야 한다. 하지만 Java나 Kotlin을 이용해 개발을 하다 보면 개발자가 메모리를 직접 해제해주는 일이 없다. 그 이유는 JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해주기 때문이다. 대신 Java에서 명시적으로 불필요한 데이터를 표현하기 위해서 일반적으로 null을 선언해준다. 예를 들어 아래와 같은 코드가 있다고 가정하자. Person person = new Person(); person.setName("Ma.. equals, hashcode 배열에 대한 공부를 하는데 문자열 비교와 배열 복사에 대한 내용을 만났다. 관련하여 이전에 공부했던 개념을 리마인드도 하고 새롭게 문서를 찾아 보며 공부를 또 하면 좋을 것 같아 해당 주제에 대해 조사해보았다. equals() 우선 정말 좋은 원본 글을 또 망개님이 다시 정리한 글이 있어 해당 글을 참고했다는 것을 미리 말한다. equals와 hashCode는 Object 클래스에 정의되어 있다. 따라서 Java의 모든 객체는 이 두 함수를 상속받고 있게 된다. 그래서 equals() 란? 2개의 객체가 동일한지 검사하기 위해 사용 2개의 객체가 가리키는 곳이 동일한 메모리 주소일 경우에만 동일한 객체this == obj 가 주소를 비교하는 것이다. 하지만 개발을 하다 보면 equals()는 내 의도와는.. deleteAll 대신 deleteAllInBatch를 사용하자 최근 받은 코드 리뷰에서 deleteAll 대신에 deleteAllInBatch 를 사용하라는 리뷰를 받았다. 내부적인 구현이 어떠한지 궁금하여 알아본 내용을 포스팅한다 최근에 받은 코드리뷰 이런 리뷰를 받게 되었다. repository.deleteAll() 과 repository.deleteAllInBatch 는 차이가 무엇일까? repository.deleteAll() /* * (non-Javadoc) * @see org.springframework.data.repository.Repository#deleteAll() */ @Override @Transactional public void deleteAll() { for (T element : findAll()) { delete(element); } .. 동기-비동기, 블로킹-논블로킹 사실 저는 동기-비동기와 블로킹-논블로킹을 제대로 알지 못하고 있었습니다. 막연하게 동기면 다음 작업 처리 못하고 비동기면 계속 작업하는거 아니야?라고 생각했었습니다. (이러면 동기와 블로킹의 차이가 없어져버리죠) 공부해보니 동기-비동기와 블로킹-논블로킹은 좀 다른 개념이었습니다. 그리고 이해하기 쉽지 않은 헷갈리는 개념이기도 했습니다. 앞으로 비동기 처리나 논블로킹 IO를 활용할 일이 많을 것으로 예상하기 때문에 미리 정리를 하는 시간은 가져보려 합니다. 설명의 편의를 위해 함수 또는 작업이라는 용어를 사용하게 될텐데요, 단순히 코드에 작성한 함수 뿐 아니라 IO를 진행하는 프로세스, 네트워크 모델에서의 요청 및 응답 등에도 적용되는 개념이라고 생각해주시면 편할 것 같습니다. 저는 설명의 편의를 위해 .. Database 조회 최적화 https://crystalcube.co.kr/163 https://www.burndogfather.com/238 Decorator pattern Consumer Consumer는 1개의 Type T 인자를 받고 리턴 값이 없는 함수형 인터페이스입니다. @FunctionalInterface public interface Consumer { /** * Performs this operation on the given argument. * * @param t the input argument */ void accept(T t); } Example 1 : Consumer Consumer는 Lambda 표현식으로 구현할 수 있습니다. accept() 호출과 함께 인자를 전달하면 구현된 내용이 수행됩니다. import java.util.function.Consumer; public class ConsumerExample1 { public static void main(St.. 디자인 패턴 - 옵저버 패턴 0. 옵저버 패턴? 옵저버 패턴은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의합니다. 1. 용어 정리 옵저버 패턴에서는 크게 두가지 용어를 먼저 알고 가면 될 것 같습니다. 주제 (subject): 데이터와 옵저버를 관리하는 객체 옵저버 (observer): 데이터가 변경될 경우, 주제로 부터 변경사항을 전달받는 객체 2. 예시로 확인하는 옵저버 패턴 1. 예시에서 Subject는 Observer 3개를 관리하는 형태입니다. 2. Subject는 관리하고 있는 data가 존재하고 있습니다. (data1, data2, data3) 3. Observer도 관리하고 있는 data가 존재합니다. (예시에서는 observer마다 관.. 이전 1 2 3 다음