Java 16

Heap 메모리 구조와 GC는 어떻게 될까?

목표 : Heap 메모리와 GC에 대해 설명할 수 있다. 앞선 포스팅으로 JVM 내부 메모리 구조를 알아보았다. 그 중, Heap 메모리에 대한 상세한 설명을 추가하고자 한다. Garbage Collection Heap을 설명한다 했지만, GC부터 알아보려고 한다. Heap과 자연스럽게 연결될 것이며, 일단 용어를 좀 정리해야 설명하기 편할 것 같아서다. JVM은 자동으로 메모리를 관리해준다. GC는 더이상 사용되지 않는 인스턴스(Referrer가 없는 Object)를 찾아 메모리 할당을 삭제하는 행위이다. 이 말은 JVM에서는 GC가 자동으로 일어난다는 것이고, 성능에 중요한 역할을 한다. GC 혹은 메모리 설정이 잘못되면 금방 OOM(Out of Memory) Error가 발생할 것이다. 이 때 말하..

Programming/Java 2022.08.16

JVM의 메모리 구조는 어떻게 될까?

목표 : JVM 메모리 구조를 설명할 수 있다. JVM이 java Virtual Machine 이라는 것은 잘 알고 있다. 다만, 이 구조에 대해 설명을 하려고 하면, 쉽지 않은 부분이 있어 정리하고자 한다. 왜 자바가 많이 사용되었을까? 근본적인 질문일 수 있다. JVM을 설명하기 전에, Java의 특징 중 하나인 OS에 종속적이지 않다는 점을 설명하기 위한 질문이다. 그럼, OS에 어떻게 종속받지 않은 환경을 만들었을까? 어디에서든 Java가 돌아갈 수 있게 감쌀 무언가가 필요했고, 그게 바로 Java Virtual Machine 이라고 하는 JVM이다. Java는 컴파일 언어다. Java의 특징 중 또 다른 하나는 컴파일 언어라는 것이다. 컴파일 언어라 함은, 기계어로 번역하는 과정이 필요하며, 이..

Programming/Java 2022.08.15

[Spring] 스프링 프레임워크가 뭘까?

목표 : 스프링(Spring)이 무엇인지 설명할 수 있다. 더보기 서론이자 내 생각.. 스프링을 별도로 공부한 적은 많이 있지만, 글을 적으려고 할 때마다, 그리고 너무 겉핥기로 알고 있다보니 난감한 부분이 있다. 특히나 어려운 부분은, 오랫동안 발전해왔고 그 히스토리를 온전히 공부하면서 쌓아가야하는 건 아닐까 하는 생각이 항상 들어, 어디부터 어떻게 시작해야하는지 감이 잘 잡히지 않는다. 게다가 Spring Security, Data, Batch, Cloud, JPA 등등 너무도 다양해지는 탓에 어떻게 시작해야하는지 모르는 경우가 많았다. 무작정 토비의 스프링을 들고 공부하면 될지, 아니면 스프링부트로 API 서버 만드는 법부터 하면 되는 건지, JSP를 비롯한 이제는 점점 Legacy라는 단어로 표현..

Framework/Spring 2022.07.22

자바 기초부터 모던 자바까지 - 스트림(stream)편

목표 : 람다를 기준으로 스트림 문법을 이해한다. 이전 포스팅으로, JAVA가 인터페이스를 통해 람다식을 어떻게 만들어 왔는지 히스토리를 보았다. 그리고, java에서는 앞서 배운 함수형 인터페이스의 주요 표현들인 Consumer, Function, Predicate, Supplier들이 어떻게 사용되어 지는지 Stream을 보면서 이해해보도록 하자. Stream(스트림) 부터 알아보자. 보통 Stream(스트림)이라는 단어는 어떤 데이터의 흐름을 뜻한다. 특히, java.io에서는 I/O 프로그래밍을 사용하는 클래스 명에 Stream이라는 단어를 사용하고 있다. 그러나, 지금 배우고자 하는 Stream은 주로 컬렉션 프레임워크나 이와 유사한 형태의 데이터를 처리할 때 도움을 줄 수 있는, 자바 8에서 ..

