☕️ Java

String Constant Pool에 대해 살펴보기 전에, 다음 하나만 참고하시라고 적어두고 시작하겠습니다. 문자열 리터럴을 통해 문자열을 생성하는 방식은 다음과 같습니다. String str = "literal";//여기서 "literal"이 리터럴 이제 시작하겠습니다. String Constant Pool String은 Java에서 가장 많이 사용되는 클래스입니다. 지금부터 JVM에서 String을 저장하는 특수한 메모리 영역인 String Constant Pool에 대해서 살펴보겠습니다. String 재사용(Interning) Java에서 String은 불변(immutable) 객체입니다. 이 덕분에 JVM은 String Constant Pool에 각 문자열 리터럴의 복사본을 하나만 저장하여, 문..
참.. 공부를 하면 할수록 그동안 몰랐던게 계속해서 튀어나옵니다.. 저는 지금까지 String만 예외적으로 new String을 조금 편하게 쓸 수 있도록 해주고, 나머지 동작방식은 동일하다고 생각했습니다 그런데 전혀 아니었습니다. 지금부터 자바에서의 String에 대해서 알아가 보도록 하겠습니다. 우선 아래 코드에서 몇개의 객체가 생성이 될 지 한번 생각해보고 진행하도록 하겠습니다. public class StringTest { public static void main(String[] args) { String str1 = new String("Hi"); String str2 = "Hi"; String str3 = "Hi"; } } 당연히 3개의 객체가 만들어지지 않을까??? 라고 생각했었는데, 사실..
상수 (Constant) 상수는 변수와 마찬가지로 '값을 저장할 수 있는 공간'이다. 그러나 변수와는 다르게 한 번 값을 저장하면, 다른 값으로 변경할 수 없다. 상수를 정의할 때는 final 키워드를 이용하여 정의한다. final int MAX_SPEED = 100; 상수는 선언과 동시에 초기화 할 필요는 없다. 초기화 하는 방법을 알아보자. 인스턴스변수로 사용된 상수 초기화 public class Constant { final int MAX_SPEED=100; final int MIN_SPEED; final int AVERAGE_SPEED; //초기화 블럭에서 초기화 { MIN_SPEED = 10; } //생성자에서 초기화 public Constant(int AVERAGE_SPEED) { this.A..
아침에 일어나 보니 제가 들어가 있는 '개발바닥'이라는 오픈카톡방에서 어떤 한 분이 다음과 같은 글을 올리셨습니다. 혹시 상속관계에서 왜 static 메서드는 오버라이딩이 되지 않는지 정확히 아시는 분 계신가요,, 제가 JVM구조를 보면서 공부한 바로는 static은 Method Area에 저장이 되고, 객체는 Heap 영역에 저장이 됩니다. 그렇다면 부모에서 정의한 static 메서드(자식에게도 같은 이름의 static 메서드 정의함)는 객체가 생성되기 전에 Method Area에 들어가는거겠죠? 이제 자식 객체를 생성하고 static 메서드를 호출하면 부모의 method가 나오게 됩니다 이건 오버라이딩이 아니라 hiding이라고 하는 것까지 알고 있습니다. 그렇다면 자식이 같은 static 메서드를 ..
자바 컴파일러 (Java compiler) 자바 컴파일러는 자바를 가지고 작성한 자바 코드를 자바 가상머신(JVM)이 이해할 수 있는 자바 바이트코드로 변환하는 역할을 수행한다. '.java' 파일을 '.class' 파일로 변환하는 것이다. 자바 컴파일러는 자바를 설치하면 javac.exe 라는 실행 파일의 형태로 설치된다. 자바 바이트코드 바이트코드란? 특정 하드웨어가 아닌 가상 컴퓨터에서 작동하는 실행 프로그램을 위한 이진 표현법. 자바 바이트코드란 자바 가상 머신(JVM)이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미한다. 자바 바이트코드의 확장자는 .class 이며, 자바 바이트 코드는 자바 가상 머신(JVM)이 설치되어 있다면 어떠한 운영체제에서도 실행될 수 있다. JVM JVM(Jav..
시작하기에 앞서 자바에서 일반적으로 구성되는 메모리의 구조는 다음과 같습니다. 일반적으로 메모리는 크게 stack과 heap 두 파트로 나누어집니다. 이 둘에 대해서 자세히 알아보도록 하겠습니다. Stack 스택 프레임(혹은 Activation Record)을 저장하는 메모리 공간입니다. 스택 프레임은 메서드가 호출되기 이전의 상태를 기록하는 역할을 수행하며, 다음과 같은 내용들을 포함합니다. 매개 변수(Parameter) : 호출 메서드가 전달한 인자 값 지역변수(Local Variables) : 메서드내에서 선언한 변수 리턴 주소(Return Address) : 메서드실행을 마친 다음 실행할 명령문의 주소 리턴 값(Return Value) : 호출 메서드에게 돌려줄 값 즉 메서드 내에서 정의하는 기본..
정적 팩터리와 생성자에는 똑같은 제약이 하나 있다. 바로 선택적 매개변수가 많을 때 적절하게 대응하기가 어렵다는 것이다. 점층적 생성자 패턴을 사용할 수 있지만, 매개변수의 개수가 많아질수록 클라이언트 코드를 작성하기에도, 읽기에도 어렵다. 코드를 읽을 때 각 값의 의미가 무엇인지 헷갈릴 것이고, 매개변수가 몇 개인지도 주의해서 세어보아야 할 것이다. 이럴 때 대안으로는 자비빈즈 패턴(JavaBeans pattern)이 있다. 매개변수가 없는 생성자로 객체를 만든 후, 세터를 이용해서 원하는 매개변수의 값을 설정하는 방식이다. 그러나 이러한 방식은 또 다른 단점을 지니는데, 객체 하나를 만들려면 메서드를 여러개 호출해야 하고, 객체가 완전히 생성되기 전까지는 일관성(consistency)이 무너진 상태에..
프로세스? 쓰레드? 프로세스란 실행 중인 하나의 애플리케이션을 의미하고, 쓰레드란 한 프로세스 내에서 동작하는 여러 실행 흐름을 의미한다. 여러개의 쓰레드가 동시에 작동하는 것이 멀티 쓰레드이며, 멀티 쓰레드를 사용할 때에는 동기화(Synchronization)나 교착상태(Deadlock)와 같은 문제들이 발생할 수 있다. 여러개의 쓰레드가 자원을 공유해서 사용해도 괜찮을 수 있지만, 심각한 오류를 발생시키는 경우가 있다. 이럴 때 쓰레드들이 자원에 동시에 접근하는 것을 막기 위해서 synchronized라는 키워드를 사용해서 쓰레드들의 동기화 문제를 해결할 수 있다. 그러나 synchronized 키워드는 프로그램 성능에 굉장히 악영향을 미친다. ThreadLocal ThreadLocal은 자바의 cl..
말 랑
'☕️ Java' 카테고리의 글 목록 (6 Page)