Develop/Java 3

[Java] JVM 구조 및 동작원리 - 1

지난번 String Pool 관련하여 작성하면서 JVM 구조와 동작원리에 대해서 궁금해서 조금 찾아본 내용을 글로 줍줍..인데 제목이 1인 이유는 깊게 봐야할 내용이 많아서 이해한 내용 먼저 작성하고 추가적으로 버전 2, 3 .... 을 만들 예정이기 떄문이다. (혹시 틀리거나 모호한 부분, 궁금한 부분이 있다면 댓글 남겨주세요😃) JVM(Java Virtual Machine) JVM이란 Java 언어로 개발한 프로그램을 컴파일하여 바이트코드로 실행시키기 위한 가상머신이다. 왼쪽 그림과 같이 운영체제와 Java Application 사이에 존재하며 개발자가 작성한 Java 코드를 기계어로 번역하는 역할을 한다. 그렇게 때문에 운영체제와 상관없이 JVM 실행 가능한 환경이라면 어디서든 Java 프로그램 실..

Develop/Java 2023.01.03

[Java] 스트링풀(String Pool)

회사 동기가 문자열 비교 중 어떤건 equals를 쓰고 어떤건 ==를 쓰는데 똑같이 동작한다며 뭐가 다른건지 물어봤다. 내가 알기론 문자열에서 == 는 주소값을 비교하며 equals를 사용해야 문자가 실제로 일치하는지 여부를 판단하는 걸로 알고 있다. ==를 사용했음에도 동일하게 동작한 이유는 자바 string의 특징이 immutable하고 객체 선언을 하지 않는다면 String Pool에서 동일한 값을 가져와 사용하는 것으로 알고 있는데 이게 맞는지 확인 겸 다시 찾아봤다. 코드 결과값 비교 문자열 선언 방법에는 2가지가 있다. 문자열을 그대로 선언하는 리터럴 선언 new String()을 사용한 객체 선언 이 두가지의 내용을 코드로 작성하여 ==과 equals가 나타내는 결과값을 확인하면 아래와 같다..

Develop/Java 2022.12.31

[Java/디자인패턴]Singleton/싱글톤

생성자가 여러번 호출되더라도 하나의 인스턴스만을 생성하는 패턴 장단점장점메모리 효율적다른 인스턴스와 데이터 공유공통된 객체를 여러개 생성하여 사용하기에 편리 단점객체지향의 개방-폐쇄 원칙을 위배 → 수정과 테스트 어려움사용방법선언하고자 하는 객체 private static 선언 생성자 private 선언 객체를 받아오는 메소드 public static 선언public class Car { private static Car instance = new Car(); private Car() { } public static Car getInstance() { return instance; } ... // 다른 메소드들 } public class carTest { public static void main(Str..

Develop/Java 2021.01.22