JAVA/JAVA Basic 43

[JAVA] String, StringBuffer, StringBuilder의 차이

String, StringBuffer, StringBuilder의 차이를 정리하면 아래와 같다. String은 불변객체이고 StringBuffer, StringBuilder는 가변객체이다. StringBuffer는 멀티스레드 환경에서 사용되고 StringBuilder는 싱글스레드 환경에서 사용된다. 왜 이런 차이를 보이는 것일까? String이 불변객체인 이유 String이 불변객체인 이유는 JAVA가 문자열 리터럴을 String Constant Pool로 관리하기 때문이다. "안녕하세요", "반갑습니다.", "hello" 처럼 선언된 문자열은 문자열 리터럴로 간주되어 Heap 메모리 안에 생성된 String Constant Pool에 문자열 객체로 등록된다. 스레드A가 "안녕하세요" 문자열 객체를 리터..

JAVA/JAVA Basic 2024.02.23

[JAVA] Garbage Collector 동작원리

JAVA와 C, C++의 가장 큰 차이 중 하나는 가비지 컬렉터(Garbage Collector) 이다. JVM의 스레드는 Stack 영역에 독립된 공간을 가지고 Heap 영역은 공유한다. 그래서 가비지 컬렉터 스레드가 Heap 영역의 생성된 객체에 접근하여 제거할 수 있다. 이런 구조는 C/C++도 마찬가지이지만, C/C++은 가비지 컬렉터를 가지고 있지 않다. 왜냐하면 가비지 컬렉터는 치명적인 단점을 가지고 있기 때문이다. 가비지 컬렉터는 Mark-Sweep-Compaction 과정을 거쳐 객체를 제거한다. Mark 전역 메모리 영역, 스택 영역의 참조변수에서 접근할 수 있는 객체는 reachable, 접근할 수 없는 객체는 unreachable로 표시(Mark)한다. Sweep unreachable..

JAVA/JAVA Basic 2024.02.23

[JAVA] JDK 동작원리

JDK( Java Develoment Kit ) JDK는 자바 컴파일 도구(javac) , 자바 실행 환경 ( JRE ) , 자바 실행 머신 ( JVM )이 합쳐진 도구이다. JAVA 언어로 개발하려면 JDK가 필요하지만 단순히 실행만 한다면 JRE만 있어도 된다. 그럼 이제 JDK는 어떻게 동작하는지 구체적으로 알아보자. 객체지향언어, JAVA C,C++은 절차지향언어지만 JAVA는 객체지향언어이다. 절차지향언어는 코드의 '순서'가 중요하므로 코드 전체가 유기적으로 연결되어 있다. 그래서 메모리에 올라갔을 때의 주소도 논리적으로 이미 정해져 있다. 이를 '정적바인딩'이라 부른다. C,C++은 컴파일(compile)을 하면 컴퓨터가 이해할 수 있는 언어인 어셈블리어로 바로 변환된다. 이미 메모리 위치까지..

JAVA/JAVA Basic 2024.02.22

[JAVA] 어노테이션( Annotation )의 속성

[JAVA] 어노테이션( Annotation )이란? (1) 어노테이션(Annotation)은 무엇일까? 어노테이션은 '주석'이다. JVM이 읽는 주석이다. 주석이 필요한 이유가 무엇일까? 철학책과 과학책이 있다. 과학책은 과학코너로 철학책은 철학코너로 분류하고 lordofkangs.tistory.com 이전 포스팅에서 어노테이션의 개념을 알아보았다. 이번 포스팅에서는 어노테이션의 속성을 다루어보겟다. 어노테이션의 속성 어노테이션은 '특정한 로직'이 처리되어야 하는 대상에 남기는 '표시'이다. '표시'를 남길 때, 단순히 '@' 하나로만 남기면 구체적인 정보를 제공할 수 없다. 조금 더 세밀한 작업을 위해서는 구체적인 데이터를 담아야 하는데, 어노테이션의 속성이 그 역할을 한다. 속성은 추상메소드로 구현..

JAVA/JAVA Basic 2023.05.29

[JAVA] 어노테이션( Annotation )이란?

어노테이션(Annotation)은 무엇일까? 어노테이션은 '주석'이다. JVM이 읽는 주석이다. 주석이 필요한 이유가 무엇일까? 철학책과 과학책이 있다. 과학책은 과학코너로 철학책은 철학코너로 분류하고 싶다. 그런데 철학책과 과학책은 외관으로 구분하기 어렵다. 그래서 색상 인식 분류기를 하나 구매했다. 색상인식분류기가 구분할 수 있도록 과학책 오른쪽 상단에 '파란원' 표시를 남겼다. 파란원이 있는 책은 과학코너로 분류되어야 한다. 어노테이션은 '파란원'과 같다. 클래스는 모두 구조가 같다. 모두 필드와 메소드로 구성되어 있다. 외관으로는 구분이 안되나 클래스의 목적은 제각기 다르다. 그래서 개발자는 처리를 달리하고 싶은 대상에 어노테이션을 표시해 JVM에게 알려준다. @Entity @Entity publ..

