
[Java] 동기화 - synchronized와 volatile, Atomic Class에 대하여.
2022. 3. 6. 02:22
Java & Kotlin
0.🚶들어가며 자바 스레드에 대해 공부하다 동기화 관련 개념들을 알게 되었고 이 부분을 처음 접했을 때 혼란스러울 정도로 헷갈렸습니다,, 각 키워드에 대해 알 것 같다가도 다시 보면 헷갈리는 그런 상황이 반복되었습니다. 많은 내용의 글을 보다가 effective java에 나온 동시성 관련 챕터가 가장 도움이 됐던 것 같아 이를 부분적으로 인용하며 관련 개념들에 대해 글을 써보려 합니다. 각 개념의 자세한 내용이나 사용법에 대해서는 자료들이 많아 제 글에서는 다루지 않을 것이고 제가 헷갈렸던 세 개념 간의 차이를 활용 예시를 사용해 소개해볼까 합니다. 1.👫synchronized synchronized 키워드는 메서드나 블록을 한 번에 한 스레드만 수행하도록 보장해줍니다. 동기화의 대표적인 기능인 배타적..

[Java] ArrayList는 어떻게 크기가 가변적일까?
2022. 2. 23. 22:32
Java & Kotlin
0.🚶들어가며 자바에서 배열은 크기가 고정되어있습니다. 코드 작성 시 배열에 들어갈 내용을 전부 알고 있다면 배열의 크기도 예상을 할 수 있을 것입니다. 이러한 환경 속에서는 배열을 사용하는 것이 성능면에서나 메모리면에서나 효율적입니다. 하지만 많은 경우 배열에 얼마만큼의 내용이 들어갈지 전부 파악하기가 어렵습니다. Java의 Collection 중 ArrayList 클래스는 이러한 문제점을 해결해줍니다. 바로 가변적인 크기의 배열 기능을 제공해주죠. 즉, 배열로 사용하다가 크기가 부족할 시 더 큰 배열로 확장해줍니다. 이 글은 ArrayList가 어떤 방식으로 가변적인 크기의 배열 기능을 제공해주는 지에 대해 궁금하여 찾아보다 작성하게 되었습니다. 1.📖본문 배열의 크기를 확장하는 코드를 확인하려면 A..

[Java] Garbage Collection(GC)에 대하여.
2022. 2. 16. 22:57
Java & Kotlin
0.🚶들어가며 이전 글에서 JVM의 중요한 역할 중 하나가 메모리 관리라고 소개했습니다. 자바에서는 메모리 관리를 가비지 컬렉터(GC)를 사용해 자동으로 수행합니다. 이번 글에서는 GC에 대해 소개해보도록 하겠습니다. 1.💻Garbage Collection(GC)이란? 프로그램을 개발하다 보면 유효하지 않은 메모리인 가비지가 발생하게 됩니다. C언어를 이용하면 free()라는 메서드를 통해 직접 메모리를 해제해주어야 합니다. 그렇지 않으면 메모리 누수가 발생하고 이는 문제가 될 수 있습니다. 하지만 Java를 이용해 개발하는 과정에서 메모리 해제를 해보신 기억이 보통은 없으실 겁니다. 그 이유는 JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해주기 때문입니다. 메모리 관리라는 까다로운 부분을 JV..

[Java] JVM에 대하여.
2022. 2. 15. 17:01
Java & Kotlin
0. 🚶들어가며 자바 프로그램이 어떤 방식으로 실행되는지에 대해 궁금해져 검색 중 JVM이라는 키워드를 발견했고 이에 대해 정리해보고자 글을 쓰게 되었습니다. 1. 💻JVM이란 무엇인가? Write Once, Run Anywhere. JVM은 Java Virtual Machine의 약자로 자바 가상 머신이라고 부릅니다. 자바는 한번 작성하면 플랫폼에 구애받지 않고 작동되어야 한다는 표어를 내세우고 있습니다. JVM은 자바와 운영체제 사이에서 중개자 역할을 하여 운영체제에 상관없이 프로그램을 실행할 수 있도록 도와줍니다. 또한 JVM의 중요한 역할 중 하나는 메모리 관리입니다. 자바에서는 메모리 관리를 가비지 컬렉터(GC)를 사용해 자동으로 수행합니다. 이에 대한 내용 역시 다룰 것이 많아 관심이 있으시다..

[Java]✏️마커 인터페이스에 대하여.
2022. 2. 12. 21:22
Java & Kotlin
0. 들어가며🚶 String 클래스에 대하여 공부하다 String 클래스가 구현한 인터페이스 중 Serializable 이라는 인터페이스가 눈에 띄었습니다. Serializable은 직렬화를 위한 인터페이스로 객체를 파일에 저장하거나, 다른 서버로 보내거나 받거나 등의 일을 하기 위해 구현해야 하는 인터페이스라고 소개되어있습니다. public interface Serializable { } ?? 그런데 인터페이스에 아무 내용이 없죠.. 아무 내용이 없는 인터페이스가 어떤 식으로 위와 같은 기능을 제공할 수 있는지 궁금해져 찾아보니 마커 인터페이스라는 키워드를 얻을 수 있었고 이에 대해 정리해보려고 합니다. 1. 마커 인터페이스(Marker Interface)❗ 1) 마커 인터페이스(Marker Inter..

[Java] 왜 부모 클래스의 참조 변수가 자식 클래스의 메소드를 사용하지 못할까?
2022. 2. 12. 16:53
Java & Kotlin
0. 🚶들어가며 다형성에 대해 공부하다가 쉽게 이해가 되지 않는 부분이 생겼고 이에 대해 알게 된 점에 대해 글을 작성해보겠습니다. 1. 문제 ❓❓❓ 문제 상황은 다음과 같습니다. 다형성을 이용할 때 부모 클래스의 참조 변수에 자식 인스턴스를 할당해준 경우 왜 이 참조 변수가 자식 클래스만 가지고 있는 메소드는 사용하지 못하냐에 대한 물음이 생겼습니다. 좀 더 자세한 상황 설명을 위해 아래 코드를 첨부해보겠습니다. public class Test { public static void main(String[] args) { Parent p = new Child(); p.childMethod(); // 컴파일 에러가 나는 부분 } } class Parent {} // 부모 클래스 class Child ext..

[Java] public static void main(String[] args)에 대하여
2022. 2. 9. 18:35
Java & Kotlin
0. 들어가며 public class Test { public static void main(String[] args) { System.out.println("Hello World!"); } } 자바를 처음 배우면 대개 위와 같은 문장을 따라 쳐 보는 것으로 시작하곤 합니다. 또한 자바 프로그래밍을 하다보면 수없이 사용하는 문장임에도 불구하고 자세히 알아본 적이 없는 것 같아 이번 기회에 이에 대해 정리해보려 합니다. 1. 본문 public static void main(String[] args) 위 문장에 대해 알아본다라는 것은 크게 세 가지를 알아본다라고 정리할 수 있을 것 같습니다. 1. main 메소드는 무엇인가? 2. main 메소드의 매개 변수인 String[] args는 무엇인가? 3. ma..