전체 글

전체 글

    [Java] 배열(Array) vs. 배열리스트(ArrayList) vs. 연결리스트(LinkedList)

    [Java] 배열(Array) vs. 배열리스트(ArrayList) vs. 연결리스트(LinkedList)

    들어가며 본 글에서는 같은 타입의 데이터를 많이 다룰 때 사용하는 자바의 순차적 자료구조 배열(Array)과 리스트(List), 특히 배열 리스트(ArrayList)와 연결 리스트(LinkedList)에 대해 비교해보겠습니다. 자료구조 측면에서 접근하는 글이므로 코드로 배열이나 리스트를 어떻게 사용하는지는 구체적으로 적지 않겠습니다. 아울러 메모리 구조나 물리적/논리적 주소, 시간복잡도 등에 대한 내용이 나오는데, 분량이 너무 많아질 것 같아서 구체적인 설명은 기재하지 않은 점 참고 바랍니다. 글 내용에서 잘못된 점이 있을 경우 언제든 피드백을 남겨주세요. 언제든 피드백 대환영입니다 :) 배열 (Array) | 기본 개념 배열이란 같은 데이터 타입의 변수들로 이루어진 자료구조로, 자바에서 기본적으로 지원..

    [Java] gradle 환경에서 JMH를 사용하여 벤치마킹하기

    [Java] gradle 환경에서 JMH를 사용하여 벤치마킹하기

    들어가며 최근에 진행했던 프로젝트에서 사용했던 메서드의 성능을 개선시킨 것 같은데, 정확히 얼마나 성능이 향상된 것인지 비교를 해보고 싶었습니다. 메서드 수행 시간을 측정하기 위해 여러 레퍼런스를 찾아봤는데, 그중에서 JMH(Java Microbenchmark Harness)을 활용하는 것이 가장 현대적이고 효율적이라고 생각되었습니다. 본 글에서는 gradle 환경에서 JMH를 활용하여 유닛 단위로 벤치마킹하는 방법에 대해 정리하겠습니다. 구글링해보면 대개 maven 환경에서 JMH를 많이 사용하고, gradle 환경 기반의 JMH 환경 설정 글은 별로 없었습니다. 그래서 gradle 환경에서 최대한 간단하게 JMH 환경 설정하는 방법을 적고자 했습니다. 개발 환경은 다음과 같습니다. OS : Windo..

    [Java] 람다식에서 메서드 참조/생성자 참조 사용법

    [Java] 람다식에서 메서드 참조/생성자 참조 사용법

    들어가며 Java 8 이상에서 람다식을 사용할 때 콜론 2개를 사용하는 경우가 있습니다. 이를 메서드 참조(Method Reference) 혹은 이중 콜론 연산자(::)라고 표현하는데요. 정식 명칭은 메서드 참조입니다. 그러면 메서드 참조는 어떨 때 사용할 수 있는 것인지, 그리고 어떻게 사용하는 것인지 간단하게 알아보겠습니다. 메서드 참조는 언제, 어떻게 사용할 수 있을까 메서드 참조는 람다식에서 파라미터의 중복을 피하기 위해 사용합니다. 파라미터가 중복되지 않았다면 메서드 참조 표현식은 사용 불가능합니다. 코드로 바로 보겠습니다. 인스턴스의 메서드를 참조하는 경우 public class Main { public static void main(String[] args) { List memberList ..

    [Spring] 의존성 주입(Dependency Injection) 개념

    [Spring] 의존성 주입(Dependency Injection) 개념

    들어가며 본 글에서는 Spring과 OOP에서 중요하게 다루는 의존성 주입(Dependency Injection)이 무엇이고, 왜 필요하며, 의존성 주입을 활용했을 때 이점은 무엇인지 살펴보겠습니다. 의존성 주입이란? A 객체가 B 객체를 사용할 때, "A 객체는 B 객체에 의존한다" 혹은 "A 객체는 B 객체의 의존성을 가진다"라고 표현합니다. 여기서 A 객체가 B 객체를 사용하는 방법은 두 가지가 있습니다. 미리 말씀드리자면 두 번째 방법처럼 객체 외부에서 다른 객체의 의존을 주입해주는 것을 의존성 주입이라고 합니다. | 1. A 객체 내부에서 B 객체를 직접 생성한다. 객체 A 안에서 new를 활용하여 객체 B의 인스턴스를 직접 만들고 B를 활용하는 방식입니다. 이러한 의존 관계를 강한 결합이라고 ..

    생활스터디 엑셀 양식(구글 스프레드시트) 공유

    생활스터디 엑셀 양식(구글 스프레드시트) 공유

    결론적으로는 소수의 지인들과 함께 엑셀을 활용하여 생활스터디를 하게 되었습니다. 급하셔서 생활스터디 엑셀 양식만 필요하신 분들은 아래 '구글 스프레드시트를 활용한 생활스터디' 챕터로 가주세요! 들어가며 작년부터 다양한 사람들과 다양한 방식으로 생활스터디를 꾸준히 해오고 있습니다. 챌린저스, 카카오 프로젝트 100 같은 앱을 활용해보기도 하고, 직접 카카오톡과 인스타그램을 통해 인증하는 방식으로 진행해봤습니다. 이렇게 다양한 플랫폼과 방식을 활용해서 생활스터디를 해보니까 각각 일단 일장이 있었습니다. 챌린저스에 대한 설명을 길게 하긴 그렇지만, 간단히 말씀드리면 일반적으로 익명의 다수가 하나의 미션을 위해 돈을 선납하고 미션 달성률에 따라 환급받고 100% 달성할 경우 추가로 선납한 금액의 일부 비율만큼 ..

    Intellij에서 WSL2 터미널 환경 설정

    Intellij에서 WSL2 터미널 환경 설정

    들어가며 윈도우 상에서 IntelliJ를 사용할 경우 기본 터미널은 cmd입니다. 이를 WSL2로 바꿔보겠습니다. 혹시 WSL2를 사용하지 않고 있는 분들은 WSL2을 사전에 설치해주셔야 하니 여기를 참고해주시면 되겠습니다. IntelliJ에서 터미널을 WSL2로 바꾸기 1. IntelliJ 상단 메뉴에서 File - Settings - Tools - Terminal 2. Application Settings의 Shell path를 cmd.exe 에서 wsl.exe로 변경하고 Apply, OK 누르기 3. Alt + F12를 눌러서 터미널창 켜보기. 그러면 아래와 같이 이상한 글자가 보이고, 우측에 시간도 깨져서 나오는 것을 볼 수 있습니다. 4. 경로 앞에 이상한 글자가 보이는 것은 IntelliJ의 ..

    Ubuntu에서 CMake 설치 방법

    Ubuntu에서 CMake 설치 방법

    들어가며 본 글은 WSL2 Ubuntu 20.04LTS 버전에서 CMake를 설치 및 업데이트하는 방법에 대한 내용입니다. WSL2가 아니더라도 Ubuntu면 모두 동일하게 이 방법을 적용할 수 있습니다. | 주의 사항 CMake는 일반적인 패키지들과는 달리 sudo apt update cmake과 같은 명령어로 업데이트가 불가능합니다. 따라서 기존에 CMake가 설치되어 있으신 분들 중 업데이트를 희망하신다면, 아래 명령어를 통해 기존에 설치되어 있는 CMake를 제거해주시고 본 글의 설치 방법을 따라가주세요. sudo apt purge cmake | 사전 요구사항 CMake를 설치하기 이전에 설치되어 있어야 하는 패키지는 다음과 같습니다. wget build-essential openssl 만약 wg..

    [Java] 객체와 클래스, 인스턴스 간 차이

    [Java] 객체와 클래스, 인스턴스 간 차이

    본 글은 객체와 클래스, 인스턴스 간 차이를 명확히 정리하기 위해 전공 서적들을 참고하여 쓴 글입니다. 실질적인 코드 작성에 도움이 되는 내용보다는 객체 지향 프로그래밍(OOP)에 대한 개념적인 내용이 대부분이며, 그나마 있는 코드도 OOP를 처음 접하는 초심자분들을 위해 제일 간단한 수준으로만 작성했으므로 참고 바랍니다. 객체 (Object) 객체 지향 프로그래밍에서 '객체'를 이해하기 위해서는 현실 세계 속의 객체와 소프트웨어 관점에서의 객체를 구분할 수 있어야 합니다. 우선 현실 세계 속의 객체란 '세상에 존재하는 의사나 행위가 미치는 대상'을 의미합니다. 사실 이 정의는 네이버 사전에 등재되어 있는 것인데, 적절해 보여서 가져왔습니다. 눈에 보이는 대표적인 객체는 사람, 자동차, 건물 등이 있습니..