JAVA/JAVA Basic 2023.05.29

[ JAVA ] InputStreamReader : 인코딩

[ JAVA ] 기반 스트림, 보조 스트림 [ JAVA ] 스트림이란? ( 바이트 기반 스트림 , 문자 기반 스트림 ) 스트림(Stream)에 대해서 파헤쳐보자. [ JAVA ] 문자 인코딩(Character Encoding)이란? 인간과 컴퓨터가 대화하려면 어떻게 할까? 인간의 언 lordofkangs.tistory.com 지난 포스팅에서 바이트 스트림의 기반스트림과 보조스트림의 개념을 알아보았다. 개인적으로 문자스트림에서 가장 중요한 클래스는 InputStreamReader 클래스라 생각한다. Reader 추상클래스는 유니코드 문자를 읽기 위해 존재한다. 그러나 인코딩에는 다양한 방식이 존재한다. 인코딩의 종류마다 문자를 표현하는 바이트 수도 다르다. UTF-8 인코딩은 한글을 3byte로 표현하고 ..

JAVA/JAVA Basic 2021.07.12

[ JAVA ] 기반 스트림, 보조 스트림

[ JAVA ] 스트림이란? ( 바이트 기반 스트림 , 문자 기반 스트림 ) 스트림(Stream)에 대해서 파헤쳐보자. [ JAVA ] 문자 인코딩(Character Encoding)이란? 인간과 컴퓨터가 대화하려면 어떻게 할까? 인간의 언어는 문자, 이미지, 동영상, 소리 등이 있다. 그러나 컴퓨터는 1 lordofkangs.tistory.com 지난 포스팅에서 스트림(Stream)에 대해서 알아보았다. 간단히 정리하면 데이터는 스트림의 형태로 전송된다. 스트림(Stream)이란, 바이트의 흐름을 의미한다. 프로그램은 외부의 데이터를 스트림의 형태로 입출력한다. 이때, 1byte는 아스키코드 문자와 이미지, 영상 데이터의 기본 단위가 된다. 그러므로 1byte 단위로 스트림을 읽을 필요가 있는데, 이때..

JAVA/JAVA Basic 2021.07.12

[ JAVA ] 스트림이란? ( 바이트 기반 스트림 , 문자 기반 스트림 )

스트림(Stream)에 대해서 파헤쳐보자. [ JAVA ] 문자 인코딩(Character Encoding)이란? 인간과 컴퓨터가 대화하려면 어떻게 할까? 인간의 언어는 문자, 이미지, 동영상, 소리 등이 있다. 그러나 컴퓨터는 1과 0밖에 모른다. 그러므로 우리는 문자, 이미지, 동영상, 소리를 1과 0에 대응 lordofkangs.tistory.com [ JAVA ] JVM이 문자열을 UTF-16 방식으로 저장하는 이유 포스팅 전 이 글은 아래 사이트 글을 토대로 한 저의 추측임을 알립니다. Why Java char uses UTF-16? Recently I read lots of things about Unicode code points and how they evolved over time and ..

JAVA/JAVA Basic 2021.07.08

[ JAVA ] JVM이 문자열을 UTF-16 방식으로 저장하는 이유

포스팅 전 이 글은 아래 사이트 글을 토대로 한 저의 추측임을 알립니다. Why Java char uses UTF-16? Recently I read lots of things about Unicode code points and how they evolved over time and sure I read http://www.joelonsoftware.com/articles/Unicode.html this also. But something I couldn't find... stackoverflow.com 윈도우는 기본적으로 MS사가 자체 개발한 EUC-KR의 확장형인 MS949 인코딩 방식을 사용한다. 그래서 윈도우 OS에 설치된 이클립스는 파일 인코딩 방식이 디폴트로 MS949가 지정되어 있다. ( ..

JAVA/JAVA Basic 2021.07.06

[ JAVA ] 문자 인코딩(Character Encoding)이란?

인간과 컴퓨터가 대화하려면 어떻게 할까? 인간의 언어는 문자, 이미지, 동영상, 소리 등이 있다. 그러나 컴퓨터는 1과 0밖에 모른다. 그러므로 우리는 문자, 이미지, 동영상, 소리를 1과 0에 대응하여 표현해야 한다. 문자표(Character Set) 특히 문자를 1과 0으로 표현하려면 문자표가 있어야 한다. 대표적인 문자표는 '아스키 코드표'가 있다. 아스키 코드표는 7bit가 만들어 낼 수 있는 이진수 조합을 문자와 대응한 표이다. 총 128가지 표현 가능하다. 하지만 128가지는 영어 알파벳 표현에는 문제 없지만 세계 각국의 문자 표현은 불가능하다. 그래서 탄생한 것이 16bit를 활용한 유니코드이다. 유니코드는 16bit이기에 216가지, 즉 65536가지 문자 표현이 가능하다. 16비트 고정폭..

JAVA/JAVA Basic 2021.07.05