[Kotlin] 코틀린에서의 제네릭에 대하여.
2023. 8. 31. 01:09
Java & Kotlin
0. 들어가며 🏃🏻♂️ 이번 글은 코틀린에서의 제네릭과 관련된 내용을 정리해보려합니다. 제네릭과 공변에 대한 내용은 한번 제대로 정리해보고 싶었는데 마침 코틀린 인 액션을 읽고 코틀린의 제네릭에 대해 배우게 되었습니다. 자바와 비슷하면서도 다른 기능들을 제공해주는데 제네릭 개념과 함께 이를 정리해보겠습니다. 본 글은 자바 혹은 코틀린 제네릭에 대한 문법정도는 알고 읽어야 도움이 되실 것 같습니다. 1. 들어가기 전 코드 베이스 설명 제네릭과 공변 관련 개념을 설명하기위해 본 글에서는 아래와 같은 코드를 예시로 사용하려 합니다. 간단한 코드이니 한번 살펴봐주세요! // 동물 open class Animal(val name: String) // 포유류 open class Mammal(name: String..
[Kotlin] Kotlin In Action을 읽고나서.
2023. 8. 22. 16:51
Java & Kotlin
0. 들어가며🏃🏻♂️ 최근 여러 회사들의 기술 스택을 보면 자바 대신 코틀린을 사용하는 경우가 많이 있는 것 같습니다. 저 또한 회사에서 코틀린을 사용하고 있는데 과연 내가 코틀린스럽게 사용하고 있는걸까? 라는 의문이 드는 순간들이 많았던 것 같습니다. 이에 코틀린 컴파일러 개발자가 직접 썼다는 Kotlin In Action을 읽어보았고, 이에 대한 내용과 생각을 정리해보려 합니다. 1. 코틀린에 대하여😎 많은 자바 개발자들이 자바에 익숙했음에도 불구하고 코틀린으로 기술 스택을 변경해나가는 이유가 무엇일까 궁금했습니다. 이를 알기 위해서는 코틀린의 특징, 철학 등에 대해 먼저 알아보아야 할 것 같은데요. 코틀린 공식문서와 Kotlin In Action에서 설명하는 코틀린을 제 나름대로 요약, 정리해보면..
[Java] Arrays.asList 와 List.of 의 차이점에 대하여.
2023. 3. 9. 18:20
Java & Kotlin
0. 들어가며 🏃🏻♂️ 자바에서는 간단하게 List를 초기화하려할때 Arrays.asList, List.of와 같은 메서드의 도움을 받기도 합니다. 두 메서드는 비슷한 역할을 하는 것 같은데 차이점이 무엇인지에 대해 궁금증이 생겨 글을 정리하게 되었습니다. 1. Arrays.asList 메서드 Arrays.asList는 자바 1.2에서 생긴 메서드로 List 객체를 보다 편하게 생성할 수 있도록 도와주는 메서드입니다. 사용법은 간단하므로 예시를 통해 알아보도록 하겠습니다. // 사용법1 List asList = Arrays.asList(1, 2, 3, 4); System.out.println("asList = " + asList); // asList = [1, 2, 3, 4] // 사용법2 Intege..
[Java] Enum에 대하여.
2022. 10. 13. 23:05
Java & Kotlin
0. 들어가며🏃 지난 글에서 상수를 관리하는 방법으로 유틸리티 클래스를 사용하는 방식을 살펴보았습니다. [Java] 상수들을 관리하는 방법에 대하여. 0. 들어가며🏃 코드를 작성하다 보면 상수를 정의하는 경우가 많이 있습니다. 저 역시 최근 자바 코드를 작성하면서 상수들을 하나하나 정의하다 보니.. 그 수가 많아져 이를 관리해야할 필요성 kjhoon0330.tistory.com 상수를 선언하기 위한 유틸리티 클래스는 직관적이고 그럴듯해 보이지만 몇몇 상황에서 불편한 점이 있습니다. 예시 코드를 통해서 한번 살펴보도록 하죠. class Fruit { // 정수 열거 패턴 static final int APPLE = 1; static final int GRAPE = 2; static final int STR..
[Java] 상수들을 관리하는 방법에 대하여.
2022. 9. 17. 00:27
Java & Kotlin
0. 들어가며🏃 코드를 작성하다 보면 상수를 정의하는 경우가 많이 있습니다. 저 역시 최근 자바 코드를 작성하면서 상수들을 하나하나 정의하다 보니.. 그 수가 많아져 이를 관리해야할 필요성을 느끼게 되었습니다. 상수를 어떻게 관리하면 좋을지 고민하다가 도움이 된 자료들이 있어 이번 글에서는 이에 대한 내용을 정리해보려 합니다. 1. 상수를 관리하는 방법 중 안티 패턴💀 우선 자바에서 상수를 관리하는 방법 중 안티 패턴으로 알려진 몇 가지 방법을 먼저 소개하겠습니다. 1) Magic Number if (nubmer == 3.1415) {...} // 3.1415 => Magic Number 위 코드의 3.1415 같은 수를 Magic Number라고 칭하는데 위와 같이 코드를 작성하면 다음과 같은 문제들이..
[Java] var 키워드에 대하여.
2022. 8. 20. 03:28
Java & Kotlin
0. 들어가며🚶 Java 10부터 도입된 var에 대해 존재는 알고 있었는데 이를 좀 더 정리해볼 시간을 가지고 싶어 이번 글을 작성하게 되었습니다. var에 대해 찾아보니 이를 반대하는 사람도 있고 장점에 대해 말하는 사람들도 있어 왜 정적 타입 언어인 Java에 var 키워드를 도입했는지, 사용 예시는 어떤게 있는지 등에 대해 알아보도록 하겠습니다. 1. var 사용 예시📚 Java 10부터 지역 변수에 대한 Type Inference가 가능한 var 키워드를 제공해줍니다. Type Inference는 제네릭이나 람다식에서도 찾아볼 수 있는데, 타입을 생략하여도 이를 문맥상 충분히 알 수 있으면 컴파일러가 타입을 추론해주는 것을 말합니다. 말로만 설명하면 안와닿을 수 있으니 코드로 살펴보겠습니다. /..
[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 키워드는 메서드나 블록을 한 번에 한 스레드만 수행하도록 보장해줍니다. 동기화의 대표적인 기능인 배타적..