본문 바로가기

CS12

문자열 클래스, 다양한 친구들의 이야기를 들어보자 분류 String StringBuffer StringBuilder 변경 Immutable Mutable Mutable 동기화 Synchronized 가능 (Thread-safe) Synchronized 불가능. String Class new 연산자를 사용하여 생성된 인스턴스의 메모리 공간은 변하지 않는다. (Immutable) Garbage Collector로 제거되어야 한다. 문자열 연산시 새로 객체를 만드는 Overhead가 발생한다. 객체가 불변하므로, Multithread에서 동기화를 신경쓸 필요가 없음.(조회 연산에 매우 큰 장점) 문자열 연산이 적고, 조회가 많은 Multithread 환경에서 좋다. StirngBuffer Class ,StringBuilder Class 특징 공통점 new 연.. 2021. 3. 21.
Primitive type VS Reference type , 두 친구의 이야기를 들어보자 Primitive type(기본형 타입) JAVA에서는 총 8가지의 Primitive type을 정의하고 제공한다. JAVA에서 기본 자료형은 반드시 사용하기 전에 선언하여야한다. OS에 따라 기본 자료형의 길이가 변하지 않는다. 비객체 타입이므로 null값을 가질 수 없다. 만약 Null을 가지고 싶으면 Wrapper Class를 활용한다. Stack 메모리에 저장된다. Reference type(참조형 타입) JAVA에서 Primitive type을 제외한 모든 타입은 Reference type이다. Reference type은 JAVA에서 java.lang.Object클래스를 상속하는 모든 클래스를 의미한다. new로 인하여 생성된 것들은 메모리 영역인 Heap 영역에 생성을 하게 되며, Garba.. 2021. 3. 21.
Call by value와 Call by reference, 비슷한 이름이지만 전혀 다른 두 친구 Call by value 값에 의한 호출 함수가 호출 될 때, 메모리 공간 안에서는 함수를 별도의 임시공간이 생성된다.(종료 시 해당 공간이 사라짐) Call by value 호출 방식은 함수 호출 시 전달되는 변수 값을 복사해서 함수 인자로 전달한다. 이때 복사된 함수 인자에서 지역적으로 사용되기 때문에 local value 속성을 가진다. 따라서 함수 안에서 인자 값이 변경되더라도, 외부 변수 값은 변경이 안된다. Class CallByValue{ public static void swap(int x, int y) { int temp = x; x = y; y = temp; } public static void main(String[] args) { int a = 10; int b = 20; Syste.. 2021. 3. 20.
JAVA Compile 과정, 이 일대기를 들어보자 JAVA Compiler 순서 개발자가 자바 소스코드(.java)를 작성합니다. 자바 컴파일러(Java Compiler)가 자바 소스 파일을 컴파일합니다. 이때 나오는 파일은 자바 바이트코드(.class)파일로 아직 컴퓨터가 읽을 수 없는 파일입니다. 대신 자바 가상 머신이 이해할 수 있는 코드입니다. 바이트 코드의 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있습니다. 컴파일된 바이트 코드를 JVM 클래스 로더(Class Loader)에게 전달합니다. 클래스 로더는 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data Area), 즉 JVM 메모리에 올립니다. 클래스 로더 세부 동작 로드 : 클래스 파일을 가.. 2021. 3. 20.