목록STUDY/JAVA (7)
공부해봅시당

1. 직렬화와 역직렬화란?직렬화라는 단어부터 알아보자직렬화라는 단어 자체에서 주는 생소함이 직렬화를 이해하기 어렵게 한다.따라서 직렬화라는 단어가 어떻게 나오게 되었는지부터 살펴보자. 직렬화는 Serialization이라는 영어를 한국어로 번역한 것이다.Serialization은 `Serial(연속된 무언가) + ization(~로 만들다)`이다.그래서 '어떠한 무언가'를 '연속된 무언가'로 바꿔주는 작업이 Serialization이 되는 것이다. 그렇다면 자바의 직렬화, 즉 Serializable에서는 '어떠한 무언가'와 '연속된 무언가'가 무엇일까?Java에서 사용되는 `Object나 Data`가 `어떠한 무언가`이고,`바이트 스트림(stream of bytes)`이 `연속된 무언가`이다.바이트 스트..

1. 제네릭(Generic)이란? 자바 제네릭은 generic 타입 및 메소드를 정의하고 사용 할 수 있는 언어적 특성 List list = new ArrayList(); Map map = new HashMap(); 위와같이 꺽쇠()안에 클래스 타입이 명시된 패턴을 자주 발견할 수 있다. 이걸 제네릭(Generic) 이라고 부르며, 제네릭 파라미터는 꺽쇠안에 포함하여 전달한다. 특징 - 파라미터 타입이나 리턴 타입에 대한 정의를 외부로 미룸 - 타입에 대해 유연성과 안정성을 확보함 - 런타임 환경에 아무런 영향이 없는 컴파일 시점의 전처리 기술 2. 제네릭을 왜 사용할까? 타입을 유연하게 처리하며, 잘못된 타입 사용으로 발생할 수 있는 런타임 타입 에러를 컴파일 과정에 검출한다. 자바 컴파일러는 코드에서..

0. 자바의 Class 클래스 (java.lang.Class) 자바 프로그래밍을 할때 우리는 보통 변수나 클래스를 직접 선언하고 만들어 사용해 왔다. 그런데 어떤 경우에는 애플리케이션 실행 중에서 클래스를 동적으로 불러와 다루어야 할 경우가 생긴다. 즉, 코드를 실행하기 전 컴파일 단에서 개발자가 직접 폴더를 뒤져가며 클래스 정의문을 찾아 클래스 정보를 얻는 것이 아닌, 코드 상에서 호출 로직을 통해 클래스 정보를 얻어와 다룸으로써 런타임 단에서 다이나믹하게 클래스를 핸들링 하는 것이다. 이때 사용되는 것이 바로 Class 클래스 객체이다. Class 클래스는 java.lang.Class 패키지에 별도로 존재하는 독립형 클래스로서, 자신이 속한 클래스의 모든 멤버 정보를 담고 있기 때문에 런타임 환경에서..

이 글에서는 상호배제를 통한 동기화를 알아볼 것이다. 1. 동기화란? 동기화는 프로세스(스레드)가 수행되는 시점을 조절하여 서로가 알고 있는 정보가 일치하는 것인데, 쉽게 말해 프로세스 간 데이터가 일치하도록 하는 것이다. 2. 상호배제란? - 동기화 매커니즘 2-1. 의미 이러한 동기화 매커니즘인 상호배제는 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구하는 것이다. 쉽게 말해 하나의 프로세스가 공유자원을 사용할 때 다른 프로세스가 동일한 공유자원에 접근할 수 없도록 통제하는 것을 뜻한다. 2-2. 상호배제 방법 Mutex, Semaphore 방식이 사용된다. Java 에서는 Monitor 라는 도구를 통해 객체에 Lock 을 걸어 상호배제를 할 수 있다. Monitor 를 사용하면 어떤 ..

1. Garbage Collection(가비지 컬렌션)이란? 1-1. Garbage Collection(가비지 컬렉션)이란? 프로그램을 개발 하다 보면 유효하지 않은 메모리인 가비지(Garbage)가 발생하게 된다. C언어를 이용하면 free()라는 함수를 통해 직접 메모리를 해제해주어야 한다. 하지만 Java나 Kotlin을 이용해 개발을 하다 보면 개발자가 메모리를 직접 해제해주는 일이 없다. 그 이유는 JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해주기 때문이다. 대신 Java에서 명시적으로 불필요한 데이터를 표현하기 위해서 일반적으로 null을 선언해준다. 예를 들어 아래와 같은 코드가 있다고 가정하자. Person person = new Person(); person.setName("M..

아래 글을 참고하여 작성함 https://gyoogle.dev/blog/computer-language/Java/%EC%BB%B4%ED%8C%8C%EC%9D%BC%20%EA%B3%BC%EC%A0%95.html [Java] 컴파일 과정 | 👨🏻💻 Tech Interview [Java] 컴파일 과정 들어가기전 자바는 OS에 독립적인 특징을 가지고 있다. 그게 가능한 이유는 JVM(Java Vitual Machine) 덕분이다. 그렇다면 JVM(Java Vitual Machine)의 어떠한 기능 때문에, OS에 독립적으로 gyoogle.dev 자바는 OS에 독립적인 특징을 가지고 있음 그게 가능한 이유는 JVM(Java Vitual Machine) 덕분 JVM(Java Vitual Machine)의 어떠한 ..

기본 개념 먼저, 혹시나 String을 기본 자료형으로 생각하고 있을 분들을 위해! String은 기본 자료형이 아닌, 클래스이다! (참고로 기본 자료형은 정수형(byte, short, int, long), 실수형(float, double), 문자형(char), 논리형(boolean)으로 이루어져 있다) 따라서 우리는 String을 초기화할 때 String a = "Hello"; // 이렇게 쓰기도 하지만 String b = new String("Hello"); // 이렇게 쓸 수도 있다! 지금부터 우리가 살펴볼 String, StringBuffer, StringBuilder는 이러한 점에서 모두 클래스라는 공통점을 가지고 있다. 따라서 String과 StringBuffer, StringBuilder는 ..