Programming/Java 2022.07.16

[java] Find Minimum in Rotated Sorted Array

[참고문제] : https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/ Find Minimum in Rotated Sorted Array - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 풀이 이미 정렬되어 있지만, Rotate되어있는 배열에 대해 최소값을 찾는 문제다. 생각의 흐름 - 양쪽에서 바라보자. 이미 정렬이 되어 있으니, 최소값을 찾는 것에만 집중해야 한다. 그 중에서도 양쪽에서 ..

Algorithm 2022.07.14

자바 기초부터 모던 자바까지 - 람다편

목표 : 람다가 필요한 이유와 자바에서 적용된 내용을 알아본다. 이전 함수형 프로그래밍 포스트에 이어서, 람다에 대해 하나씩 알아가볼 예정이다. 자바에 람다와 함수형 프로그래밍이 왜 필요하지? 아래와 같이 정리해보고자 한다. 이름 없는 함수를 선언할 수 있다. 메서드는 반드시 특정 클래스나 인터페이스 안에 포함되어야 하고 메서드의 이름이 있어야 하지만, 람다 표현식은 이러한 제약에서 벗어난다. 즉, 유연성이 생긴다. 소스 코드의 분량이 획기적으로 줄어들 수 있다. 반복적인 작업이 필요한 기존소스의 비효율성을 낮출 수 있다. 코드를 파라미터로 전달할 수 있다. 외부에서 동작을 정의해서 메서드에 전달할 때 편리하게 사용할 수 있다. 기존의 자바에서 탈피하여 지금 우리가 람다를 공부하는 이유다. 람다 표현식을..

Programming/Java 2022.07.06

[java] House Robber

[참고문제] : https://leetcode.com/problems/house-robber/ House Robber - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 풀이 DP 문제다. 점화식을 찾기 위해서 나열해보자. 이번에도 꽤 많이 나열해보았다. 생각의 흐름 - 초깃값 찾기 이번에도 초깃값부터 찾아보았다. arr[n] 부터 생각해보았으나, 역시 최초 1일때부터 고민하는 것이 나았다. 6번째 정도 적어보니, 이전에 적어둔 식들이 다시 쓰이기 시작했다...

Algorithm 2022.07.05

[java] Climbing Stairs

[참고문제] :https://leetcode.com/problems/climbing-stairs/ Climbing Stairs - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 풀이 DP문제다. DP는 일단 규칙찾기, 점화식 찾기다. 못찾으면 끝나는 문제라고 할 수 있다. 생각의 흐름 - 초기값들을 찾자. 문제에서 보이듯, n = 1, n = 2, n = 3일 때를 보여주고 있다. 점화식 문제처럼 초기값들을 먼저 설정해보자. 생각의 흐름 - 일단 적어보자...

Algorithm 2022.07.05

[java] Flood Fill

[참고문제] :https://leetcode.com/problems/flood-fill/ Flood Fill - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 풀이 어려운 문제는 아니며, 기초를 다지기 위해 풀어보았다. 생각의 흐름 - 보자마자 떠올라야 한다. BFS혹은 DFS 문제임을 알아야 한다. 이차원 배열과 queue, 그리고 적절한 Pair와 같은 자료구조가 필요하다. java에서는 pair와 같은게 없기 때문에, Node라는 class를 만들어 ..

Algorithm 2022.07.04

[java] Longest Substring Without Repeating Characters

[참고문제] : https://leetcode.com/problems/longest-substring-without-repeating-characters/\ Longest Substring Without Repeating Characters - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 풀이 MAP을 써야 하는 문제라는 걸 인식했다. 생각의 흐름 - MAP을 어떻게 구성할까? 인덱스를 갖고 있어야 한다고 생각했다. 똑같은게 나왔을 때, 기존 인덱스를 어..

Algorithm 2022.07.04