본문 바로가기

Java/기초12

[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] Java의 GC(Garbage Collection)방법과 종류 GC란? Java Application은 JVM(Java Viirtual Machine) 위에서 구동됩니다. JVM에서는 Java Application이 사용하는 메모리를 관리하고 있는데 이 JVM의 기능중 더 이상 사용하지 않는 객체를 청소하여 공간을 확보하는 GC라는 작업이 있습니다. GC란 Garbage Collection(쓰레기 객체 정리, 이하 GC)의 약자입니다. Java Runtime시 Heap 영역에 저장되는 객체들은 따로 정리하지 않으면 계속헤서 쌓이게되어 OutOfMemmory Exception이 발생할 수 있습니다. 이를 방지하기 위하여 JVM에서는 주기적으로 사용하지 않는 객체를 수집하여 정리하는 GC를 진행합니다. GC 전 후의 메모리 JVM의 메모리 영역 GC 작업을 진행하는 G.. 2019. 10. 17.
[Java] 이클립스 설치방법 - JDK 1.7 설치, Eclipse Luna 설치 이클립스 설치 전 JDK를 먼저 설치해야 합니다. 가장 대중적으로 사용되고있는 JDK1.7을 설치해보도록 하겠습니다. https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html Java Archive Downloads - Java SE 7 www.oracle.com Accept License Agreement(동의)를 체크해주시고 윈도우에 설치하신다면 본인 운영체제에 맞는 exe파일을 클릭해주세요! 바로 다운로드가 진행되면 좋겠지만, 오라클 로그인을 해야합니다. 계정이 없으시다면 생각보다 오라클 계정이 필요한 경우가 많으니 계정을 만들어주세요. 로그인을 하신 후 로그인을 하시면 바로 J.. 2019. 8. 23.
[Java] String .split(".")결과가 공백이 나올 때 해결방법 문자열을 split()을 이용하여 자르고 싶을 때 작동이 잘 안되는 경우가 종종 있습니다. 보통 "."을 이용하여 자를 때 많이 일어나는데 이것은 split(); 메서드에 들어가는 "."이 정규식으로 작동하기 때문입니다. 그냥 "."을 이용하여 잘랐을 때의 결과 입니다. public class Test { public static void main(String[] args) { String str = "Hello.Wolrd.Eric!"; System.out.println("자를 문자열 => " + str); System.out.println("문자열을 \".\"를 이용하여 잘라 배열로 만듭니다."); String[] arrStr = str.split("."); System.out.println(); Sy.. 2019. 8. 21.
[java] 스레드(Thread)[4] - 스레드의 상태(state) 제어 스레드는 생성부터 종료까지 여러 상태 값들을 가집니다. 스레드는 크게 4가지의 상태를 가집니다. 스레드의 상태 1. ready state : start() 메서드 호출부터 스케줄러가 run() 메서드를 시작하기까지의 상태입니다. 2. run state : 스레드가 ready state이고, 스케줄러가 run() 메서드를 실행시키면 해당 스레드는 run state 상태가 됩니다. 3. non-runnable state : run state상태인 스레드가 동작을 일시 정지한 상태입니다. non-runnable state에는 3가지의 상태(wating, sleeping, blocked)가 있습니다 3-1 : wating state : synchronized 메서드나 synchronized 블록에 의해 스레드가.. 2019. 7. 27.