[Java] ClassName.class가 뭐지..?
2022. 3. 23. 00:55
Java & Kotlin
0.🚶들어가며 스프링 공부를 시작하며 아래와 같은 코드를 마주쳤습니다. 스프링 컨테이너에 관한 코드인데 가장 오른쪽을 살펴보면 AppConfig.class 라는 인자를 넘겨주고 있는 모습을 볼 수 있었습니다. 이때 AppConfig.class가 뭐지..? 라는 생각이 들었습니다. 그리고 다음과 같은 사고과정을.. 거쳐갔습니다. AppConfig.class 라고 쓰는 걸 보니 AppConfig의 static 변수인가? AppConfig는 내가 만든 클래스인데 그럼 부모 클래스인 Object 클래스에 저런 static 변수가 있었던가? Object 클래스에 저런 static 변수가 없는데..? 1.Class Literal 관련된 내용을 검색하다보니 위와 같은 키워드를 얻을 수 있었고, Oracle docs에..
[Java] 람다식과 스트림 - (1) 람다식 기본
2022. 3. 11. 04:04
Java & Kotlin
0.🚶들어가며 자바는 JDK1.5에서 추가된 제네릭으로 한 번, JDK1.8에서 추가된 람다식의 등장에서 또 한 번 큰 변화가 생겼다고 합니다. 람다식의 도입으로 객체지향 언어였던 자바는 함수형 언어의 기능까지 갖추게 된 것이죠. 개인적으로 자바스크립트의 Arrow Function과 고차 함수가 매우 마음에 드는 기능이라고 생각했었는데요. 자바에서도 람다식과 스트림이라는 개념으로 비슷한 기능을 제공해준다는 사실이 매우 반가웠고, 이를 소개하기 위해 글을 써보려합니다. 1.📕람다식이란? 람다식은 메서드를 하나의 "식"으로 표현한 것입니다. 파이썬이나 자바스크립트와 비교한다면 자바는 메서드 하나를 정의하는 과정이 상당히 귀찮습니다. 람다식은 자바의 메서드 정의 과정을 굉장히 간편하게 해주고, 적절히 사용한다..
[Java] List 정렬에 대하여.
2022. 3. 6. 22:22
Java & Kotlin
0.🚶들어가며 자바에서 List를 정렬하는 방법에 대해 찾아보다가 추가적인 몇몇 개념들을 살펴보게 되었습니다. List를 정렬하는 방법, Comparable과 Comparator 인터페이스에 대해 글을 써보고 자바 List 정렬 방식인 tim sort에 대해 알아볼 수 있도록 잘 정리된 블로그 글을 소개해보도록 하겠습니다. 1.📚List를 정렬하는 방법 자바의 List를 정렬하는 방법에는 크게 두 가지가 있었습니다. 1) Collections 클래스의 static 메서드인 sort()를 사용하는 방법 사용 방법 먼저 살펴보도록 하겠습니다. public class SortingDemo { public static void main(String[] args) { List list = new ArrayList..
[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..