본문 바로가기

Java33

[책 리뷰] 이것이 취업을 위한 백엔드 개발이다 with 자바 리뷰 최근에 지인분의 소개로 받은 책이 있습니다. 기술면접관으로 활동하며 주니어 개발자들에게 멘토링을 진행하는 저자 이준형님이 그동안 진행한 멘토링과 컨설팅의 내용을 담아 책으로 출판했다고 하여 기대를 가지고 읽어본 책이었고, 실제로 제 멘티들에게도 추천할 만한 책이라고 보여 간단한 리뷰를 남깁니다. https://product.kyobobook.co.kr/detail/S000211834105 이것이 취업을 위한 백엔드 개발이다 with 자바 | 이준형 - 교보문고 이것이 취업을 위한 백엔드 개발이다 with 자바 | 백엔드 개발자 취업, 무엇을 어떻게 준비할까? 생생한 과제테스트 경험을 바탕으로 백엔드 개발자 취업의 모든 것을 배운다!백엔드 개발자를 꿈 product.kyobobook.co.kr 추천대상 하.. 2024. 3. 24.
[Java] 많이 헷갈려하는 String constant pool과 Runtime Constant pool, Class file constant pool String Constant Pool과 Constant Pool 이 두 가지는 완전히 다른 개념입니다. 용어가 비슷한 형태이기 때문에 이 두 가지를 혼용하여 헷갈리는 경우가 많습니다만, 저장되는 위치부터 저장하는 데이터의 종류, 관리 주체까지 모든 것이 다른 저장공간입니다. 심지어 Constant pool은 JVM - Metaspace영역의 Constant pool과 컴파일된 class파일의 Constant pool이 다릅니다. 헷갈리지 않도록 살펴봅시다. String Constant Pool Java에서 문자열 리터럴을 저장하는 독립된 영역을 `String Constant Pool` 또는 `String Pool`이라고 부릅니다. JVM - Perm/Metaspace 영역에 존재하고 일반적으로 GC 대상.. 2023. 5. 19.
[Java] Multi Thread환경에서 동시성 제어를 하는 방법 스레드(Thread)란 무엇일까요? 스레드가 무엇인지 설명하기 위해서는 그 상위 단위인 프로세스에 대해 이해할 필요가 있습니다. 일반적으로 특정 작업을 수행하는 소프트웨어를 우린 프로그램이라고 부릅니다. 이러한 프로그램이 실제로 실행되어, 메모리나 CPU와 같은 자원을 할당받으면 이를 프로세스라고 부릅니다. 스레드는 이 프로세스를 구성하는 하나의 단위입니다. 하나의 프로세스에는 여러 스레드가 작동하고 있을 수 있겠네요. 스레드는 작업의 한 단위입니다. 프로세스는 독자적인 메모리를 할당받아서 서로 다른 프로세스끼리는 일반적으로 서로의 메모리 영역을 침범하지 못합니다. 하지만 프로세스 내부에 있는 여러 스레드들은 서로 같은 프로세스 내부에 존재하고 있기 때문에 같은 자원을 공유하여 사용할 수 있습니다. 같은.. 2020. 6. 6.
TDD를 소개합니다 일반적인 개발 프로세스 지금까지 만들던 기능 개발은 기능이 어떤 것인지 추출하고, 이를 우선 구현부터 했습니다. 테스트가 필요하다면 테스트 코드는 작성했고 테스트가 통과하지 못한다면 다시 코드를 수정하거나 테스트 코드를 수정하기도 했었죠. 문제는 바로 '우선 돌아가는 코드를 작성' 하는 부분이었습니다. 분리해야 할 기능들이 한 메서드에 모여있고 강한 결합도를 가지며 점점 테스트하기 힘든 코드가 되었던 것이죠. 결과적으로 테스트 코드 작성이 어려운 수준까지 코드 품질이 떨어졌고 테스트 코드 작성보다는 직접 서버를 띄운 후 하나하나 테스트를 해야 했습니다. 이렇게 개발을 하던 도중, 인프런에서 강의하시는 백기선님의 개발 스타일을 보고 꽤 감명받은 기억이 납니다. 강의에서는 원하는 기능에 대해 테스트 코드를 .. 2020. 5. 15.
[Java] Java는 Call by reference가 없다 Call by Value와 Call By Reference가 뭘까? 프로그래밍을 하다 보면 꼭 알고 넘어가야 하는 개념이 있습니다. 바로 Call By Value, Reference입니다. 어떤 언어를 공부하든 나오는 개념이기도 합니다. Call by value란, 값을 호출하는 것을 의미합니다. 전달받은 값을 복사하여 처리합니다. 즉 전달받은 값을 변경하여도 원본은 변경되지 않습니다. Call by reference란 참조에 의한 호출을 의미합니다. 전달받은 값을 직접 참조합니다. 즉 전달받은 값을 변경할 경우 원본도 같이 변경이 됩니다. Java에 Call by reference가 있을까? 우리는 Java에서 객체를 전달받고, 그 객체를 수정하면 원본도 같이 수정되니 이것이 Call by refere.. 2020. 3. 24.
[Java] jConsole로 원격에서 실행중인 JVM 모니터링하기 서버 환경 Naver Cloud Platform(nCloud) Compact Server ubuntu 16 docker (openJDK-8 베이스 이미지로 만든 프로젝트가 올라갑니다) 프로젝트 Spring boot 2.2 maven JDK 8 모니터링 환경 Windows10 PRO Oracle JDK 8 jConsole 도커 이미지 작성 도커 이미지를 만들 때 참조하는 DockerFile을 다음과 같이 작성했습니다. FROM ascdc/jdk8 ADD delfood.jar delfood.jar ENV JAVA_OPTS="" ENTRYPOINT ["java",\ "-Dcom.sun.management.jmxremote.port=[접근할 포트]",\ "-Dcom.sun.management.jmxremote... 2020. 2. 14.
[Java] Hackerrank Two Strings 문제 두 문자열이 주어졌을 때 서로 같은 글자를 포함하는지 검사하시오. 같은 글자를 포함한다면 YES를, 포함하지 않는다면 NO를 반환하시오. 풀이 Tip : 중복 제거를 하지 않은 상태로 반복문을 돌릴 시 Timeout으로 실패 처리됩니다. 1. 문자열을 1글자씩 나눈다. 2. 나눈 글자들의 중복을 없에기 위하여 Set에 글자를 넣는다. 3. 반복문을 돌며 해당 글자를 2번 문자열이 포함하는지 검사한다. static String twoStrings(String s1, String s2) { Set set = new HashSet(); String[] c1 = s1.split(""); for (String a : c1) set.add(a); for (String a : set) if (s2.contain.. 2020. 2. 5.
[Java] Anagram 판별하기 Anagram이란 Anagram이란 문자의 종류, 빈도가 같은 두 문자열을 의미합니다. 예를 들면 아래와 같은 문자열은 Anagram입니다. abcd acdb ttmt mttt bobobo obobob 두 문자열이 Anagram인지 판별하기 위해서 저는 다음과 같은 알고리즘을 사용할 것입니다. 1. 문자열을 문자 배열로 변환한다. 2. 문자 배열을 정렬한다. 3. 정렬된 문자 배열이 같은지 비교한다. 문자열을 정렬한 후 비교해서 같다면 문자의 종류, 빈도가 같으니 Anagram이라 할 수 있습니다. 코드 import java.util.Arrays; public class Anagram { public static boolean isAnagram(String str1, String str2) { // 1... 2020. 2. 4.
[Java] 스택 두 개로 큐 구현하기 Stack 두 개로 Queue 구현방법 스택 두 개를 준비한다. Stack 1 : add() 할 때만 사용할 것입니다. (추가할 때만 사용) Stack 2 : peek(), poll() 을 할 때 사용할 것입니다. (읽는 연산이 필요할 때 사용) 2. add 1번 스택에 원소를 넣는다. 3. poll 1. 1번 스택에 있는 원소들을 모드 2번 스택으로 옮긴다. 이 때 원소들의 순서가 바뀐다. (큐의 순서와 동일하게 됨) 2. 2번 스택에서 pop시킨다. 만약 2번 스택이 비어있지 않다면 1번 과정을 생략한다. 2번 스택이 비어있지 않은 상태로 1번 과정을 진행하면 원소들의 순서가 뒤죽박죽으로 섞일 수 있다. 4. size 두 스택에 있는 원소들의 합을 반환합니다. 코드 import java.util.St.. 2020. 2. 4.